大多数图像库将图像作为宽度,高度,间距,然后是数组像素。然而,OpenGL不直接采用音调,而是期望:
glPixelStorei(GL_UNPACK_ALIGNMENT, align);
glPixelStorei(GL_UNPACK_ROW_LENGTH, row_length);
row_length
为pitch / bytes_per_pixel
,但如何计算align
的正确值?
答案 0 :(得分:0)
对于您将看到的绝大多数图片,您不应该需要GL_ROW_LENGTH
。将此值设置为非零值会严重降低上载性能;只有当你完全需要时才使用它。
对于大多数图像,音高只是(width
* bpp
),与某些边界对齐。例如,如果bpp
为3(每像素字节数),宽度为9,则得到27.对于许多计算机来说,这不是一个很好的行号,所以它们通常会将它对齐到最接近的倍数因此,你在大多数图像中看到的音高是28。
因此,要计算对齐,只需计算分为音高的2的最大幂(最多8)。如果图像中的音高为28,则2的最大幂为4.将其设置为GL_UNPACK_ALIGNMENT
。通常,您可以在4处停止,因为这是大多数图像将使用的最大对齐方式。
需要使用GL_ROW_LENGTH
的时间是计算出的音高(align(width * bpp, alignment)
)不等于实际音高的时间。如果发生这种情况,则需要同时使用对齐和行长度。但是这种情况非常罕见,你应该放弃任何使用这种极不正确的音调的图像。
答案 1 :(得分:-1)
GL_UNPACK_ALIGNMENT
是行中第一个像素在图像中开始的字节偏移量。将它设置为一个几乎总是安全的赌注(即,它几乎适用于所有图像类型[并且它永远不会对我有用]。)
默认值为4,对于RGBA图像效果很好,但对于RGB图像却很失败(当你看到图像时你会立刻知道 - 它看起来就像是一组对角线)。