从像素到世界坐标公式解释
From pixel to world coordinate formula explanation
我有以下(相对简单的)问题。我正在开发一个光线追踪器,我正在按照 link:
中解释的教程进行操作
有一个公式我没有得到,它用于将像素 (i,j) 映射到世界坐标。公式如下:
float fov = 30, aspectratio = width / height;
float angle = tan(M_PI * 0.5 * fov / 180.);
float xx = (2 * ((x + 0.5) * invWidth) - 1) * angle * aspectratio;
float yy = (1 - 2 * ((y + 0.5) * invHeight)) * angle;
在本教程中,相机放置在 (0,0,0) 并且 up/right/lookAt 根本不使用向量。似乎在每个教程中都使用不同的公式来映射像素,但我无法弄清楚原因。
此外,如果我的相机不放在 (0,0,0) 而是放在我可以决定的另一个位置怎么办?公式将如何变化?你能帮帮我吗?谢谢!
我建议您遵循此 link:
https://www.opengl.org/wiki/Compute_eye_space_from_window_space
您的 x 范围在屏幕坐标 [0, WindowWidth] 中。
在第一行中,您在 [-1,1] 范围内的标准化设备坐标 (NDC) 中计算它。
x_NDC = ( x_Screen *2 / WindowWidth ) - 1;
您可以通过将 x_Screen 设置为最大值 (WindowWidth) 和最小值 (0) 来检查它。你得到 1 和 -1。 y坐标也一样:
y_NDC = ( y_Screen *2 / WindowHeight ) - 1;
您的 z 范围是 [Near,Far]。
z_NDC = ( z_Screen - Near ) / ( Far - Near); // Here you have it scaled to [0,1]
z_NDC = 2*NDC -1 //Scaled to [-1,1];
获得 NDC 坐标后,只需将其与投影矩阵的逆矩阵和模型视图矩阵的逆矩阵相乘即可获得世界坐标。
http://scratchapixel.com/lessons/3d-basic-rendering/3d-viewing-pinhole-camera
如果您对该网站进行了更多研究,您就会找到答案。这个网站的重点是解释那种技术。在期望 SO 上的任何人为您回答之前,请先努力。您的问题应该被严重否决。这是纯粹的懒惰。
我有以下(相对简单的)问题。我正在开发一个光线追踪器,我正在按照 link:
中解释的教程进行操作有一个公式我没有得到,它用于将像素 (i,j) 映射到世界坐标。公式如下:
float fov = 30, aspectratio = width / height;
float angle = tan(M_PI * 0.5 * fov / 180.);
float xx = (2 * ((x + 0.5) * invWidth) - 1) * angle * aspectratio;
float yy = (1 - 2 * ((y + 0.5) * invHeight)) * angle;
在本教程中,相机放置在 (0,0,0) 并且 up/right/lookAt 根本不使用向量。似乎在每个教程中都使用不同的公式来映射像素,但我无法弄清楚原因。 此外,如果我的相机不放在 (0,0,0) 而是放在我可以决定的另一个位置怎么办?公式将如何变化?你能帮帮我吗?谢谢!
我建议您遵循此 link: https://www.opengl.org/wiki/Compute_eye_space_from_window_space
您的 x 范围在屏幕坐标 [0, WindowWidth] 中。 在第一行中,您在 [-1,1] 范围内的标准化设备坐标 (NDC) 中计算它。
x_NDC = ( x_Screen *2 / WindowWidth ) - 1;
您可以通过将 x_Screen 设置为最大值 (WindowWidth) 和最小值 (0) 来检查它。你得到 1 和 -1。 y坐标也一样:
y_NDC = ( y_Screen *2 / WindowHeight ) - 1;
您的 z 范围是 [Near,Far]。
z_NDC = ( z_Screen - Near ) / ( Far - Near); // Here you have it scaled to [0,1]
z_NDC = 2*NDC -1 //Scaled to [-1,1];
获得 NDC 坐标后,只需将其与投影矩阵的逆矩阵和模型视图矩阵的逆矩阵相乘即可获得世界坐标。
http://scratchapixel.com/lessons/3d-basic-rendering/3d-viewing-pinhole-camera
如果您对该网站进行了更多研究,您就会找到答案。这个网站的重点是解释那种技术。在期望 SO 上的任何人为您回答之前,请先努力。您的问题应该被严重否决。这是纯粹的懒惰。