GLfloat或GLdouble默认情况下?

Kor*_*idu 5 c++ opengl

在C++中,最好在double默认情况下使用,float或者long double仅在我们确实知道需要它们时使用.但对于OpenGL,我发现这GLfloat似乎是默认的.考虑到双精度现在在最新的GPU上很常见,它仍然是相关的吗?

Dam*_*mon 9

情况恰恰相反.float默认情况下,您应该在C++中使用,并且只有double在您确定需要精确的额外数字时才使用(对于某些科学的,可能是天文学或粒子物理学,模拟).通常当您认为需要时double,您应该使用定点,或者您应该将您的float值放到正确的范围内.

使用双精度图形.尽管所有现代GPU都支持它,但双精度数学通常比单精度慢,并且没有可观察到的优势.所有与"图形"相关的东西(或者说"一切"都是99.99%是一个非常明确的措辞)可以正常使用float或者GLfloat就此而言.
甚至在几年前,当一些GPU仅以24位精度工作时,没有明显的差异.

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

Tom Forsyth甚至将"双精度"作为他的Offend-O-Matic的第一点.他特别关注"游戏",但它确实适用于几乎所有软件,其中一些科学模拟是例外.一定要阅读随附的文章A Precision of Precision来理解他的推理.
在浮点上不那么令人反感的是,Ericson的epsilon不是0.000001.

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

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