gpt4 book ai didi

opengl - gl_Position 是如何变成窗口中的 (x, y) 位置的?

转载 作者:行者123 更新时间:2023-12-01 15:58:28 25 4
gpt4 key购买 nike

我试图了解 gl_Position 如何变成屏幕中的 (x, y) 位置以及如何将其转换回来(例如,获取鼠标点击的位置).

例如,假设我有以下 3D 向量:

V = [ -70.0, 0.27, -30.0, 1.0 ]

我的MVP(model-view-projection),从透视图计算,是

M = [[-1.34,  0.0 , 0.0 ,   0.0  ], 
[ 0.0, 1.26, 1.28, 0.40 ],
[ 0.0, -0.72, 0.71, 141.54 ],
[ 0.0, -0.71, 0.70, 142.13 ]]

如果我将两者相乘,我得到:

M * V = [ 94.11, -37.53, 120.079, 120.86 ]

我在 gl_Position 中设置这个值后,矢量被绘制在窗口中的以下位置(我的窗口是 800x600):

P = [ 702, 374 ]

我无法理解的是:M * V 是如何变成P 的?我知道这与 V 中的 w 有关,但我找不到与 P 得到相同结果的计算>.

第二个问题是,如何将 P 转换为 V,例如捕捉鼠标点击的 3D 位置。

最佳答案

从 M*V 到 P,您需要将 M*V 除以最后一个 (w) 分量,这称为透视划分,然后应用视口(viewport)变换以获得实际像素。看看these excellent explanations.

如果没有进一步的深度信息,从 2d 返回到 3d 在数学上是不可能的,这可以使用 gluUnproject 获得。 Look here有关如何使用它的信息。但是请注意,根据您的用例,每秒频繁使用此方法可能会非常慢。不过,这可能会让您了解这一切是如何运作的。

关于opengl - gl_Position 是如何变成窗口中的 (x, y) 位置的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25687213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com