Преглед изворни кода

added new screenshot, also update code

master
FelixBrendel пре 8 година
родитељ
комит
b1405f44ac
4 измењених фајлова са 19 додато и 14 уклоњено
  1. +18
    -14
      genSphere.py
  2. +1
    -0
      readme.md
  3. BIN
     
  4. BIN
     

+ 18
- 14
genSphere.py Прегледај датотеку

@@ -86,10 +86,14 @@ def subdivide(verts, faces, iteration):
vec[2] * desiredLength / vecLen_now vec[2] * desiredLength / vecLen_now
) )


def getCenterPoint(p1, p2):
def getCenterPoint(p1, p2, q1):
vecLen_p1 = vecLen(verts[p1]) vecLen_p1 = vecLen(verts[p1])
vecLen_p2 = vecLen(verts[p2]) vecLen_p2 = vecLen(verts[p2])
vecLen_new = (vecLen_p1 + vecLen_p2)*.5

vecLen_q1 = vecLen(verts[q1])

vecLen_new = (vecLen_p1 + vecLen_p2) + (3**.5)*vecLen_q1
vecLen_new /= 2 + (3**.5)
heightDelta = random.gauss(0,.01*(.6**iteration)) heightDelta = random.gauss(0,.01*(.6**iteration))


return scaleVecToLen (( return scaleVecToLen ((
@@ -98,14 +102,14 @@ def subdivide(verts, faces, iteration):
(verts[p1][2] + verts[p2][2]) * .5 (verts[p1][2] + verts[p2][2]) * .5
), vecLen_new + heightDelta) ), vecLen_new + heightDelta)


def divideEdge(edge):
def divideEdge(edge, q1):
try: try:
normalizedEdge = list(edge) normalizedEdge = list(edge)
normalizedEdge.sort() normalizedEdge.sort()
normalizedEdge = tuple(normalizedEdge) normalizedEdge = tuple(normalizedEdge)
return dividedEdges[tuple(normalizedEdge)] return dividedEdges[tuple(normalizedEdge)]
except Exception as e: except Exception as e:
newVert = getCenterPoint(*edge)
newVert = getCenterPoint(*edge, q1)
newIndex = len(verts) newIndex = len(verts)
normalizedEdge = list(edge) normalizedEdge = list(edge)
normalizedEdge.sort() normalizedEdge.sort()
@@ -121,26 +125,26 @@ def subdivide(verts, faces, iteration):


newFaces.append(( newFaces.append((
face[0], face[0],
divideEdge(edge1),
divideEdge(edge3)
divideEdge(edge1, face[2]),
divideEdge(edge3, face[1])
)) ))


newFaces.append(( newFaces.append((
face[1], face[1],
divideEdge(edge2),
divideEdge(edge1)
divideEdge(edge2, face[0]),
divideEdge(edge1, face[2])
)) ))


newFaces.append(( newFaces.append((
face[2], face[2],
divideEdge(edge3),
divideEdge(edge2)
divideEdge(edge3, face[1]),
divideEdge(edge2, face[0])
)) ))


newFaces.append(( newFaces.append((
divideEdge(edge1),
divideEdge(edge2),
divideEdge(edge3)
divideEdge(edge1, face[2]),
divideEdge(edge2, face[0]),
divideEdge(edge3, face[1])
)) ))




@@ -148,7 +152,7 @@ def subdivide(verts, faces, iteration):




verts, faces = generateIcoSphere() verts, faces = generateIcoSphere()
for i in range(10):
for i in range(6):
verts, faces = subdivide(verts, faces, i+1) verts, faces = subdivide(verts, faces, i+1)






+ 1
- 0
readme.md Прегледај датотеку

@@ -1,5 +1,6 @@
# Procedurally generate planets # Procedurally generate planets


![planet](screenshots/planet.png)


The curent version works with a modiefied midpoint-displacement method on a sphere. The curent version works with a modiefied midpoint-displacement method on a sphere.
It can generate different levels of detail on demand. It can generate different levels of detail on demand.




Loading…
Откажи
Сачувај