gpt4 book ai didi

c - 在 OpenGL 中使用两个纹理

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

我正在编写一个程序,我必须在其中使用两种不同的纹理。我可以读入一个文件并将其用作纹理,但到目前为止无法让两个纹理一起工作。这是我设置我拥有的一个纹理的代码:

        FILE *fd;
int k, nm;
char c;
int i, i;
char b[256];
float s;
int red, green, blue;

fd = fopen("AI_Lab.ppm", "r");

// check first line for P3
fscanf(fd, "%[^\n]", b);
if (b[0] != 'P' || b[1] != '3') {
printf("%s is not a PPM file\n", b);
system("pause");
exit(0);
}
// skip comments
fscanf(fd, "%c%c", &c, &c);
while (c == '#') {
fscanf(fd, "%[^\n]", b);
fscanf(fd, "%c%c", &c, &c);
}

// put back first character of first non-comment line
ungetc(c, fd);
// read file info
fscanf(fd, "%d %d %d", &o, &m, &k);

nm = o * m; // overall size

image = malloc(3*sizeof(GLuint)*nm);

s = 255./k;

for (i=0; i<nm; i++) {
fscanf(fd, "%d %d %d", &red, &green, &blue);
image[3*nm - 3*i - 3] = red;
image[3*nm - 3*i - 2] = green;
image[3*nm - 3*i - 1] = blue;
}

glPixelTransferf(GL_RED_SCALE, s);
glPixelTransferf(GL_GREEN_SCALE, s);
glPixelTransferf(GL_BLUE_SCALE, s);
glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glEnable(GL_TEXTURE_2D);
glTexImage2D(GL_TEXTURE_2D, 0, 3, o1, m1, 0, GL_RGB, GL_UNSIGNED_INT, image);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

glEnable (GL_DEPTH_TEST);
glClearColor(0.0, 0.0, 0.0, 1.0);

我已经尝试了所有我能想到的,但无法让事情正常工作。

最佳答案

您的纹理规范看起来不错,但您需要复习一下 OpenGL 的基础知识。红皮书是一个很好的起点。

http://www.glprogramming.com/red/chapter09.html

前往纹理对象部分。

在调用 glTexImage2d 之前,您需要生成并绑定(bind)一个新的纹理对象。您的每一个纹理都应该有自己的对象!

渲染时,您只需在绘制任何图元之前绑定(bind)要渲染的纹理。

关于c - 在 OpenGL 中使用两个纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23259655/

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