#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();
}