本文整理汇总了C#中Matrix4.ExtractTranslation方法的典型用法代码示例。如果您正苦于以下问题:C# Matrix4.ExtractTranslation方法的具体用法?C# Matrix4.ExtractTranslation怎么用?C# Matrix4.ExtractTranslation使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Matrix4
的用法示例。
在下文中一共展示了Matrix4.ExtractTranslation方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ApplyMatrixTransform
public static void ApplyMatrixTransform(TransformMatrix transformMat, matrix m)
{
var transform = transformMat.transform;
var values = m.Values;
var mat = new Matrix4(
(float)values[0], (float)values[1], (float)values[2], (float)values[3],
(float)values[4], (float)values[5], (float)values[6], (float)values[7],
(float)values[8], (float)values[9], (float)values[10], (float)values[11],
(float)values[12], (float)values[13], (float)values[14], (float)values[15]
);
mat.Transpose();
transformMat.matrix *= mat;
var translation = mat.ExtractTranslation();
transform.Translation += translation;
if (translation != Vector3.Zero)
transform.Flags |= (int)Transform.TransformFlags.HasTranslation;
var rotation = mat.ExtractRotation();
transform.Rotation *= rotation;
if (rotation != Quaternion.Identity)
transform.Flags |= (int)Transform.TransformFlags.HasRotation;
var scale = mat.ExtractScale();
transform.ScaleShear[0, 0] *= scale[0];
transform.ScaleShear[1, 1] *= scale[1];
transform.ScaleShear[2, 2] *= scale[2];
if (transform.ScaleShear != Matrix3.Identity)
transform.Flags |= (int)Transform.TransformFlags.HasScaleShear;
}
示例2: BillboardMatrix
/// <summary>
/// Strip away the rotation in the view matrix to make an object always face the camera
/// http://stackoverflow.com/questions/5467007/inverting-rotation-in-3d-to-make-an-object-always-face-the-camera/5487981#5487981
/// </summary>
public static Matrix4 BillboardMatrix(ref Matrix4 modelViewMat)
{
Vector3 trans = modelViewMat.ExtractTranslation();
Vector3 scale = modelViewMat.ExtractScale();
return new Matrix4 (
scale.X, 0f, 0f, 0f,
0f, scale.Y, 0f, 0f,
0f, 0f, scale.Z, 0f,
trans.X, trans.Y, trans.Z, 1f);
}
示例3: Camera
public Camera(int viewportWidth, int viewportHeight, Matrix4 cameraViewMatrix, string name = "Default")
{
PreciseTimer = new Stopwatch();
SetViewportSize(viewportWidth, viewportHeight);
Location = cameraViewMatrix.ExtractTranslation();
CameraViewMatrix = cameraViewMatrix;
//TODO: Someone figure out what this section is meant to be. (tree_game is a good test)
var quaternion = CameraViewMatrix.ExtractRotation(false);
Pitch = quaternion.Y;
Yaw = quaternion.Z;
Name = name;
}
示例4: ApplyLightMatrix
public static void ApplyLightMatrix(Matrix4 world)
{
int uEyePosition = Graphics.GetShader().GetUniformLocation("uEyePosition");
Vector4 eyePosition = Vector4.Transform(new Vector4(world.ExtractTranslation(), 1), world);
GL.Uniform4(uEyePosition, ref eyePosition);
for (int i = 0; i < _numLights; i++)
{
Vector4 position = _lights[i].Position;
int uLightPositionLocation = Graphics.GetShader().GetUniformLocation("uLight[" + i + "].Position");
position = Vector4.Transform(position, world);
GL.Uniform4(uLightPositionLocation, position);
Vector4 direction = _lights[i].Direction;
int uLightDirectionLocation = Graphics.GetShader().GetUniformLocation("uLight[" + i + "].Direction");
direction = Vector4.Transform(direction, world.ExtractRotation());
GL.Uniform4(uLightDirectionLocation, direction);
}
}
示例5: GenerateLookAt
public virtual void GenerateLookAt(Matrix4 centerTransform)
{
Matrix4 e = new Matrix4();
Matrix4 v = new Matrix4();
e = Matrix4.CreateTranslation(1, 0, 0) * Matrix4.CreateRotationZ(Orientation.X) * Matrix4.CreateRotationY(Orientation.Y) * Matrix4.CreateTranslation(CameraSettings.Offset) * centerTransform;
v = Matrix4.CreateTranslation(CameraSettings.Offset) * centerTransform;
World.WorldMatrix = Matrix4.LookAt(v.ExtractTranslation(), e.ExtractTranslation(), Vector3.UnitY);
}
示例6: DrawMesh
public static void DrawMesh(MeshReference mr, Matrix4 transform)
{
Mesh mesh = (Mesh)findFile(mr.PrimaryMesh, RFile.RFileType.Mesh).obj;
if (mesh != null)
{
Matrix4 trans = transform * World.WorldMatrix;
GL.LoadMatrix(ref trans);
int dl = Graphics.GetDetailLevel(transform.ExtractTranslation(), mesh.Size);
if (dl == 3) mesh.Draw(mr.MeshColor, false);
else if (dl == 0) return;
else if (dl < 3)
{
mesh = (Mesh)findFile(mr.LowPolyMesh, RFile.RFileType.Mesh).obj;
if (dl == 2) mesh.Draw(mr.MeshColor, false);
else mesh.Draw(mr.MeshColor, true);
}
}
}