投影三维坐标到屏幕坐标

2024-04-20 04:20:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有世界三维坐标[3D_x, 3D_y, 3D_z],我想用透视投影投影到屏幕坐标[screen_x, screen_y]。我还需要一个相机视图,经过一些研究,我明白这是一个观察矩阵。我知道以下值:

screen = [screen_width, screen_height]
Camera_Coordinates = [cx, cy, cz]
Target_Coordinates = [0,0,0]

最后我有一个三维坐标[3D_x, 3D_y, 3D_z],透视投影矩阵,视图矩阵

我错过什么了吗?如果不是,我应该以什么顺序将上述数据相乘以获得最终屏幕坐标[screen_x, screen_y]?在


Tags: 视图target屏幕顺序世界矩阵czwidth
1条回答
网友
1楼 · 发布于 2024-04-20 04:20:25

你好像少了几步。 事实上,你需要根据你的相机旋转和位置计算出一个世界的视角矩阵,然后将你的世界视图矩阵乘以投影矩阵得到变换矩阵,然后你必须乘以世界坐标才能得到“视野”坐标。 然后,您必须使用以下公式(我使用的公式)将获得的坐标投影到屏幕(2D)空间:

onscreen.x = ((camera.zfar / vertex.in_view.z) * vertex.in_view.x - camera.fov) + screen.width / 2.0;
onscreen.y = ((scene.zfar / vertex.in_view.z) * vertex.in_view.y - camera.fov) + screen.height / 2.0;

我知道我的方法还远远不够完美(我正在寻找更好的方法来实现这一点),而且我在这个过程中丢弃了一些矩阵乘法,但我自己找到了它,而且它正在工作。;-) 而且,你不需要一个lookat_矩阵,但它可以非常有用(例如,它可以用于背面剔除)

相关问题 更多 >