为什么我们在 OpenGL 和 DirectX 中没有更小的浮点类型?
Why don't we have smaller float types in OpenGL and DirectX?
少于 10 位浮点数有什么问题?为什么我们没有 8 位浮点数?我可以想象如果将 glfloat 用于颜色会如何影响结果,但我无法想象它如何影响顶点。当我们放大对象时是否开始出现问题?
是的,gpu 将如此多的值视为 32 位值,甚至 opengl 红皮书也建议我们尽可能使用半浮点数,但我如何知道我的精度下限?
Why don't we have 8 bit floats? I can imagine how it would affect the outcome if glfloat is used for colors, but I can't imagine how it affects vertices. Do problems start to occur when we zoom into objects?
嗯,是的。鉴于如今即使是低分辨率显示器在一个方向上也至少有 1024 个像素,您至少需要 10 位 significant 数字才能准确表示屏幕上的位置。因此,假设整个转换链是在不损失精度的情况下执行的(显然情况并非如此),这意味着原始数据中至少需要 11 位有效数字。
在浮点值中,尾数是给出有效数字的值。在半精度浮点数(总共 16 位)中,尾数为 11 位长,这是在屏幕 space 中表示顶点所需的最低精度,无需转换操作舍入伪像在低分辨率屏幕上变得可见。
8 位精度太低,无法用于任何用途。
少于 10 位浮点数有什么问题?为什么我们没有 8 位浮点数?我可以想象如果将 glfloat 用于颜色会如何影响结果,但我无法想象它如何影响顶点。当我们放大对象时是否开始出现问题?
是的,gpu 将如此多的值视为 32 位值,甚至 opengl 红皮书也建议我们尽可能使用半浮点数,但我如何知道我的精度下限?
Why don't we have 8 bit floats? I can imagine how it would affect the outcome if glfloat is used for colors, but I can't imagine how it affects vertices. Do problems start to occur when we zoom into objects?
嗯,是的。鉴于如今即使是低分辨率显示器在一个方向上也至少有 1024 个像素,您至少需要 10 位 significant 数字才能准确表示屏幕上的位置。因此,假设整个转换链是在不损失精度的情况下执行的(显然情况并非如此),这意味着原始数据中至少需要 11 位有效数字。
在浮点值中,尾数是给出有效数字的值。在半精度浮点数(总共 16 位)中,尾数为 11 位长,这是在屏幕 space 中表示顶点所需的最低精度,无需转换操作舍入伪像在低分辨率屏幕上变得可见。
8 位精度太低,无法用于任何用途。