这个数组中的每两个值代表16个像素。(每个元素8个二进制值)
GLubyte character[24] = {
0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00,
0xff, 0x00, 0xff, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00,
0xff, 0xc0, 0xff, 0xc0
};
这是我的代码来渲染我的位图。
void init(){
glPixelStorei(GL_UNPACK_ALIGNMENT, 2);
}
void render(){
glBitmap(8, 12, 0.0, 11.0, 0.0, 0.0, character);
}
但是当我更改glBitmap(8等)时对于glBitmap(10等)来说,它不起作用。
为了成功,我需要改变,
glPixelStorei(GL_UNPACK_ALIGNMENT, 2);
至
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
我的问题是,我不知道为什么.
我只知道
GL_UNPACK_ALIGNMENT, 1
告诉OpenGL只转到下一个地址而不对齐。
我不认为将ALGINMENT设置为1与我的位图长度之间有任何关系。
有人能解释一下发生了什么事吗?
发布于 2015-09-03 04:12:50
回到一些历史规范文档(glBitmap()
是一个非常的过时调用)之后,位图的对齐规则是( OpenGL 2.1规范的第136页):
k = a * ceiling(w / (8 * a))
其中:
w
是宽度,假设没有设置GL_UNPACK_ROW_LENGTH
。a
是GL_UNPACK_ALIGNMENT
的值。k
是每行使用的字节数。请注意,无论参数是如何设置的,每行总是至少在一个字节边界上开始。将示例中的值替换为w = 8
,我们得到:
GL_UNPACK_ALIGNMENT
为1。GL_UNPACK_ALIGNMENT
为2。对于w = 10
,我们得到:
GL_UNPACK_ALIGNMENT
为1。GL_UNPACK_ALIGNMENT
为2。基于此,除非还设置了其他GL_UNPACK_*
参数,否则无论GL_UNPACK_ALIGNMENT
是1还是2,都应该获得相同的宽度10输出。如果不是这样的话,这看起来就像是OpenGL实现中的一个bug。
https://stackoverflow.com/questions/32361344
复制相似问题