如何将 3D 坐标转换为屏幕上像素的 x y 位置

问题描述 投票:0回答:1

我想将 3d 坐标(特定点的坐标,例如立方体的顶点)转换为屏幕上像素的 x y 位置,该位置使用屏幕的分辨率、相机的 fov(x、y 分开)和间距和相机的偏航。我尝试过某种光线投射来尝试这一点,但它真的很慢,而且我无法让俯仰和偏航同时工作。我正在用 C++ 编程,所以如果有任何库或标头可以自动执行此操作而不会出现任何速度问题,那也很好

c++ graphics 3d rendering
1个回答
0
投票

如果我们有一个 3D 空间(坐标 x,y,z), 并将对象从坐标 (x_S,y_S,z_S) 的源 S(相机)投影到 2D 子空间(平面)z=0 上,

点 P (x_P,y_P,z_P) 在平面上的投影是根据此公式给出的坐标 (x,y) 的点 Q

x = (x_Pz_S - x_Sz_P)/(z_S - z_P)

y = (y_Pz_S - y_Sz_P)/(z_S - z_P)

矩阵是所有线性(更准确地说,仿射)2D 变换的通用工具,但从 3D 空间到 2D 空间的投影是射影变换(非线性),并且计算有点复杂。

在这种情况下,我只是使用wxMaxima(一个免费且强大的计算机代数系统)进行计算。计算包括 求解表达 3 个点 S、P 和 Q(x,y,0) 对齐这一事实的方程。

© www.soinside.com 2019 - 2024. All rights reserved.