Beispiel #1
0
        // 计算观察矩阵
        public Matrix4x4 LookAt()
        {
            Matrix4x4 view = new Matrix4x4();
            Vector4   xaxis, yaxis, zaxis;

            zaxis = Target - Position;
            zaxis.Normalize();
            xaxis = Vector4.Cross(Up, zaxis);
            xaxis.Normalize();
            yaxis = Vector4.Cross(zaxis, xaxis);
            yaxis.Normalize();

            view.M[0, 0] = xaxis.X;
            view.M[1, 0] = xaxis.Y;
            view.M[2, 0] = xaxis.Z;
            view.M[3, 0] = -Vector4.Dot(xaxis, Position);

            view.M[0, 1] = yaxis.X;
            view.M[1, 1] = yaxis.Y;
            view.M[2, 1] = yaxis.Z;
            view.M[3, 1] = -Vector4.Dot(yaxis, Position);

            view.M[0, 2] = zaxis.X;
            view.M[1, 2] = zaxis.Y;
            view.M[2, 2] = zaxis.Z;
            view.M[3, 2] = -Vector4.Dot(zaxis, Position);

            view.M[0, 3] = view.M[1, 3] = view.M[2, 3] = 0.0f;
            view.M[3, 3] = 1.0f;

            return(view);
        }
Beispiel #2
0
        //消隐
        private bool ShouldBackFaceCull(VertexTriangle oriVt)
        {
            Vector4 a = new Vector4(oriVt.Vertices[0].ScreenSpacePosition);
            Vector4 b = new Vector4(oriVt.Vertices[1].ScreenSpacePosition);
            Vector4 c = new Vector4(oriVt.Vertices[2].ScreenSpacePosition);

            a.Z = b.Z = c.Z = 0;
            Vector4 ab = b - a;
            Vector4 ac = c - a;

            return(Vector4.Cross(ab, ac).Z > 0);
        }