it fucking works

This commit is contained in:
FelixBrendel
2017-10-17 22:33:33 +02:00
parent fb27345fd1
commit a5dbbc58f3
2 changed files with 48 additions and 30 deletions
+48 -30
View File
@@ -1,4 +1,5 @@
import bpy import bpy
import random
print("- - "*20) print("- - "*20)
@@ -67,28 +68,51 @@ def createMeshFromData(name, origin, verts, faces):
me.update() me.update()
def subdivide(verts, faces): def subdivide(verts, faces, iteration):
newFaces = [] newFaces = []
dividedEdges = {} dividedEdges = {}
def normalize(point): def vecLen(vec):
vecLen = sum([c**2 for c in point])**.5 return sum([c**2 for c in vec])**.5
return tuple(c/vecLen for c in point)
def expandVecToLen(vec, desiredLength):
vecLen_now = vecLen(vec)
return (
vec[0]*desiredLength/vecLen_now,
vec[1]*desiredLength/vecLen_now,
vec[2]*desiredLength/vecLen_now
)
def getCenterPoint(p1, p2): def getCenterPoint(p1, p2):
return normalize (( vecLen_p1 = vecLen(verts[p1])
(verts[p1][0]+verts[p2][0])*.5, vecLen_p2 = vecLen(verts[p2])
(verts[p1][1]+verts[p2][1])*.5, vecLen_new = (vecLen_p1 + vecLen_p2)*.5
(verts[p1][2]+verts[p2][2])*.5 heightDelta = random.gauss(0,.05*(.5**iteration))
)) # heightDelta = 0
# if heightDelta < 0:
# heightDelta = -(heightDelta**iteration)
# else:
# heightDelta = heightDelta**iteration
return expandVecToLen ((
(verts[p1][0]+ verts[p2][0])*.5,
(verts[p1][1]+ verts[p2][1])*.5,
(verts[p1][2]+ verts[p2][2])*.5
), vecLen_new + heightDelta)
def divideEdge(edge): def divideEdge(edge):
try: try:
return dividedEdges[edge] normalizedEdge = list(edge)
normalizedEdge.sort()
normalizedEdge = tuple(normalizedEdge)
return dividedEdges[tuple(normalizedEdge)]
except Exception as e: except Exception as e:
newVert = getCenterPoint(*edge) newVert = getCenterPoint(*edge)
newIndex = len(verts) newIndex = len(verts)
dividedEdges[edge] = newIndex normalizedEdge = list(edge)
normalizedEdge.sort()
normalizedEdge = tuple(normalizedEdge)
dividedEdges[normalizedEdge] = newIndex
verts.append(newVert) verts.append(newVert)
return newIndex return newIndex
@@ -97,32 +121,28 @@ def subdivide(verts, faces):
edge2 = (face[1], face[2]) edge2 = (face[1], face[2])
edge3 = (face[2], face[0]) edge3 = (face[2], face[0])
divideEdge(edge1)
divideEdge(edge2)
divideEdge(edge3)
newFaces.append(( newFaces.append((
face[0], face[0],
dividedEdges[edge1], divideEdge(edge1),
dividedEdges[edge3] divideEdge(edge3)
)) ))
newFaces.append(( newFaces.append((
face[1], face[1],
dividedEdges[edge2], divideEdge(edge2),
dividedEdges[edge1] divideEdge(edge1)
)) ))
newFaces.append(( newFaces.append((
face[2], face[2],
dividedEdges[edge3], divideEdge(edge3),
dividedEdges[edge2] divideEdge(edge2)
)) ))
newFaces.append(( newFaces.append((
dividedEdges[edge1], divideEdge(edge1),
dividedEdges[edge2], divideEdge(edge2),
dividedEdges[edge3] divideEdge(edge3)
)) ))
@@ -130,10 +150,8 @@ def subdivide(verts, faces):
verts, faces = generateIcoSphere() verts, faces = generateIcoSphere()
verts, faces = subdivide(verts, faces) for i in range(9):
verts, faces = subdivide(verts, faces) verts, faces = subdivide(verts, faces, i+1)
verts, faces = subdivide(verts, faces)
verts, faces = subdivide(verts, faces)
verts, faces = subdivide(verts, faces)
createMeshFromData('Icosphere', (0,0,0), verts, faces)
createMeshFromData('ProcGenSphere', (0,0,0), verts, faces)
BIN
View File
Binary file not shown.