def PickObject(self, x, y): if self.sceneManager.GetActiveScene() != self.renderScene: return rescale = 1.0 / 10000.0 projection = trinity.TriProjection() projection.PerspectiveFov(trinity.GetFieldOfView(), trinity.GetAspectRatio(), trinity.GetFrontClip(), trinity.GetBackClip()) view = trinity.TriView() view.transform = trinity.GetViewTransform() scaling, rotation, translation = geo2.MatrixDecompose( self.transform.worldTransform) pZ = geo2.Vec3Transform((0, 0, 1), self.transform.worldTransform) surfaceNormal = geo2.Subtract(pZ, translation) cameraZ = geo2.Vector(view.transform[0][2], view.transform[1][2], view.transform[2][2]) if geo2.Vec3Dot(surfaceNormal, cameraZ) < 0: return self.renderObject.translation = geo2.Vec3Scale(translation, rescale) self.renderObject.rotation = rotation self.renderObject.scaling = geo2.Vec3Scale(scaling, rescale) scaling, rotation, translation = geo2.MatrixDecompose(view.transform) translation = geo2.Vec3Scale(translation, rescale) view.transform = geo2.MatrixTransformation(None, None, scaling, None, rotation, translation) return self.renderObject.PickObject(x, y, projection, view, trinity.device.viewport)
def DecomposeMatrix(matrix): if hasattr(matrix, '__bluetype__') and matrix.__bluetype__ == 'trinity.TriMatrix': matrix = util.ConvertTriToTupleMatrix(matrix) scale, rot, pos = geo2.MatrixDecompose(matrix) rot = geo2.QuaternionRotationGetYawPitchRoll(rot) return (pos, rot, scale)
def Orbit(self, yaw, pitch): dev = trinity.device self.Focus(self.pointOfInterest) up = geo2.Vector(0.0, 1.0, 0.0) t = geo2.Vector(self.localViewMatrix[1][0], self.localViewMatrix[1][1], self.localViewMatrix[1][2]) if geo2.Vec3Dot(t, up) <= 0.0: pitch = -pitch yaw = -yaw pos = self.GetPosition() target = self.pointOfInterest view = geo2.Subtract(pos, target) view = geo2.Vec3Normalize(view) right = geo2.Vec3Cross(view, up) mat = self.localViewMatrix ipmat = geo2.MatrixTranslation(-target[0], -target[1], -target[2]) pmat = geo2.MatrixTranslation(target[0], target[1], target[2]) mat = geo2.MatrixInverse(mat) yrotMat = geo2.MatrixRotationAxis(up, yaw) rrotMat = geo2.MatrixRotationAxis(right, pitch) yrotMat = geo2.MatrixMultiply(yrotMat, rrotMat) mat = geo2.MatrixMultiply(mat, ipmat) mat = geo2.MatrixMultiply(mat, yrotMat) mat = geo2.MatrixMultiply(mat, pmat) self._position = geo2.MatrixDecompose(mat)[2] mat = geo2.MatrixInverse(mat) self.localViewMatrix = mat
def Prepare(self): StretchEffect.Prepare(self) shipBall = self.GetEffectShipBall() targetBall = self.GetEffectTargetBall() turret = shipBall.modules.get(self.moduleID, None) if turret is None: raise RuntimeError("StretchEffect: No module '%s' found" % self.moduleID) turretSet = turret.GetTurretSet() firingBoneWorldTransform = turretSet.GetFiringBoneWorldTransform(0) _, __, offsetPosition = geo2.MatrixDecompose(firingBoneWorldTransform) sourceOffsetCurve = trinity.TriVectorCurve() sourceOffsetCurve.value = offsetPosition self.gfx.source = sourceOffsetCurve destBehavior = trinity.EveLocalPositionBehavior.damageLocator self.gfx.dest = trinity.EveLocalPositionCurve(destBehavior) self.gfx.dest.parent = targetBall.model self.gfx.dest.alignPositionCurve = shipBall uthread.new(self.CreateImpact, targetBall, offsetPosition)
def GetScale(self): scale, rotation, translation = geo2.MatrixDecompose( self.worldTranslation) return scale
def GetRotation(self): scale, rotation, translation = geo2.MatrixDecompose( self.worldTranslation) rotation = geo2.QuaternionInverse(rotation) return rotation