def sortFaces(self): camera = G.cameras[0] indices = self.primitives[self.nPrimitives - self.nTransparentPrimitives:] if len(indices) == 0: return m = matrix.translate(-self.translation) m = matrix.rotx(-self.rx) * m m = matrix.roty(-self.ry) * m m = matrix.rotz(-self.rz) * m m = matrix.translate(self.translation) * m cxyz = matrix.transform3(m, camera.eye) # Prepare sorting data verts = self.verts[indices] - cxyz distances = np.sum(verts**2, axis=-1) distances = np.amin(distances, axis=-1) distances = -distances # Sort order = np.argsort(distances) indices2 = indices[order, :] indices[...] = indices2
def sortFaces(self): import numpy as np import matrix camera = G.cameras[0] indices = self.primitives[self.nPrimitives - self.nTransparentPrimitives:] if len(indices) == 0: return m = matrix.translate(-self.translation) m = matrix.rotx(-self.rx) * m m = matrix.roty(-self.ry) * m m = matrix.rotz(-self.rz) * m m = matrix.translate(self.translation) * m cxyz = matrix.transform3(m, camera.eye) # Prepare sorting data verts = self.verts[indices] - cxyz distances = np.sum(verts ** 2, axis = -1) distances = np.amin(distances, axis = -1) distances = -distances # Sort order = np.argsort(distances) indices2 = indices[order,:] indices[...] = indices2
def calcLightPos(light): return tuple( matrix.transform3( matrix.rotx(-objrot[0]) * matrix.roty(-objrot[1]) * matrix.rotz(-objrot[2]), light.position))
def addXYTranslation(self, deltaX, deltaY): # Get matrix to transform camera X and Y direction into world space m = np.matrix(np.identity(4)) if self.verticalInclination != 0: m = m * matrix.rotx(self.verticalInclination) if self.horizontalRotation != 0: m = m * matrix.roty(self.horizontalRotation) xDirection = matrix.transform3(m, [1.0, 0.0, 0.0]) yDirection = matrix.transform3(m, [0.0, 1.0, 0.0]) # Translation speed is scaled with zoomFactor deltaX = (-deltaX / 50.0) / self.zoomFactor deltaY = (deltaY / 50.0) / self.zoomFactor offset = (deltaX * xDirection) + (deltaY * yDirection) offset[2] = -offset[2] # Invert Z direction self.addTranslation(0, offset[0]) self.addTranslation(1, offset[1]) self.addTranslation(2, offset[2])
def convertToWorld3D(self, sx, sy, sz, obj=None): "Convert 3D (x, y, depth) screen coordinates to 3D OpenGL world coordinates." m = self.getConvertToScreenMatrix(obj) x, y, z = matrix.transform3(m.I, [sx, sy, sz]) return [x, y, z]
def convertToScreen(self, x, y, z, obj=None): "Convert 3D OpenGL world coordinates to screen coordinates." m = self.getConvertToScreenMatrix(obj) sx, sy, sz = matrix.transform3(m, [x, y, z]) return [sx, sy, sz]