1

在 XCode 附带的“OpenGL ES Programming Guide for iOS”文档中,在“使用顶点数据的最佳实践”部分的“使用最小可接受的属性类型”标题下,它说

使用 2 或 4 个无符号字节 (GL_UNSIGNED_BYTE) 或无符号短字节 (GL_UNSIGNED_SHORT) 指定纹理坐标。

我有点疑惑。我认为纹理坐标大部分时间都小于 1,因此需要一个浮点数来表示小数值。你如何使用无符号字节或无符号短裤?在着色器中除以 255?

4

1 回答 1

3

如果您使用GL_UNSIGNED_BYTE,您最终会将 , 传递normalizedGL_TRUE(例如) glVertexAttribPointer,表明您传递的值不在 0 和 1 之间,但应该从它们的完整范围(例如 0 到 255)归一化为归一化在传递给着色器之前的范围为 0 到 1。(有关详细信息,请参阅 OpenGL ES 2.0 规范的第 2.1.2 节)。

换句话说,当您传递无符号字节之类的整数类型时,请使用“标准化”值GL_TRUE并使用该类型的完整范围(例如 0 到 255),因此 127 的值将大约相当于浮点0.5。

于 2012-07-04T21:00:37.460 回答