Code : Tout sélectionner
IncludeFile "OpenGL.pbi"
Global ScreenSDL
Declare DrawCube(Size.f,ID.l)
Declare SDL_OPENGL_INIT(W,H,D)
Procedure DrawCube(Size.f,ID.l)
glBindTexture_(#GL_TEXTURE_2D,ID)
glBegin_(#GL_QUADS)
glColor4f_(1,1,1,1)
glNormal3d_(-1.0,0.0,0.0) ;face gauche
glTexCoord2d_(0,1) : glVertex3d_(-Size,Size,Size)
glTexCoord2d_(0,0) : glVertex3d_(-Size,Size,-Size)
glTexCoord2d_(1,0) : glVertex3d_(-Size,-Size,-Size)
glTexCoord2d_(1,1) : glVertex3d_(-Size,-Size,Size)
glNormal3d_(0.0,1.0,0.0) ;face haut
glTexCoord2d_(0,1) : glVertex3d_(-Size,Size,Size)
glTexCoord2d_(0,0) : glVertex3d_(Size,Size,Size)
glTexCoord2d_(1,0) : glVertex3d_(Size,Size,-Size)
glTexCoord2d_(1,1) : glVertex3d_(-Size,Size,-Size)
glNormal3d_(0.0,-1.0,0.0) ;face bas
glTexCoord2d_(0,1) : glVertex3d_(-Size,-Size,Size)
glTexCoord2d_(0,0) : glVertex3d_(-Size,-Size,-Size)
glTexCoord2d_(1,0) : glVertex3d_(Size,-Size,-Size)
glTexCoord2d_(1,1) : glVertex3d_(Size,-Size,Size)
glNormal3d_(0.0,0.0,-1.0) ;face arriere
glTexCoord2d_(0,1) : glVertex3d_(Size,Size,-Size)
glTexCoord2d_(0,0) : glVertex3d_(Size,-Size,-Size)
glTexCoord2d_(1,0) : glVertex3d_(-Size,-Size,-Size)
glTexCoord2d_(1,1) : glVertex3d_(-Size,Size,-Size)
glNormal3d_(1.0,0.0,0.0) ;face gauche
glTexCoord2d_(0,1) : glVertex3d_(Size,Size,Size)
glTexCoord2d_(0,0) : glVertex3d_(Size,-Size,Size)
glTexCoord2d_(1,0) : glVertex3d_(Size,-Size,-Size)
glTexCoord2d_(1,1) : glVertex3d_(Size,Size,-Size)
glNormal3d_(0.0,0.0,1.0) ; Face avant
glTexCoord2d_(0,1) : glVertex3d_(-Size,Size,Size)
glTexCoord2d_(0,0) : glVertex3d_(-Size,-Size,Size)
glTexCoord2d_(1,0) : glVertex3d_(Size,-Size,Size)
glTexCoord2d_(1,1) : glVertex3d_(Size,Size,Size)
glEnd_()
EndProcedure
Procedure SDL_OPENGL_INIT(W,H,D)
SDL_Init_(#SDL_INIT_VIDEO)
ScreenSDL = SDL_SetVideoMode_(W,H,D, #SDL_OPENGL)
If ScreenSDL=0
PrintN("Error when initialize SDL")
EndIf
glMatrixMode_(#GL_PROJECTION)
gluPerspective_(90,W/H,1,5000)
glMatrixMode_(#GL_MODELVIEW)
glEnable_(#GL_TEXTURE_2D)
glHint_(#GL_PERSPECTIVE_CORRECTION_HINT,#GL_NICEST)
glEnable_(#GL_DEPTH_TEST)
glEnable_(#GL_CULL_FACE)
glEnable_(#GL_LIGHTING)
glEnable_(#GL_LIGHT0)
glHint_ (#GL_FOG_HINT, #GL_NICEST);
EndProcedure
SDL_OPENGL_INIT(800,600,32)
TEXTURE_SIZE = 64
Global TextureID.l
glGenTextures_(1,@TextureID)
glBindTexture_(#GL_TEXTURE_2D,@TextureID);
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MAG_FILTER, #GL_NEAREST);
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MIN_FILTER, #GL_NEAREST);
Repeat
While SDL_PollEvent_(@Event.SDL_Event)
Select Event\Type
Case #SDL_QUIT
Quit = 1
Case #SDL_KEYDOWN
; Debug "Key: "+Str(Event\key\keysym\sym)
If Event\key\keysym\sym = #SDLK_ESCAPE
Quit = 1
EndIf
Case #SDL_MOUSEMOTION
; Debug "x:"+Str(Event\motion\x) + " y:" +Str(Event\motion\y)
EndSelect
Wend
glClearColor_(1,1,1,1)
glClear_(#GL_DEPTH_BUFFER_BIT | #GL_COLOR_BUFFER_BIT )
angle.f + 0.1
glLoadIdentity_( )
gluLookAt_(90,0,0,0,0,0,0,1,0)
; ***************************************************
; DESSINE LA SCENE DANS TEXTUREID
; ***************************************************
glViewport_(0,0,TEXTURE_SIZE,TEXTURE_SIZE)
ANGLE.f+0.1
glPushMatrix_()
glTranslatef_(-50,0,0)
glRotated_(ANGLE,1.0,1.0,1.0)
DrawCube(50,@TextureID)
glPopMatrix_()
glCopyTexImage2D_(#GL_TEXTURE_2D, 0, #GL_RGBA, 0, 0,TEXTURE_SIZE, TEXTURE_SIZE, 0)
glClearColor_(0, 0, 1, 0)
glClear_(#GL_COLOR_BUFFER_BIT | #GL_DEPTH_BUFFER_BIT)
glViewport_(0,0,800,600);
glPushMatrix_()
glTranslatef_(-100,0,0)
glRotated_(ANGLE,1.0,1.0,1.0)
DrawCube(50,@TextureID)
glPopMatrix_()
SDL_GL_SwapBuffers_()
Until Quit = 1
SDL_Quit_()
Le principe est le même pour un Quad.