Example #1
0
 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)
Example #2
0
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)
Example #3
0
 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
Example #4
0
 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)
Example #5
0
 def GetScale(self):
     scale, rotation, translation = geo2.MatrixDecompose(
         self.worldTranslation)
     return scale
Example #6
0
 def GetRotation(self):
     scale, rotation, translation = geo2.MatrixDecompose(
         self.worldTranslation)
     rotation = geo2.QuaternionInverse(rotation)
     return rotation