gpt4 book ai didi

opengl - 获取在 OpenGl 中可以看到的所有内容的边界框

转载 作者:行者123 更新时间:2023-12-04 03:00:28 24 4
gpt4 key购买 nike

如何在纯 OpenGL 中为屏幕上可见的所有内容设置边界框?我想要边界框的所有 8 个点的 X、Y 和 Z。

最佳答案

OpenGL 没有定义您在屏幕上看到的固定“盒子”体积。从某种意义上说,应用程序定义了这些边界 - which do not, in general, form a rectangular prism - 使用变换和投影。最接近这种“边界框”的是规范化设备坐标空间 投影后的 3d 视口(viewport)。

A bounding box世界坐标空间中包含所有几何体的东西是您必须根据数据确定的,与 GL 管道无关。


要恢复世界坐标空间 (WCS) 中映射到视口(viewport)角的点,您需要了解矩阵变换和齐次坐标的工作原理。

投影后归一化设备坐标空间 (NDCS) 中的“前”或“近”平面(除以 W)为​​:Z/W = -1 . NDCS 是一个左手 坐标空间。

这对应于超平面:Z = - W ,在裁剪坐标空间中,所以形式的任何(齐次)点:(x, y, -z, z)将转换到:(x/z, y/z, -1, 1) .

映射到 3D 视口(viewport)的规范 View 体积由以下定义:
-1 <= X/W <= 1, -1 <= Y/W <= 1, -1 <= Z/W <= 1 , 以 (6) 个超平面为界:

X ± W = 0, Y ± W = 0, Z ± W = 0 (the homogeneous clipping planes)

因此可以扩展上面的内容以找到对应于对​​应于 3d 视口(viewport)的 View 体积的“角”的(齐次)坐标。考虑视口(viewport)的右上角,在“近”平面上。对应于:(1, 1, -1, 1) ,尽管形式的任何一点:(W, W, -W, W)将转换到相同的 3D (NDCS) 点。

给定一些矩阵:[M]转换点 P (在 WCS 中)产生 Q = (1, 1, -1, 1) ,然后只需使用逆(矩阵)变换即可:P = inv[M] * Q

同样的想法可以应用于每个“角落”。它对于拾取也非常有用——拾取光线从“眼睛”运行到 (x, y, -1, 1) 的 WCS 逆投影。 .


注意:这比我打算深入的细节要多,可能超出了 OP 的要求,但我发现关于选择的问题经常出现。 p>

关于opengl - 获取在 OpenGl 中可以看到的所有内容的边界框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14855206/

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