Example #1
0
        public Vector2d Project2d(Vector3d coord, Primitives.Matrix transMat)
        {
            var point = Vector3d.TransformCoordinate(coord, transMat);
            var x     = point.x * Common.CanvasWidth + Common.CanvasWidth / 2.0f;
            var y     = -point.y * Common.CanvasHeight + Common.CanvasHeight / 2.0f;

            return(new Vector2d(x, y));
        }
Example #2
0
        public Vertex Project(Vertex vertex, Primitives.Matrix transMat, Primitives.Matrix world)
        {
            // 进行坐标变换
            var point = Vector3d.TransformCoordinate(vertex.Coordinates, transMat);
            // 在三维世界中转换坐标和法线的顶点
            var point3dWorld  = Vector3d.TransformCoordinate(vertex.Coordinates, world);
            var normal3dWorld = Vector3d.TransformCoordinate(vertex.Normal, world);


            // 变换后的坐标起始点是坐标系的中心点
            // 但是,在屏幕上,我们以左上角为起始点
            // 我们需要重新计算使他们的起始点变成左上角
            var x = point.x * Common.CanvasWidth + Common.CanvasWidth / 2.0f;
            var y = -point.y * Common.CanvasHeight + Common.CanvasHeight / 2.0f;

            return(new Vertex
            {
                Coordinates = new Vector3d(x, y, point.z),
                Normal = normal3dWorld,
                WorldCoordinates = point3dWorld,
                TextureCoordinates = vertex.TextureCoordinates
            });
        }