我已经看到很多屏幕坐标到世界坐标帖,但没有看到相反的情况.有一种简单的方法可以从三维点获取屏幕坐标,从我查看的任何角度来看?我正在使用C++和opengl
Bah*_*bar 21
erjot的答案是不完整的.
还有2件事需要考虑.
homogeneous = P . M . world,homogeneous向量是均匀空间中的4-d向量.特别是,要将其带回[-1:1] ^ 3立方体,您需要将其前3个坐标除以homogeneous.w.cube.x = homogeneous.x / homogeneous.w(有些人称之为预测鸿沟).window.x = viewport.x + viewport.width * (cube.x+1)/2 如果您关心最终的Z,则转换不会通过视口,而是通过DepthRange.
顶点的屏幕坐标只是这个顶点乘以投影和模型视图矩阵的结果:
screen_coordinates = projection_matrix * modelview_matrix * world_coordinates
您可以手动完成(特别是如果您使用某些数学库对矩阵进行操作)或使用gluProject,例如:
std::array<GLfloat, 16> projection;
std::array<GLfloat, 16> modelview;
std::array<GLfloat, 3> screen_coords;
glGetFloatv(GL_PROJECTION_MATRIX, projection.data());
glGetFloatv(GL_MODELVIEW_MATRIX, modelview.data());
gluProject(world_coords[0], world_coords[1], world_coords[2],
modelview.data(), projection.data(),
screen_coords.data(), screen_coords.data() + 1, screen_coords.data() + 2);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20787 次 |
| 最近记录: |