GLfloat或GLdouble默认情况下?

时间:2013-11-21 12:32:23

标签: c++ opengl

在C ++中,默认情况下最好使用double,只有在我们真正知道需要时才floatlong double。但是对于OpenGL,我发现GLfloat似乎是默认值。考虑到双精度现在在最新的GPU上很常见,它仍然是相关的吗?

1 个答案:

答案 0 :(得分:8)

情况恰恰相反。你应该在C ++中默认使用float,如果你确定你确实需要那些精确的额外数字(对于一些科学的,可能是天文学或粒子物理学,模拟),你只能使用double。通常当您认为自己需要double时,您应该使用定点,或者应该将float值设置为正确的范围。

对图形使用双精度。虽然所有现代GPU都支持它,但双精度数学通常比单精度慢,并且没有可观察到的优势。与“图形”相关的所有内容(或者说“一切”都是99.99%是一个非常明确的措辞)可以正常使用floatGLfloat来解决这个问题。
甚至在几年前,当一些GPU仅使用24位精度工作时,没有明显的区别。

事实上,当人们使用double,因为他们认为他们应该这样做时,99%的时间他们做错了。

汤姆福赛思甚至将“双精度”作为他Offend-O-Matic的第一点。他特别关注“游戏”,但它确实适用于几乎所有软件,其中一些科学模拟是例外。请务必阅读随附的文章A Matter of Precision以了解他的推理 Ericson的epsilon is not 0.000001演示文稿中,浮点数的攻击性较低。

在OpenGL中非常相似。如果您了解浮点的工作原理并正确使用它,那么float将正常工作。应用变换矩阵等时的舍入误差是不可见的 如果你不明白它是如何工作的,那么使用双精度会使问题向后移动一点,但是当你不期望它时它仍然会咬你。

令人惊讶的是,即使现在人们仍然使用双精度浮点,即使是货币或时间这些荒谬的原因(因为它的精确度是的两倍,呃?)并且当它们在脸上爆炸时会感到惊讶人们开始大吼大叫。