簡體   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