OpenGL的像素存储格式是有glPixedStore来设定的,默认情况下相邻两行的存储的位置是相差4的整数倍,
也就是一行的存储要用4的整数倍的字节,不够的情况下要补充。举例说明:
一个2*2的红色图片(用GL_UNSIGNED_BYTE来表示一个颜色通道)的默认存储格式为:
(255,0,0),(255,0,0)_ _
(255,0,0),(255,0,0)_ _
这里(255,0,0)表示三个连续的byte,“_”表示一个byte,这样一行就是“(255,0,0),(255,0,0)_ _”,正好是8个byte,这里“_”表示补充的byte。
用代码来测试一下:读取RGBA,然后再提取其中的RGB,在画到屏幕上:
#include <glew.h>
#include <freeglut.h>
#include <iostream>
#include<vector>
using namespace std;
int WinX = 512, WinY = 512;
void initialize()
{
if (glewInit()!=GLEW_OK)
{
cout << "failed to init glew\n"; exit(0);
}
int para;
glGetIntegerv(GL_PACK_ALIGNMENT, ¶);
cout << para << endl;
glGetIntegerv(GL_UNPACK_ALIGNMENT, ¶);
cout << para << endl;
glClearColor(0., 0., 0., 1);
}
void reshape(int w, int h)
{
WinX = w; WinY = h;
glViewport(0, 0, w, h);
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL

OpenGL中,像素存储格式由glPixelStore设置,默认行存储间隔为4的倍数,不足时会填充字节。例如,一个2*2的红色图片默认存储格式会填充额外的字节。通过代码测试读取RGBA并提取RGB,再显示到屏幕。

1300

被折叠的 条评论
为什么被折叠?



