Bonjour,

J'essaye de faire marcher le multitexturing de OpenGL.
Je sais que j'ai déjà réussi il y a un moment, mais soit je m'y prends mal, soit le problème vient de mon changement d'environnement (linux -> Windows)

Je précise que j'utilise le bonding python de OpenGL, mais ça ne devrait rien changer.
Plutôt qu'un long discours incompréhensible, je vais mettre mon code (simplifié) qui marche et mon code qui ne marche pas.

Voilà ce qui marche (sans multitexturing):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
while not done:
 
  glColor4f(1.0, 1.0, 1.0, 1.0)
  glEnable(GL_TEXTURE_2D)
  glBindTexture(GL_TEXTURE_2D, rayangleTexture)
  glBegin(GL_POLYGON)
 
  glTexCoord2f(0.0, 0.0)
  glVertex2f(50.0, 50.0)
 
  glTexCoord2f(1.0, 1.0)
  glVertex2f(100.0, 100.0)
 
  glTexCoord2f(1.0,0.0)
  glVertex2f(100.0, 50.0)
 
  glEnd()
  pygame.display.flip()
  done = handleEvents()
  glClear(GL_COLOR_BUFFER_BIT)
Et voilà ce qui ne marche pas (avec multitexturing) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
while not done:
 
  glActiveTextureARB( GL_TEXTURE0_ARB )
  glEnable(GL_TEXTURE_2D)
  glBindTexture(GL_TEXTURE_2D, rayangleTexture)
 
  glActiveTextureARB( GL_TEXTURE1_ARB )
  glEnable(GL_TEXTURE_2D)
  glBindTexture(GL_TEXTURE_2D, raydistanceTexture)
 
  glColor4f(1.0,1.0,1.0,1.0)
 
  glBegin(GL_QUADS)
 
  glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 0.0, 0.0) 
  glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 0, 0.0.0)
  glVertex2f(0.0, 0.0)
 
  glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 0.0, 1.0)
  glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 0.0, 1.0)
  glVertex2f(0.0, 600.0)
 
  glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 1.0, 1.0)
  glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 1.0, 1.0)
  glVertex2f( 800.0, 600.0)
 
  glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 1.0, 0.0)
  glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 1.0, 0.0)
  glVertex2f(800.0, 0.0)
 
  glEnd()
  pygame.display.flip()
  done = handleEvents()
  glClear(GL_COLOR_BUFFER_BIT)
Ca me donne cette erreur :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
Traceback (most recent call last):
  File "E:\blabla\src\main.py", line 119, in <module>
    glEnd()
  File "C:\Python26\lib\site-packages\OpenGL\latebind.py", line 61, in __call__
    return self.wrapperFunction( self.baseFunction, *args, **named )
  File "C:\Python26\lib\site-packages\OpenGL\GL\exceptional.py", line 57, in glEnd
    return baseFunction( )
  File "C:\Python26\lib\site-packages\OpenGL\error.py", line 208, in glCheckError
    baseOperation = baseOperation,
OpenGL.error.GLError: GLError(
	err = 1282,
	description = 'op\xe9ration non valide',
	baseOperation = glEnd,
	cArguments = ()
)
Et voilà mon initialisation :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
pygame.init()
pygame.display.set_mode((800,600), pygame.DOUBLEBUF | pygame.OPENGL, 32)
 
glClearColor(0.0, 0.0, 0.0, 1.0)
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
 
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluOrtho2D(0, 100, 0, 100)
glMatrixMode(GL_MODELVIEW)
 
glEnable(GL_TEXTURE_2D)
glEnable(GL_BLEND)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
Est-ce quelqu'un aurait une idée de ce qui me manque?
J'ai entendu parler d'un wglGetProcAddress qui servirait sous windows mais je n'ai pas trop compris et l'erreur qu'avait le gars n'était pas la même que moi.
N'hésitez pas si je ne suis pas assez précis ou pas assez clair.


Merci beaucoup d'avance

J.