Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def _calc_normal(self, i1: int, i2: int, i3: int, reverse: bool) -> bool:
v1, v2, v3 = (
self._vertices[i1],
self._vertices[i2],
self._vertices[i3],
)
normal = plane_normal(v1, v2, v3)
if reverse:
normal = invert_vector(normal)
self._normals[i1] = normal
self._normals[i2] = normal
self._normals[i3] = normal
return True
u2 = u_step * j
v2 = v_step * (i + 1)
x3 = r * math.sin(step_height * (i + 1)) * math.cos(step_angle * (j + 1))
y3 = r * math.sin(step_height * (i + 1)) * math.sin(step_angle * (j + 1))
z3 = r * math.cos(step_height * (i + 1))
u3 = u_step * (j + 1)
v3 = v_step * (i + 1)
x4 = r * math.sin(step_height * i) * math.cos(step_angle * (j + 1))
y4 = r * math.sin(step_height * i) * math.sin(step_angle * (j + 1))
z4 = r * math.cos(step_height * i)
u4 = u_step * (j + 1)
v4 = v_step * i
normal = plane_normal([x1, y1, z1], [x2, y2, z2], [x3, y3, z3])
self._vertices.append([x1, y1, z1])
self._vertices.append([x2, y2, z2])
self._vertices.append([x3, y3, z3])
self._vertices.append([x4, y4, z4])
self._texcoords.append([u1, v1])
self._texcoords.append([u2, v2])
self._texcoords.append([u3, v3])
self._texcoords.append([u4, v4])
self._normals.append([normal[0], normal[1], normal[2]])
self._normals.append([normal[0], normal[1], normal[2]])
self._normals.append([normal[0], normal[1], normal[2]])
self._normals.append([normal[0], normal[1], normal[2]])
self._indices.append([indices, indices + 1, indices + 2])
self._indices.append([indices, indices + 2, indices + 3])
self.materials[DEFAULT]._indices.append([indices, indices + 1, indices + 2])
self.materials[DEFAULT]._indices.append([indices, indices + 2, indices + 3])
normals = [
[0.0, -1.0, 0.0], # front
[1.0, 0.0, 0.0], # right
[-1.0, 0.0, 0.0], # left
[0.0, 1.0, 0.0], # back
[0.0, 0.0, 1.0], # top
[0.0, 0.0, -1.0], # bottom
]
for face in self._indices:
v1, v2, v3 = (
self._vertices[face[0]],
self._vertices[face[1]],
self._vertices[face[2]],
)
# find face normal
normal = plane_normal(v1, v2, v3)
# determine which face of the cube
angles = [vector_angle(normal, n) for n in normals]
face_dir = angles.index(min(angles))
if face_dir == 0:
t1 = (v1[0] - vmin[0]) / width
s1 = (v1[2] - vmin[2]) / height
t2 = (v2[0] - vmin[0]) / width
s2 = (v2[2] - vmin[2]) / height
t3 = (v3[0] - vmin[0]) / width
s3 = (v3[2] - vmin[2]) / height
self._texcoords.extend([[t1, s1], [t2, s2], [t3, s3]])
if face_dir == 1:
t1 = (v1[1] - vmin[1]) / depth
s1 = (v1[2] - vmin[2]) / height
t2 = (v2[1] - vmin[1]) / depth
s2 = (v2[2] - vmin[2]) / height
"""
if len(vertices) != 3:
logging.error("A triangle must have 3 vertices")
return
if normals is not None and len(normals) != 3:
logging.error("There must be one normal per vertex")
return
if texcoords is not None and len(texcoords) != 3:
logging.error("There must be one texcoord per vertex")
return
if normals is None:
v1, v2, v3 = vertices[0], vertices[1], vertices[2]
normal = plane_normal(v1, v2, v3)
normals = [normal, normal, normal]
if texcoords is None:
texcoords = [[0, 0], [1, 0], [1, 1]]
if colors:
for color in colors:
self._vertex_colors.append(color)
self._vertices += vertices
i = len(self._indices) * 3
self._indices.append([i, i + 1, i + 2])
self.materials[material]._indices.append([i, i + 1, i + 2])
for normal in normals:
self._normals.append(normal)
for t in texcoords:
self._texcoords.append(t)