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)); }
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 }); }