2

我正在尝试使用 OpenGL 函数渲染体积数据glDrawPixels()

#define SIZE    480
unsigned int    rgbPixels[SIZE][SIZE]
...
glDrawPixels(SIZE, SIZE, GL_RGB, GL_UNSIGNED_INT, rgbPixels);

如果我这样做sizeof(rgbpixels),它会返回 921600,即 480*480*4。

我试过GL_RGBA但没有用。最后我在屏幕上得到了一些东西而没有使用glDrawPixels(SIZE, SIZE*0.81, GL_RGB, GL_UNSIGNED_INT, rgbPixels);

但这并不符合我的预期输出。那么在这种情况下有人可以帮助我吗?

4

2 回答 2

4

您说glDrawPixels您的数据是SIZExSIZE像素,每个像素有 3 个分量 (),每个分量 ( )均为GL_RGB32 位无符号整数类型。如果不是这种情况(当您说它只是代替 required时可能不是这种情况),那么这可能会导致访问冲突或其他未定义的行为。GL_UNSIGNED_INTrgbPixelsSIZE*SIZE*4SIZE*SIZE*3*4

当你说你rgbPixels的 sizeSIZE*SIZE*4时,我猜每个像素包含 4 个字节,每个单独的字节是一个颜色分量。如果是这种情况,您需要

glDrawPixels(SIZE, SIZE, GL_RGBA, GL_UNSIGNED_BYTE, rgbPixels);

请始终记住,所有参数都glDrawPixels告诉 OpenGL 指针参数 ( ) 使用了多少内存rgbPixels以及它的布局格式。所以那些当然必须匹配rgbPixels包含(或指向)的实际内存。

于 2013-05-17T14:06:45.117 回答
1

鉴于 OpenGL 将期望每个像素有 3 个无符号整数!您可能希望改为使用GL_UNSIGNED_INT_8_8_8_8数据类型。

于 2013-05-17T14:06:26.210 回答