我使用带有 GL_LUMINANCE 和 GL_UNSIGNED_BYTE 的 glTexSubImage2D 直接显示来自相机的原始灰度数据 - 而不必手动将其重新打包成 RGB 位图。
我想以 12 或 14 位/像素的更高分辨率模式运行相机。
我可以通过简单地设置 GL_SHORT
来做到这一点,但是相机返回大端数据,我的 openGL 实现似乎以错误的方式绘制它(在 x86 上)。
是否有一种简单的方法可以告诉 openGL 纹理是“错误的”方式?我想避免为了显示而手动字节交换数据,因为所有其他函数都需要大端数据。
最佳答案
查看 glPixelStore*函数组。
您可能需要使用 GL_UNPACK_SWAP_BYTES
或 GL_UNPACK_LSB_FIRST
,但请仔细检查您使用的是正确的 GL_UNPACK_ALIGNMENT
。默认情况下,解压对齐为 4,但如果您使用每像素一个字节 (lum/ub),则需要将其设置为 1。我最近遇到了这个问题,我花了更长的时间才弄明白比我愿意承认的还要多:)
关于image - Opengl 纹理和字节顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5173273/