如何在C++/OpenGL中直接输入纹理中的RGB(A)值?

6uxekuva  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(182)

我想在OpenGL项目中尝试一些程序纹理,但似乎没有任何效果。我所需要的只是将RGB和可能的A值输入到一个空纹理中,而不是从文件中加载它。我如何在实际的、实用的代码中做到这一点呢?
编辑:目前还没有主代码,因为我还没有找到任何有效的代码。目前最好的猜测是这样的:

void GenerateTexture()
{
    unsigned char image_data[16] = {0, 0, 150, 255, 125, 0, 0, 255, 0, 0, 150, 255, 125, 0, 0, 255};
    glGenTextures(1, &tex_obj);
    glBindTexture(GL_TEXTURE_2D, tex_obj);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, image_data);
}

...按如下方式实现:

glBegin (GL_QUADS);
if (*irrelevant for question*){
    glTexCoord2f(0.0,1.0);
    glVertex3f (-0.45-cam.pos.val[0], 0.45-cam.pos.val[1], 0.45-cam.pos.val[2]);
    glTexCoord2f(0.0,0.0);
    glVertex3f (-0.45-cam.pos.val[0], -0.45-cam.pos.val[1], 0.45-cam.pos.val[2]);
    glTexCoord2f(1.0,0.0);
    glVertex3f (0.45-cam.pos.val[0], -0.45-cam.pos.val[1], 0.45-cam.pos.val[2]);
    glTexCoord2f(1.0,1.0);
    glVertex3f (0.45-cam.pos.val[0], 0.45-cam.pos.val[1], 0.45-cam.pos.val[2]);
}
glEnd ();

...但只要它运行超过1x1纹理,它就会变成干净的白色。

pw136qt2

pw136qt21#

创建数据数组并将其加载到纹理图像中:

uint8_t image_data[4] = {255, 0, 0, 255}; // red
GLuint tex_obj;
glGenTextures(1, &tex_obj);
glBindTexture(GL_TEXTURE_2D, tex_obj);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, image_data);

相关问题