我的C#示例代码发布于: opentk pitch rotation deforms the shape
正如您在代码中看到的,我可以绘制和旋转3d对象。 我想做的是: 给定一个三维坐标(x,y,z),如何得到投影的2d坐标(x,y)?
这是我到目前为止所做的:
int[] viewport = new int[4];
Matrix4 modelViewMatrix, projectionMatrix;
GL.GetFloat(GetPName.ModelviewMatrix, out modelViewMatrix);
GL.GetFloat(GetPName.ProjectionMatrix, out projectionMatrix);
GL.GetInteger(GetPName.Viewport, viewport);
// [x, y] = vec * modelViewMatrix * projectionMatrix * viewport
答案 0 :(得分:0)
你很亲密。您注释掉的行只包含[x,y]。假设你已经正确地计算了所有的矩阵(假设'vec'是一个三维向量),你可以按照你的注释进行乘法,除了你的结果将是另一个三维向量,你只需忽略你的z值。您的z值通过这些矩阵乘法进行变换,但在图形上它们无法看到(在观察XY平面时)。话虽这么说,取决于你如何看待事物(移动相机VS移动物体),物体被观察的角度可以将3D改变为“2D”转换。