Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ws1415:projekte_im_wintersemester_2014_15:perlin3d.py-3dgen

Dies ist eine alte Version des Dokuments!


#-*-coding:utf-8-*- from future import division import math import numpy

g = []

def noise(x, y, z):

  def interpolate(diff_x, diff_y, diff_z, w000, w001, w010, w100, w011, w101, w110, w111 ):
      def blending(x):
          return 10*x**3 - 15*x**4 + 6*x**5
      def lerp(t, a, b):
          return a + t * (b - a)
      blended_x = blending(diff_x)
      blended_y = blending(diff_y)
      blended_z = blending(diff_z)
      return lerp(blended_z, lerp(blended_y, lerp(blended_x, w000,w100), lerp(blended_x,w010,w110)),lerp(blended_y, lerp(blended_x,w001, w101),lerp(blended_x, w011, w111)))
  floored_x = int(math.floor(x))
  floored_y = int(math.floor(y))
  floored_z = int(math.floor(z))
  gradient000 = g[floored_x    ][floored_y    ][floored_z    ]
  gradient001 = g[floored_x    ][floored_y    ][floored_z + 1]
  gradient010 = g[floored_x    ][floored_y + 1][floored_z    ]
  gradient100 = g[floored_x + 1][floored_y    ][floored_z    ]
  gradient011 = g[floored_x    ][floored_y + 1][floored_z + 1]
  gradient101 = g[floored_x + 1][floored_y    ][floored_z + 1]
  gradient110 = g[floored_x + 1][floored_y + 1][floored_z    ]
  gradient111 = g[floored_x + 1][floored_y + 1][floored_z + 1]
  diff_x = x - floored_x
  diff_y = y - floored_y
  diff_z = z - floored_z
  w000 = gradient000[0] *  diff_x      + gradient000[1] *  diff_y      + gradient000[2] *  diff_z
  w001 = gradient001[0] *  diff_x      + gradient001[1] *  diff_y      + gradient001[2] * (diff_z - 1)
  w010 = gradient010[0] * diff_x       + gradient010[1] * (diff_y - 1) + gradient010[2] *  diff_z
  w100 = gradient100[0] * (diff_x - 1) + gradient100[1] *  diff_y      + gradient100[2] *  diff_z
  w011 = gradient011[0] *  diff_x      + gradient011[1] * (diff_y - 1) + gradient011[2] * (diff_z - 1)
  w101 = gradient101[0] * (diff_x - 1) + gradient101[1] *  diff_y      + gradient101[2] * (diff_z - 1)
  w110 = gradient110[0] * (diff_x - 1) + gradient110[1] * (diff_y - 1) + gradient110[2] *  diff_z
  w111 = gradient111[0] * (diff_x - 1) + gradient111[1] * (diff_y - 1) + gradient111[2] * (diff_z - 1)
  w = interpolate(diff_x, diff_y, diff_z, w000, w001, w010, w100, w011, w101, w110, w111)
  return w

def perlinnoise(x, y, z,f_min, f_max=0.5, phi=0.3, a=1, frequenz_faktor=2):

summe = 0
n = 0
f = f_min
a = 1
while f <= f_max:
	summe += a*noise(f*x, f*y, f*z)
	n += 1
	f = f*frequenz_faktor
	a = phi=0.3*a
return summe

def setmaxsize(breite):

  global g
  g = [[[(numpy.random.uniform(-1, 1), numpy.random.uniform(-1, 1), numpy.random.uniform(-1, 1)) for wertx in range(0,200)] for werty in range(0,200)] for wertz in range(0,200)]
ws1415/projekte_im_wintersemester_2014_15/perlin3d.py-3dgen.1426134960.txt.gz · Zuletzt geändert: 2016/05/10 14:46 (Externe Bearbeitung)