1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
|
void Draw3Dmesh(MeshData data)
{
GLint uvtex;
int k = 0;int l = 0;
//Rendu avec les faces
SDL_Surface *img;
glGenTextures (1, &uvtex);
glBindTexture (GL_TEXTURE_2D, uvtex);
// Paramétrage de la texture.
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
// Chargement du fichier.
img = IMG_Load (data.texfilename);
glTexImage2D (GL_TEXTURE_2D, 0,img->format->BytesPerPixel, img->w, img->h, 0,GL_RGB, GL_UNSIGNED_BYTE, img->pixels);
glBindTexture (GL_TEXTURE_2D, uvtex);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3,GL_FLOAT,0,data.ArrayXYZ);
glBegin(GL_TRIANGLES);
for(k=0;k<(data.nfaces);k++)
{
glTexCoord2f(data.ArrayUV[0 + l],data.ArrayUV[1 + l]);
glArrayElement(data.ArrayF[k*3]);
glTexCoord2f(data.ArrayUV[2 + l],data.ArrayUV[3 + l]);
glArrayElement(data.ArrayF[k*3+1]);
glTexCoord2f(data.ArrayUV[4 + l],data.ArrayUV[5 + l]);
glArrayElement(data.ArrayF[k*3+2]);
l += 6;
}
glEnd();
}
int main(int argc, char *argv[])
{
int k = 0;int t1, t2;
SDL_Init(SDL_INIT_VIDEO);
if ( SDL_WasInit(SDL_INIT_VIDEO) == -1)
{
exit(1);
}
SDL_Surface *ecran = NULL;
SDL_WM_SetCaption("Render", NULL);
ecran = SDL_SetVideoMode(400,400,32,SDL_OPENGL);
if ( ecran == NULL)
{
exit(1);
}
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glPushMatrix();
gluPerspective(70, (float)400/400, 1, 1000);
//glEnable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
int count = 1;
SDL_Event event;
MeshData cube;
cube.filename = "Plane.txt";
cube.texfilename = "Uvtest.png";
Load3Dmesh(&cube);
while(count)
{
SDL_WaitEvent(&event);
switch(event.type)
{
case SDL_QUIT : count = 0;break;
case SDL_KEYDOWN :
switch(event.key.keysym.sym)
{
case SDLK_ESCAPE : count = 0;break;
case SDLK_UP : k += 5;break;
case SDLK_DOWN : k-=5;break;
case SDLK_r : k = 0;break;
};break;
}
t2 = SDL_GetTicks();
if(t2 - t1 > 30)
{
t1 = t2;
}
else
{
SDL_Delay( 30 - (t2 - t1) );
}
DrawInit();
glRotated(k,0,0,1);
glScaled(4,4,4);
Draw3Dmesh(cube);
SDL_GL_SwapBuffers();
}
SDL_Quit();
Free3Dmesh(&cube);
glDisable(GL_TEXTURE_2D);
getchar();
return 1;
} |
Partager