在OpenGL中使用两个纹理

时间:2014-04-24 04:11:34

标签: c opengl graphics textures

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

        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);

我已经尝试了所有我能想到的东西,并且无法正常工作。

1 个答案:

答案 0 :(得分:2)

您的纹理规格看起来没问题,但您需要了解OpenGL的基础知识。红皮书是一个很好的起点。

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

前往Texture Objects上的部分。

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

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