IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

Problème avec le multitexturing


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 112
    Par défaut Problème avec le multitexturing
    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.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 112
    Par défaut
    Personne n'a jamais eu ce "Opération non valide" sur glEnd ??

  3. #3
    Membre actif
    Avatar de Aladore
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 70
    Par défaut
    Il me semble que glBindTexture(GL_TEXTURE_2D, rayangleTexture) ne doit pas s'utiliser entre le couple glBegin/glEnd. Sinon tu as une GL_INVALID_OPERATION.

    cf: http://www.opengl.org/sdk/docs/man/x...indTexture.xml

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    Il n'est pas entre le block end et begin (mais ce que tu dis me semble quand meme correcte).

    J'ai remarqué aussi dans ton exemple que pour le simple texturing tu utilise un POLYGON puis pour le multitexturing puis tu utilise un QUAD (Evidement cela devrait marcher dans les 2 cas, mais essaye un peu avec un polygon pour le 2 eme exemple voir si ca passe par curiosité). Si ca passe pas alors ca n'a strictement rien avoir

    Sinon j'irai plutot voire du cote de GlBegin/end plutot que Bindtexture

    Je serais curieux de savoir la raison exacte quand tu l'auras trouvée
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 112
    Par défaut
    J'ai essayé avec POLYGON puis avec TRIANGLES (en ne mettant que 3 sommets bien sûr), ça ne change rien.
    Il faudrait que j'essaye sur un autre PC.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 112
    Par défaut
    Voici l'avancée du problème sur le forum de opengl.

    http://www.opengl.org/discussion_boa...316#Post284316

    C'est en anglais, j'espère que ça ne pose pas de problème.

    Pour résumer, l'hypothèse principale est que cela vient du binding car l'erreur est la même que quand on appelle une fonction interdite entre glBegin et glEnd (comme glGetError).
    J'ai écrit à Mike C Fletcher, qui me semble être l'auteur de pyOpenGl.
    J'attends sa réponse et j'essaye de réinstaller une ancienne version mais je galère un peu avec les versions de python, du binding...

    Si vous avez des idées...

Discussions similaires

  1. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  2. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo