如何解决如何将TextureImage中的字节转换为float?
我必须将TextureImage[][][]
中键入的GLubyte
(每个元素代表纹理图像中像素的不同颜色)转换成代表颜色的GLfloat
变量。我必须没有任何 openGL 命令。
这是我的代码:
GLubyte TextureImage[TEXTURE_SIZE][TEXTURE_SIZE][3];
GLfloat pixColor1,pixColor2,pixColor3;
pixColor1 = (GLfloat)(GLint)TextureImage[t][s][0];
pixColor2 = (GLfloat)(GLint)TextureImage[t][s][1];
pixColor3 = (GLfloat)(GLint)TextureImage[t][s][2];
pixColor1 /= 255.0;
pixColor2 /= 255.0;
pixColor3 /= 255.0;
解决方法
“ ...将TextureImage中的字节转换为浮点数?”
先说一遍
根据OpenGL spec:
...
GL
类型不是C
类型。因此,例如,GLtype int
在本文档之外被称为GLint
,而不是 必须等同于C
类型int
。实现必须 确切地使用表中指示的位数来表示 GL类型。
因此,尽管我们不确定C
类型GLint
的确切含义,但我们确实知道它是32位宽(4字节),而不是8位宽(1字节)对于byte
(本地类型unsigned char
)为true
提出问题如何将TextureImage中的字节转换为浮点数?似乎对您的实际行为感到怀疑,因为GLint
的类型不是{{1} }到==
。这不能承受
由于OpenGL是植根于C的库,因此类型转换与其他转换一样进行,请谨慎使用类型转换:
在这种情况下,byte
和GLint
的标准中指定的宽度均为32位宽,但是单独使用宽度并不能消除风险,就像@Margaret Bloom在评论中提到的那样:
请注意,不能将整数转换为安全地浮点数。一个有效 浮点数的实现(实际上是几乎所有 架构)通过IEEE754 binary32格式。这只有 23位尾数。不能转换为0xFFFFFFFF之类的数字 完全浮动。
话虽如此,该类型转换在语法上与GLfloat
中的任何其他类型转换相同
声明:
C
有效地将pixColor1 = (GLfloat)(GLint)TextureImage[t][s][0];
// ^^^^^^^ this part is not necessary but does not change the assigned value
pixColor1 = (GLfloat)TextureImage[t][s][0];//modified to eliminate (GLint)
中包含的值强制转换为TextureImage[t][s][0]
。与下面的纯GLfloat
示例相同:
C
,
谢谢。我已经解决了问题。我可能不得不将“ GLubyte”变量移动到“ unsigned char”变量,然后才将其转换为整数和浮点数。
GLubyte TextureImage[TEXTURE_SIZE][TEXTURE_SIZE][3];
GLfloat pixColor1,pixColor2,pixColor3;
unsigned int temp1,temp2,temp3;
unsigned char r,g,b;
r = TextureImage[s][t][0];
g = TextureImage[s][t][1];
b = TextureImage[s][t][2];
temp1 = r + '0';
temp2 = g + '0';
temp3 = b + '0';
pixColor1 = temp1/255.0;
pixColor2 = temp2/255.0;
pixColor3 = temp3/255.0;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。