我正在尝试以太阳系的C ++ OpenGL表示形式来自学OpenGL,所以请保持简单的答案。
我的问题是行星距离很远,所以从任何给定的行星上观看时,其他一切都超出了修剪平面。如何将C ++ OpenGL 3.1平面的裁剪移动到2000000000
?如果可以的话,我希望使用一个简单的代码段。
我在SO和论坛上查找了有关此内容的文章,但是它们太旧了,什么都不适用(使用旧版API或只是无效链接),或者太复杂了,以至于我无法弄清他们在说什么。
最佳答案
裁剪平面由透视投影矩阵定义。
如果使用glFrustum
,请将传递给它的最后一个参数更改为2000000000.0。
如果使用自己的矩阵,请将矩阵数组的第10个元素设置为:(2000000000.0+nearClippingPlane)/(nearClippingPlane-2000000000.0)
(公式为(far+near)/(near-far)
)
第14位:(-4000000000.0*nearClippingPlane)/(2000000000.0-nearClippingPlane)
(公式为(-2.0*near*far)/(far-near)
)
2000000000是非常大的值,因此,如果添加山等细节,则可能会发生Z战。