【问题标题】:Project 3D coordinates to screen coordinates将 3D 坐标投影到屏幕坐标
【发布时间】:2014-08-08 12:23:47
【问题描述】:

我有世界 3D 坐标 [3D_x, 3D_y, 3D_z],我想使用透视投影将其投影到屏幕坐标 [screen_x, screen_y]。我还需要一个相机视图,经过一些研究,我了解到它是一个 LookAt Matrix。我知道以下价值观:

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

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

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

【问题讨论】:

    标签: python 3d 2d transform projection


    【解决方案1】:

    您似乎缺少几个步骤。 实际上,您需要根据您的相机旋转和位置计算一个 world_to_view 矩阵,然后将您的 world_to_view 矩阵乘以 projection_matrix 以获得 transform_matrix,然后您必须将 in_world 坐标相乘才能获得“视野内”坐标。 然后您必须使用以下公式(这是我使用的公式)将获得的坐标投影到屏幕(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_matrix,但它非常有用(例如,它可以用于背面剔除)

    【讨论】:

      猜你喜欢
      • 2012-04-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 2021-05-05
      • 1970-01-01
      相关资源
      最近更新 更多