【发布时间】:2018-07-29 06:00:12
【问题描述】:
我正在做一个小型宠物项目,我有一个使用这种方法打包的 RGB 颜色的一维数组:
int rgb = (((unsigned int)r) << 16) | (((unsigned int)g) << 8) | b
并且图像数据是这样存储在数组中的
int x, y;
for (x = 0; x < img->w; ++x) {
for (y = 0; y < img->h; ++y) {
img->buf[(y) * img->w + (x)] = color;
}
}
我对 OpenGL 的了解不够深入,无法理解如何将数据放入纹理缓冲区。这是我用来上传数据的方法,但显然这只会导致看起来很奇怪的黑白混乱。
GLuint texture;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, test->w, test->h, 0, GL_RGB, GL_UNSIGNED_BYTE, (GLvoid*)test->buf);
我尝试弄乱glPixelStorei(GL_UNPACK_ALIGNMENT, 1) 和glTexImage2D 的不同纹理格式选项,但似乎没有任何效果。我看过这个帖子:Colour bit-wise shift in OpenGL shader GLSL 这似乎是相似的,我只是不明白如何达到这一点。
谁能帮忙?
【问题讨论】:
标签: c opengl bit-manipulation textures texture2d