Hi,
Thanks for the replying.
The code which is executing in my system is posted below :
#include <GL/glew.h>
#include <GL/glut.h>
#include <stdlib.h>
#include <stdio.h>
#include <IL/il.h>
GLfloat gTexOffset = 0.0;
GLUquadricObj *IDquadric;
struct TextureHandle
{
ILubyte *p;
ILuint id;
ILint w;
ILint h;
ILenum DestFormat;
ILenum DestType;
GLuint genID;
};
struct TextureHandle logo;
struct TextureHandle logo2;
struct TextureHandle logoM;
ILuint LoadImageDevIL (const char *szFileName, struct TextureHandle *T)
{
ilEnable(IL_ORIGIN_SET);
ilOriginFunc(IL_ORIGIN_LOWER_LEFT);
ILuint ImageNameID;
ilGenImages(1, &ImageNameID);
ilBindImage(ImageNameID);
if (!ilLoadImage(szFileName)) return 0;
ilConvertImage(IL_RGBA, IL_UNSIGNED_BYTE);
T->id = ImageNameID;
T->p = ilGetData();
T->w = ilGetInteger(IL_IMAGE_WIDTH);
T->h = ilGetInteger(IL_IMAGE_HEIGHT);
T->DestFormat = ilGetInteger(IL_IMAGE_FORMAT);
T->DestType = ilGetInteger(IL_IMAGE_TYPE);
glGenTextures(1, &T->genID);
glBindTexture(GL_TEXTURE_2D, T->genID);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D (GL_TEXTURE_2D, 0, T->DestFormat, T->w, T->h, 0, T->DestFormat, T->DestType, T->p);
printf("%s %d %d %d
",szFileName,T->id,T->w,T->h);
return 1;
}
void timer(int value)
{
const int desiredFPS=120;
glutTimerFunc(1000/desiredFPS, timer, ++value);
GLfloat dt = 1./desiredFPS;
gTexOffset += dt*360./8.;
glutPostRedisplay();
}
void draw_cylinder()
{
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glTranslatef(-5.,0,-100);
glRotatef(45,1.,1.,0.);
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glTranslatef(0.,gTexOffset/100.,0);
gluCylinder(IDquadric,10.0f,10.0f,10.0f,32,32);
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBindTexture ( GL_TEXTURE_2D, logoM.genID);
draw_cylinder();
glutSwapBuffers();
}
void placeTexture(GLuint M, GLuint N, GLuint i, GLuint j, GLuint genID)
{
GLfloat X1 = (GLfloat) i / (GLfloat) M;
GLfloat X2 = X1 + (GLfloat) 1 / (GLfloat) M;
GLfloat Y1 = (GLfloat) j / (GLfloat) N;
GLfloat Y2 = Y1 + (GLfloat) 1 / (GLfloat) N;
glBindTexture ( GL_TEXTURE_2D, genID);
glBegin(GL_QUADS);
glTexCoord2f(0,0); glVertex2f(X1,Y1);
glTexCoord2f(1,0); glVertex2f(X2,Y1);
glTexCoord2f(1,1); glVertex2f(X2,Y2);
glTexCoord2f(0,1); glVertex2f(X1,Y2);
glEnd();
}
void CreateMultiTexture()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glOrtho(0,1, 0,1, -1,1 );
GLint viewport[4];
glGetIntegerv(GL_VIEWPORT, viewport);
glViewport(0,0,logoM.w,logoM.h);
GLuint M = 2;
GLuint N = 3;
placeTexture(M,N, 0,0, logo.genID);
placeTexture(M,N, 1,0, logo2.genID);
placeTexture(M,N, 1,1, logo2.genID);
placeTexture(M,N, 0,2, logo.genID);
placeTexture(M,N, 1,2, logo2.genID);
glBindTexture(GL_TEXTURE_2D,logoM.genID);
glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, logoM.w, logoM.h, 0);
glViewport(viewport[0], viewport[1], viewport[2] ,viewport[3]);
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glutSwapBuffers();
glutDisplayFunc(display);
}
void cleanupQuadric(void)
{
gluDeleteQuadric(IDquadric);
printf( "cleanupQuadric completed
" );
}
void init()
{
glClearColor(0.0, 0.0, 0.0, 0.0);
glEnable(GL_CULL_FACE);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
IDquadric=gluNewQuadric();
gluQuadricNormals(IDquadric, GLU_SMOOTH);
gluQuadricTexture(IDquadric, GL_TRUE);
atexit(cleanupQuadric);
GLdouble Vol = 10*1.8;
GLdouble Left=-Vol;
GLdouble Right=Vol;
GLdouble Bottom=-Vol;
GLdouble Top=Vol;
GLdouble Near=0;
GLdouble Far=2*Vol;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(Left, Right, Bottom, Top, Near, Far);
GLdouble eyeX=0;
GLdouble eyeY=0;
GLdouble eyeZ=-100+Vol;
GLdouble centerX=0;
GLdouble centerY=0;
GLdouble centerZ=-100;
GLdouble upX=0;
GLdouble upY=1;
GLdouble upZ=0;
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(eyeX,eyeY,eyeZ,
centerX,centerY,centerZ,
upX,upY,upZ);
ilInit();
LoadImageDevIL ("/localhome/user/Temp/sample/logo.jpg", &logo);
LoadImageDevIL ("/localhome/user/Temp/sample/logo2.jpg", &logo2);
LoadImageDevIL ("/localhome/user/Temp/sample/logoM.jpg", &logoM);
glEnable (GL_TEXTURE_2D);
}
void keyboard(unsigned char key, int x, int y)
{
switch (key)
{
case 27:
exit(0);
break;
default:
break;
}
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("Multipass texturing Demo");
glewInit();
glutTimerFunc(0,timer,0);
glutDisplayFunc(CreateMultiTexture);
glutKeyboardFunc(keyboard);
init();
glutReshapeWindow(logoM.w,logoM.h);
glutMainLoop();
return 0;
}
i am thankful for your reply.