繁体   English   中英

从像素到世界坐标公式说明

[英]From pixel to world coordinate formula explanation

我有以下(相对容易)的问题。 我正在开发光线追踪器,并且正在遵循此链接中说明的教程:

http://www.scratchapixel.com/code.php?id=3&origin=/lessons/3d-basic-rendering/introduction-to-ray-tracing

有一个我不知道的公式,用于将像素(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)处,而是在我可以决定的其他位置,该怎么办? 公式将如何变化? 你能帮我吗? 谢谢!

http://scratchapixel.com/lessons/3d-basic-rendering/3d-viewing-pinhole-camera

如果您对此网站进行了更多研究,您将找到答案。 该网站的重点是解释这种技术。 请期待SO上的任何人为您解答,然后再努力。 您的问题应被否决。 这是纯粹的懒惰。

我建议您点击以下链接: 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设置为Maximum(WindowWidth)和Minimum(0)进行检查。 您得到1和-1。 y坐标相同:

y_NDC = ( y_Screen *2 / WindowHeight ) - 1;

您的z范围是[近,远]。

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坐标后,只需将其与Projection Matrix的逆和ModelView Matrix的逆相乘即可获得世界坐标。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM