我正在尝试将我们的太阳系的C ++ OpenGL表示作为一种自学OpenGL的方式,所以请保持简单的答案。
我遇到的问题是行星距离很远,因此从任何给定行星观察时,其他一切都超出了剪切平面。 如何将C ++ OpenGL 3.1平面的剪辑移动到2000000000
?如果可以的话,我更喜欢简单的代码片段。
我已经查询了SO和论坛帖子,但它们要么太老了以至于什么都不适用(使用遗留API或只是死链接),或者太复杂以至于我无法弄清楚他们在说什么。
答案 0 :(得分:2)
剪切平面由透视投影矩阵定义。
如果使用glFrustum
,请将传递给它的最后一个参数更改为2000000000.0。
如果您使用自己的矩阵,请将矩阵数组的第10个元素设置为:
(2000000000.0+nearClippingPlane)/(nearClippingPlane-2000000000.0)
(公式为(far+near)/(near-far)
)
和14th:
(-4000000000.0*nearClippingPlane)/(2000000000.0-nearClippingPlane)
(公式为(-2.0*near*far)/(far-near)
)
2000000000是非常大的价值,因此如果添加山脉等细节,可能会发生Z战斗。