added new screenshot, also update code
This commit is contained in:
+18
-14
@@ -86,10 +86,14 @@ def subdivide(verts, faces, iteration):
|
||||
vec[2] * desiredLength / vecLen_now
|
||||
)
|
||||
|
||||
def getCenterPoint(p1, p2):
|
||||
def getCenterPoint(p1, p2, q1):
|
||||
vecLen_p1 = vecLen(verts[p1])
|
||||
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))
|
||||
|
||||
return scaleVecToLen ((
|
||||
@@ -98,14 +102,14 @@ def subdivide(verts, faces, iteration):
|
||||
(verts[p1][2] + verts[p2][2]) * .5
|
||||
), vecLen_new + heightDelta)
|
||||
|
||||
def divideEdge(edge):
|
||||
def divideEdge(edge, q1):
|
||||
try:
|
||||
normalizedEdge = list(edge)
|
||||
normalizedEdge.sort()
|
||||
normalizedEdge = tuple(normalizedEdge)
|
||||
return dividedEdges[tuple(normalizedEdge)]
|
||||
except Exception as e:
|
||||
newVert = getCenterPoint(*edge)
|
||||
newVert = getCenterPoint(*edge, q1)
|
||||
newIndex = len(verts)
|
||||
normalizedEdge = list(edge)
|
||||
normalizedEdge.sort()
|
||||
@@ -121,26 +125,26 @@ def subdivide(verts, faces, iteration):
|
||||
|
||||
newFaces.append((
|
||||
face[0],
|
||||
divideEdge(edge1),
|
||||
divideEdge(edge3)
|
||||
divideEdge(edge1, face[2]),
|
||||
divideEdge(edge3, face[1])
|
||||
))
|
||||
|
||||
newFaces.append((
|
||||
face[1],
|
||||
divideEdge(edge2),
|
||||
divideEdge(edge1)
|
||||
divideEdge(edge2, face[0]),
|
||||
divideEdge(edge1, face[2])
|
||||
))
|
||||
|
||||
newFaces.append((
|
||||
face[2],
|
||||
divideEdge(edge3),
|
||||
divideEdge(edge2)
|
||||
divideEdge(edge3, face[1]),
|
||||
divideEdge(edge2, face[0])
|
||||
))
|
||||
|
||||
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()
|
||||
for i in range(10):
|
||||
for i in range(6):
|
||||
verts, faces = subdivide(verts, faces, i+1)
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
# Procedurally generate planets
|
||||
|
||||

|
||||
|
||||
The curent version works with a modiefied midpoint-displacement method on a sphere.
|
||||
It can generate different levels of detail on demand.
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 926 KiB |
Binary file not shown.
Reference in New Issue
Block a user