4

我正在尝试制作我们太阳系的 C++ OpenGL 表示,作为自学 OpenGL 的一种方式,所以请保持你的答案简单。我遇到的问题是行星距离很远,所以从任何给定的行星观看时,其他一切都超出了剪切平面。如何将 C++ OpenGL 3.1 平面的剪裁移动到,比如说2000000000如果可以的话,我更喜欢一个简单的代码片段。我已经查看了关于此的 SO 和论坛帖子,但它们要么太旧以至于什么都不适用(使用旧版 API 或只是死链接),要么太复杂以至于我无法弄清楚他们在说什么。

4

1 回答 1

2

裁剪平面由透视投影矩阵定义。

如果使用glFrustum,请将传递给它的最后一个参数更改为 2000000000.0。

如果您使用自己的矩阵,请将矩阵数组的第 10 个元素设置为:

(2000000000.0+nearClippingPlane)/(nearClippingPlane-2000000000.0)

(公式为(far+near)/(near-far)

第十四至:

(-4000000000.0*nearClippingPlane)/(2000000000.0-nearClippingPlane)

(公式为(-2.0*near*far)/(far-near)

但是,2000000000 是非常大的价值,因此如果添加山脉等细节,可能会发生 Z-fighting。

于 2013-02-27T12:22:11.087 回答