具有16位顶点/纹理坐标的示例代码

时间:2017-01-10 20:21:55

标签: opengl-es

许多消息来源建议使用16位顶点/纹理坐标,但我见过的所有示例代码都依赖于32位浮点数。

我已经阅读了extension的16位顶点坐标,但它没有提供如何使用它的任何示例。

2 个答案:

答案 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

Small float formats他们说

  

半浮动

     

32位浮点数通常称为“单精度”浮点数,   64位浮点数通常称为“双精度”浮点数。 16位   因此,浮子被称为“半精度”浮子,或者只是“一半”   浮动”。

     

OpenGL支持在Image Formats中使用半浮点数,但它也支持   允许它们通过设置格式用作顶点属性   组件类型为GL_HALF_FLOAT。