多重纹理

#include <gl/glew.h>
#include <gl/glut.h>
#include "tga.h"

GLuint texid1[2];
GLuint texid2[2];

Tga tex1[2];
Tga tex2[2];

float color[4]={1.0,1.0,0.0,0.1};
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    
    gluLookAt(0,10,-100,0,0,0,0,1,0);
#if 0
    glBindTexture(GL_TEXTURE_2D,texid1[1]);

    glEnable(GL_TEXTURE_2D);
    glBegin(GL_QUADS);
        glTexCoord2d(0,0);
        glVertex3d(0,0,0);

        glTexCoord2d(1,0);
        glVertex3d(20,0,0);

        glTexCoord2d(1,1);
        glVertex3d(20,20,0);

        glTexCoord2d(0,1);
        glVertex3d(0,20,0);
    glEnd();

#endif
#if 1
    glEnable(GL_BLEND);
    glBlendFunc(GL_ALPHA,GL_ONE_MINUS_DST_ALPHA);
    glEnable(GL_TEXTURE_2D);
    glActiveTexture(GL_TEXTURE0);
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D,texid1[0]);

    glActiveTexture(GL_TEXTURE1);
    glEnable(GL_TEXTURE_2D);

    glBindTexture(GL_TEXTURE_2D,texid1[1]);

    glBegin(GL_QUADS);
    glMultiTexCoord2d(GL_TEXTURE0,0,0);
    glMultiTexCoord2d(GL_TEXTURE1,0,0);
    glVertex3d(0,0,0);

    glMultiTexCoord2d(GL_TEXTURE0,1,0);
    glMultiTexCoord2d(GL_TEXTURE1,1,0);
    glVertex3d(20,0,0);

    glMultiTexCoord2d(GL_TEXTURE0,1,1);
    glMultiTexCoord2d(GL_TEXTURE1,1,1);
    glVertex3d(20,20,0);

    glMultiTexCoord2d(GL_TEXTURE0,0,1);
    glMultiTexCoord2d(GL_TEXTURE1,0,1);
    glVertex3d(0,20,0);
    glEnd();
#endif

#if 1
    glEnable(GL_TEXTURE_2D);
    glActiveTexture(GL_TEXTURE0);
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D,texid2[0]);

    glActiveTexture(GL_TEXTURE1);
    glEnable(GL_TEXTURE_2D);

    glBindTexture(GL_TEXTURE_2D,texid2[1]);

    glBegin(GL_QUADS);
    glMultiTexCoord2d(GL_TEXTURE0,0,0);
    glMultiTexCoord2d(GL_TEXTURE1,0,0);
    glVertex3d(0 - 40 ,0,0);

    glMultiTexCoord2d(GL_TEXTURE0,0,1);
    glMultiTexCoord2d(GL_TEXTURE1,0,1);
    glVertex3d(20 - 40,0,0);

    glMultiTexCoord2d(GL_TEXTURE0,1,1);
    glMultiTexCoord2d(GL_TEXTURE1,1,1);
    glVertex3d(20 - 40,20,0);

    glMultiTexCoord2d(GL_TEXTURE0,1,0);
    glMultiTexCoord2d(GL_TEXTURE1,1,0);
    glVertex3d(0 - 40,20,0);
    glEnd();
#endif
    glDisable(GL_TEXTURE_2D);
    glActiveTextureARB(GL_TEXTURE1_ARB);
    glDisable(GL_TEXTURE_2D);
    glActiveTextureARB(GL_TEXTURE0_ARB);
    glEnable(GL_TEXTURE_2D);
    glutSwapBuffers();
}

void reshape(int w, int h)
{
    glViewport(0,0,w,h);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    gluPerspective(45,1.3333,1.0,10000);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}

void key(unsigned char c, int x ,int y)
{

}

void init()
{
    glClearColor(0.5,0.5,0.5,1.0);

    tex1[0].load("K:\\openglplane\\multitex\\test.tga");
    tex1[1].load("K:\\openglplane\\multitex\\checker.tga");

    tex2[0].load("K:\\openglplane\\multitex\\checker.tga");
    tex2[1].load("K:\\openglplane\\multitex\\texture1.tga");
    
    glGenTextures(2,texid1);
    glBindTexture(GL_TEXTURE_2D,texid1[0]);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP);
    glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,tex1[0].width(),tex1[0].height(),0,
        tex1[0].hasAlhpa()?GL_RGBA : GL_RGB,GL_UNSIGNED_BYTE,tex1[0].getRawData());

    glBindTexture(GL_TEXTURE_2D,texid1[1]);
    glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_BLEND);
    glTexEnvfv(GL_TEXTURE_ENV,GL_TEXTURE_ENV_COLOR,color);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP);
    glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,tex1[1].width(),tex1[1].height(),0,
        tex1[1].hasAlhpa()?GL_RGBA : GL_RGB,GL_UNSIGNED_BYTE,tex1[1].getRawData());
    

    glGenTextures(2,texid2);
    glBindTexture(GL_TEXTURE_2D,texid2[0]);
    glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP);
    glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,tex2[0].width(),tex2[0].height(),0,
        tex2[0].hasAlhpa()?GL_RGBA : GL_RGB,GL_UNSIGNED_BYTE,tex2[0].getRawData());

    glBindTexture(GL_TEXTURE_2D,texid2[1]);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP);
    glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,tex2[1].width(),tex2[1].height(),0,
        tex2[1].hasAlhpa()?GL_RGBA : GL_RGB,GL_UNSIGNED_BYTE,tex2[1].getRawData());
    
    
}

int main(int argc, char* argv[])
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
    glutInitWindowPosition(200,100);
    glutInitWindowSize(800,600);
    glutCreateWindow("multiTex");
    glewInit();
    glutDisplayFunc(display);
    glutReshapeFunc(reshape);
    glutKeyboardFunc(key);

    init();
    glutMainLoop();
}

你可能感兴趣的:(多重纹理)