许多消息来源建议使用16位顶点/纹理坐标,但我见过的所有示例代码都依赖于32位浮点数。
我已经阅读了extension的16位顶点坐标,但它没有提供如何使用它的任何示例。
答案 0 :(得分:2)
16位顶点/纹理坐标从一开始就在OpenGL(和ES)中,无需扩展。您可以使用GL_SHORT
类型提供坐标,这是一个带符号的16位数字。如果通过glVertexAttribPointer
提供normalized=true
,则可以将值提供标准化([-1..1])。然后,您可以相应地在顶点着色器中缩放它们(无论它们是否已标准化)。
有关详细信息,请参阅this问题。
答案 1 :(得分:0)
GLM Library GLM库支持半浮点类型。使用的前缀是'h',因此glm::vec3
是浮点值的3元素向量,glm::hvec3
是半浮点数的3元素向量。
你还需要像glVertexAttribPointer(..., ..., GL_HALF_FLOAT, GL_FALSE, ..., ...);
请参阅此帖子16-bit floats and GL_HALF_FLOAT
半浮动
32位浮点数通常称为“单精度”浮点数, 64位浮点数通常称为“双精度”浮点数。 16位 因此,浮子被称为“半精度”浮子,或者只是“一半” 浮动”。
OpenGL支持在Image Formats中使用半浮点数,但它也支持 允许它们通过设置格式用作顶点属性 组件类型为GL_HALF_FLOAT。