在 XCode 附带的“OpenGL ES Programming Guide for iOS”文档中,在“使用顶点数据的最佳实践”部分的“使用最小可接受的属性类型”标题下,它说
使用 2 或 4 个无符号字节 (GL_UNSIGNED_BYTE) 或无符号短字节 (GL_UNSIGNED_SHORT) 指定纹理坐标。
我有点疑惑。我认为纹理坐标大部分时间都小于 1,因此需要一个浮点数来表示小数值。你如何使用无符号字节或无符号短裤?在着色器中除以 255?
在 XCode 附带的“OpenGL ES Programming Guide for iOS”文档中,在“使用顶点数据的最佳实践”部分的“使用最小可接受的属性类型”标题下,它说
使用 2 或 4 个无符号字节 (GL_UNSIGNED_BYTE) 或无符号短字节 (GL_UNSIGNED_SHORT) 指定纹理坐标。
我有点疑惑。我认为纹理坐标大部分时间都小于 1,因此需要一个浮点数来表示小数值。你如何使用无符号字节或无符号短裤?在着色器中除以 255?
如果您使用GL_UNSIGNED_BYTE
,您最终会将 , 传递normalized
到GL_TRUE
(例如) glVertexAttribPointer
,表明您传递的值不在 0 和 1 之间,但应该从它们的完整范围(例如 0 到 255)归一化为归一化在传递给着色器之前的范围为 0 到 1。(有关详细信息,请参阅 OpenGL ES 2.0 规范的第 2.1.2 节)。
换句话说,当您传递无符号字节之类的整数类型时,请使用“标准化”值GL_TRUE
并使用该类型的完整范围(例如 0 到 255),因此 127 的值将大约相当于浮点0.5。