当前位置: 首页>>代码示例>>C#>>正文


C# Matrix4.ExtractRotation方法代码示例

本文整理汇总了C#中Matrix4.ExtractRotation方法的典型用法代码示例。如果您正苦于以下问题:C# Matrix4.ExtractRotation方法的具体用法?C# Matrix4.ExtractRotation怎么用?C# Matrix4.ExtractRotation使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Matrix4的用法示例。


在下文中一共展示了Matrix4.ExtractRotation方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的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;
        }
开发者ID:Norbyte,项目名称:lslib,代码行数:33,代码来源:ColladaHelpers.cs

示例2: SSpaceMissileClusterVisualData

        public SSpaceMissileClusterVisualData(
            Matrix4 launcherWorldMat, Vector3 launcherVel, int numMissiles,
            ISSpaceMissileTarget target, float timeToHit,
            SSpaceMissileVisualParameters mParams,
            Vector3[] meshPositioningOffsets = null,
            Vector3[] meshPositioningDirections = null,
            BodiesFieldGenerator meshPositioningGenerator = null,
            SSpaceMissileVisualData.AtTargetFunc atTargetFunc = null)
        {
            _target = target;
            _timeToHit = timeToHit;
            _parameters = mParams;
            _missiles = new SSpaceMissileVisualData[numMissiles];
            this.atTargetFunc = atTargetFunc;

            Vector3[] localSpawnPts = new Vector3[numMissiles];
            Quaternion[] localSpawnOrients = new Quaternion[numMissiles];
            if (meshPositioningGenerator != null) {
                meshPositioningGenerator.Generate(numMissiles,
                    (id, scale, pos, orient) => {
                        localSpawnPts [id] = pos;
                        localSpawnOrients [id] = orient;
                        return true;
                    }
                );
            }

            Quaternion launcherOrientation = launcherWorldMat.ExtractRotation();
            for (int i = 0; i < numMissiles; ++i) {
                if (meshPositioningOffsets != null && meshPositioningOffsets.Length > 0) {
                    localSpawnPts [i] += meshPositioningOffsets [i % meshPositioningOffsets.Length];
                }
                if (meshPositioningDirections != null && meshPositioningDirections.Length > 0) {
                    int idx = i % meshPositioningDirections.Length;
                    localSpawnOrients [i] *= OpenTKHelper.getRotationTo(
                        Vector3.UnitZ, meshPositioningDirections [idx], Vector3.UnitZ);
                }
                Vector3 missileWorldPos = Vector3.Transform(localSpawnPts [i], launcherWorldMat);
                Vector3 missileLocalDir = Vector3.Transform(Vector3.UnitZ, localSpawnOrients [i]);
                Vector3 missileWorldDir = Vector3.Transform(missileLocalDir, launcherOrientation);
                Vector3 missileWorldVel = launcherVel + missileWorldDir * mParams.ejectionVelocity;

                _missiles [i] = mParams.createMissile(
                    missileWorldPos, missileWorldDir, missileWorldVel, this, i);

                #if false
                _missiles [i] = new SSpaceMissileVisualData (
                    missileWorldPos, missileWorldDir, missileWorldVel,
                    this, clusterId: i);
                #endif
            }
        }
开发者ID:jeske,项目名称:SimpleScene,代码行数:52,代码来源:SSpaceMissilesVisualSimulation.cs

示例3: updateModelView

 /// <summary>
 /// Compute orientation around X once per frame to orient the sprites towards the viewer
 /// </summary>
 public void updateModelView(ref Matrix4 modelViewMatrix)
 {
     Quaternion quat = modelViewMatrix.ExtractRotation();
     // x-orient
     Vector3 test1 = new Vector3(0f, 1f, 0f);
     Vector3 test2 = Vector3.Transform(test1, quat);
     float dot = Vector3.Dot(test1, test2);
     float angle = (float)Math.Acos(dot);
     if (test2.Z < 0f) {
         angle = -angle;
     }
     _orientationX = angle;
 }
开发者ID:RealRui,项目名称:SimpleScene,代码行数:16,代码来源:SimpleExplosionRenderer.cs

示例4: 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;
        }
开发者ID:SteamDatabase,项目名称:ValveResourceFormat,代码行数:16,代码来源:Camera.cs

示例5: ScaleToScreenPxViewMat

        /// <summary>
        /// View matrix that makes the object appear on the screen in pixel dimentions matching it's 
        /// scale value (after modelview and projection transforms)
        /// </summary>
        public static Matrix4 ScaleToScreenPxViewMat(Vector3 objPos, float objScaleX,
                                                     ref Matrix4 viewMat, ref Matrix4 projMat)
        {
            objScaleX = Math.Abs(objScaleX);

            // compute rightmost point in world coordinates
            Matrix4 viewRotInverted = Matrix4.CreateFromQuaternion(viewMat.ExtractRotation().Inverted());
            Vector3 viewRight = Vector3.Transform(Vector3.UnitX, viewRotInverted).Normalized();
            Vector3 rightMostInWorld = objPos + objScaleX * viewRight;

            // compute things in screen coordinates and find the required scale mitigation
            Matrix4 modelViewProjMat = viewMat * projMat;
            RectangleF clientRect = GetClientRect();
            Vector2 centerOnScreen = WorldToScreen(objPos, ref modelViewProjMat, ref clientRect);
            Vector2 rightMostOnScreen = WorldToScreen(rightMostInWorld, ref modelViewProjMat, ref clientRect);
            float distanceObserved = Math.Abs(rightMostOnScreen.X - centerOnScreen.X);
            float scaleMitigation = objScaleX / distanceObserved;
            //System.Console.WriteLine("rightmost x = " + rightMostOnScreen.X);
            return Matrix4.CreateScale(scaleMitigation);
            //return Matrix4.Identity;
        }
开发者ID:kniteli,项目名称:SimpleScene,代码行数:25,代码来源:OpenTKHelper.cs

示例6: 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);
            }
        }
开发者ID:jikoriko,项目名称:OpentkEngine,代码行数:19,代码来源:Lighting.cs

示例7: updateModelView

 public void updateModelView(ref Matrix4 modelViewMatrix)
 {
     Quaternion quat = modelViewMatrix.ExtractRotation ().Inverted();
     Vector3 euler = OpenTKHelper.QuaternionToEuler (ref quat);
     Vector3 baseVec = new Vector3 (euler.X + 0.5f*(float)Math.PI, euler.Y, euler.Z);
     orientationMin = baseVec + new Vector3((float)Math.PI/8f, 0f, 0f);
     orientationMax = baseVec + new Vector3((float)Math.PI*3f/8f, 2f*(float)Math.PI, 0f);
 }
开发者ID:jeske,项目名称:SimpleScene,代码行数:8,代码来源:SExplosionManager.cs

示例8: Transformed

 public SSRay Transformed(Matrix4 mat)
 {
     // a point is directly transformed
     // however, a ray is only rotationally transformed.
     return new SSRay( Vector3.Transform(pos, mat) , Vector3.Transform(dir,mat.ExtractRotation()).Normalized() );
 }
开发者ID:jeske,项目名称:SimpleScene,代码行数:6,代码来源:SSRay.cs

示例9: Tranform

 public void Tranform(Matrix4 matrix)
 {
     Position = Vector4.Transform(new Vector4(Position, 1.0f), matrix).Xyz;
     Normal = Vector3.Transform(Normal, matrix.ExtractRotation(true));
 }
开发者ID:yanko,项目名称:vengine,代码行数:5,代码来源:PathTracer.cs

示例10: Update

        public virtual void Update(float deltaTime)
        {
            if(DirectionLock)
            {
                Position = Target - Direction * Distance;
            }
            else
            {
                Direction = Target - Position;
                Distance = Direction.Length;
                Direction.Normalize();
                rot.X = Vector3.CalculateAngle(Direction, Vector3.UnitZ);
                rot.Y = Vector3.CalculateAngle(Direction, Vector3.UnitY);
            }

            View = Matrix4.LookAt(Position, Target, Up);
            InvView = View.Inverted();

            VPMatrix = View * Projection;
            InvVPMatrix = VPMatrix.Inverted();

            var rotation = VPMatrix.ExtractRotation();
            NormalMatrix = Matrix3.CreateFromQuaternion(rotation);

            Frustum = new BoundingFrustum(VPMatrix);
        }
开发者ID:Lazzu,项目名称:Hatzap,代码行数:26,代码来源:Camera.cs


注:本文中的Matrix4.ExtractRotation方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。