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