gpt4 book ai didi

c++ - Opengl - 如何从像素缓冲区加载纹理

转载 作者:太空宇宙 更新时间:2023-11-04 12:58:54 25 4
gpt4 key购买 nike

我想在四边形纹理上绘制。我想从组织如下的像素的 1D unsigned char 缓冲区绑定(bind)我的纹理:

enter image description here

每个像素由2个字节组成,这2个字节是一个16位的灰度值。

我实际上尝试了很多东西,但我在四边形上看不到任何东西:

void RawImageDrawer::initializeGL() {
glShadeModel(GL_SMOOTH);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
glDepthFunc((GL_LEQUAL));
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
}

void RawImageDrawer::resizeGL(int width, int height) {
if (height == 0)
height = 1;
glViewport(0, 0, width, height);
glMatrixMode(GL_MODELVIEW);*/
glLoadIdentity();
}

void RawImageDrawer::loadTexture() {
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(
GL_TEXTURE_2D,
0,
GL_RED,
1024,
1024,
0,
GL_LUMINANCE,
GL_UNSIGNED_BYTE,
buffer //unsigned char* described up there
);
}

void RawImageDrawer::paintGL() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.0f, 0.0f, 0.0f);

glBindTexture(GL_TEXTURE_2D, texture);

glBegin(GL_QUADS);
glTexCoord2i(0,0); glVertex3f(-0.5f, -0.5f, 0);
glTexCoord2i(0,1); glVertex3f(0.5f, -0.5f, 0);
glTexCoord2i(1,1); glVertex3f(0.5f, 0.5f, 0);
glTexCoord2i(1,0); glVertex3f(-0.5f, 0.5f, 0);
glEnd();
}

我还尝试将 TEXTURE_2D 更改为 TEXTURE_1D,但没有任何改变..

最佳答案

由于您的缓冲区是 16 位灰度,因此您应指定 GL_UNSIGNED_SHORT 而不是 GL_UNSIGNED_BYTE。确保您的值分布在整个 [0, 65535] 范围内,因为对于 16 位数据,65535 是完整的亮度值。

此外,GL_RED 从来都不是 glTexImage2DinternalFormat 参数的有效值。您应该为 internalFormat 使用 GL_R16,为 format 参数使用 GL_RED

关于c++ - Opengl - 如何从像素缓冲区加载纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45169369/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com