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 :

pb de multitexturing


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 4
    Par défaut pb de multitexturing
    j'essaye de faire du multitexturing sur une skybox que j'avais texturé simplement.

    mais j'ai un probleme de mémoire a l'éxecution qui vient uniquement de l'affichage de la skybox mais je ne trouve pas précisément l'erreur

    voici le .h de ma classe skybox

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
     
    // Skybox.h: interface for the Skybox class.
    //
    //////////////////////////////////////////////////////////////////////
     
    #if !defined(AFX_SKYBOX_H__C4FD8F0B_B99E_4395_9343_533A6C578571__INCLUDED_)
    #define AFX_SKYBOX_H__C4FD8F0B_B99E_4395_9343_533A6C578571__INCLUDED_
     
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
     
    #include <windows.h>
    #include <gl\gl.h>
    #include <gl\glu.h>
    #include <gl\glaux.h>
    #include "Vector.h"
    #include "Texture.h"
    #include "tga.h"
    #include "glext.h"
     
    // External Function Pointers ///////////////////////////////////////////////////////////
     
    extern PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB;
    extern PFNGLACTIVETEXTUREARBPROC glActiveTextureARB ;
    extern PFNGLCLIENTACTIVETEXTUREARBPROC glClientActiveTextureARB;
     
    class Skybox  
    {
    public:
    	Skybox();
    	virtual ~Skybox();
    	void affiche();
    	void DefinitTexture(Texture *t1,Texture *t2,Texture *t3,
    						Texture *t4,Texture *t5,Texture *t6);
     
    private:
    		Texture *skybox_front;
    		Texture *skybox_back;
    		Texture *skybox_top;
    		Texture *skybox_bottom;
    		Texture *skybox_right; 
    		Texture *skybox_left;
     
     
    		GLfloat box_ambient [4];
    		GLfloat box_diffuse [4];
    		GLfloat box_specular [4];
    		GLfloat box_shininess [1];
     
    };
     
    #endif // !defined(AFX_SKYBOX_H__C4FD8F0B_B99E_4395_9343_533A6C578571__INCLUDED_)
    voici le .cpp de ma classe skybox

    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
    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
     
     
    // Skybox.cpp: implementation of the Skybox class.
    //
    //////////////////////////////////////////////////////////////////////
     
    #include "Skybox.h"
    #include "glext.h"
    #include "glut.h"
     
     
    PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB = NULL;
    PFNGLACTIVETEXTUREARBPROC glActiveTextureARB = NULL;
    PFNGLCLIENTACTIVETEXTUREARBPROC glClientActiveTextureARB = NULL;
     
     
    //////////////////////////////////////////////////////////////////////
    // Construction/Destruction
    //////////////////////////////////////////////////////////////////////
     
    Skybox::Skybox()
    {
    }
     
    Skybox::~Skybox()
    {
    }
     
     
    void Skybox::DefinitTexture(Texture *t1,Texture *t2,Texture *t3,
    						Texture *t4,Texture *t5,Texture *t6)
    {
    		skybox_front = t1;
    		skybox_back = t2;
    		skybox_top = t3;
    		skybox_bottom = t4;
    		skybox_right = t5; 
    		skybox_left = t6;
     
    		box_ambient[0]=0.5f;  box_ambient[1]=0.5f;  box_ambient[2]=0.5f;  box_ambient[3]=1.0f;
    		box_diffuse[0]=0.8f;  box_diffuse[1]=0.8f;  box_diffuse[2]=0.8f;  box_diffuse[3]=1.0f;
    		box_specular[0]=0.0f; box_specular[1]=0.0f; box_specular[2]=0.0f; box_specular[3]=1.0f;
    		box_shininess[0]=1.0f;
    }
     
     
    void Skybox::affiche()
    {
    	glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, box_ambient);
    	glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, box_diffuse);
    	glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, box_specular);
    	glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, box_shininess);
     
    	/* Unité de texture 0 activée */
    	glActiveTextureARB(GL_TEXTURE0_ARB);
    	glEnable(GL_TEXTURE_2D);
     
    	/* Texture brick pour l'unité 0 */
    	skybox_front->utilise();
     
    	/* Unité de texture 1 activée */
    	glActiveTextureARB(GL_TEXTURE1_ARB);
    	/* Texture lightmap pour l'unité 1 */
    	skybox_back->utilise();
     
    	//glEnable (GL_TEXTURE_2D);
    	//skybox_front->utilise();
     
    	glNormal3f( 0.0f, 0.0f, -1.0f);
    	glBegin ( GL_QUADS );
    		//  Face de devant
    		//glTexCoord2f(1.0f, 1.0f); 
    		glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 1.0f, 1.0f);
    		glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 1.0f, 1.0f);
    		glVertex3f(-150.0f, -150.0f,  150.0f);
     
    		//glTexCoord2f(0.0f, 1.0f);
    		glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 0.0f, 1.0f);
    		glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 0.0f, 1.0f);
    		glVertex3f( 150.0f, -150.0f,  150.0f);
     
    		//glTexCoord2f(0.0f, 0.0f); 
    		glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 0.0f, 0.0f);
    		glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 0.0f, 0.0f);
    		glVertex3f( 150.0f,  150.0f,  150.0f);
     
    		//glTexCoord2f(1.0f, 0.0f); 
    		glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 1.0f, 0.0f);
    		glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 1.0f, 0.0f);
    		glVertex3f(-150.0f,  150.0f,  150.0f);
    	glEnd();
     
    	// idem pour les autres faces ...
    }
    j'utilise une classe texture qui permet d'initilaiser toutes mes textures.

    si vous avez besoin cette classe ou si vous avez des questions, n'hésiter pas

    merci d'avance

  2. #2
    Membre confirmé Avatar de Groove
    Inscrit en
    Décembre 2002
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 97
    Par défaut
    Et tu donne une valeur à glMultiTexCoord2fARB a un moment ? Avec (wgl|glx)GetProcess ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 4
    Par défaut
    est-ce que par donner une valeur tu entends :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB = NULL;
    je n'ai jamais rencontré dans les tutoriaux que j'ai utilisé. as-tu un exemple ?

    merci

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 108
    Par défaut
    C'est plutôt wglGetProcAddress qu'il faut utiliser pour récupérer l'adresse de la fonction avant de pouvoir l'utiliser.

  5. #5
    Futur Membre du Club
    Inscrit en
    Juin 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 4
    Par défaut
    merci pour votre aide, il me manquait effectivement trois lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    glMultiTexCoord2fARB = (PFNGLMULTITEXCOORD2FARBPROC) wglGetProcAddress("glMultiTexCoord2fARBV");
    	glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC) wglGetProcAddress("glActiveTextureARB");
    	glClientActiveTextureARB = (PFNGLCLIENTACTIVETEXTUREARBPROC) wglGetProcAddress("glClientActiveTextureARB");

    malgré cela, j'ai toujours une erreur au moment ou je lance mon programme ...

  6. #6
    Futur Membre du Club
    Inscrit en
    Juin 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 4
    Par défaut
    autant pour moi j'avais fait une méthode d'initialisation du multitexturing avec ces lignes et je ne l'appelais pas .... une erreur bête !!!

    donc voila ca marche merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Multitexture
    Par Finch dans le forum OpenGL
    Réponses: 6
    Dernier message: 28/05/2005, 14h29
  2. Multitexturing Vertex Array et Display List
    Par Wyatt dans le forum OpenGL
    Réponses: 1
    Dernier message: 04/05/2005, 15h07
  3. Multitexturing?
    Par Wyatt dans le forum OpenGL
    Réponses: 1
    Dernier message: 16/02/2005, 14h16
  4. Multitexturing et éclairage
    Par Dranor dans le forum DirectX
    Réponses: 5
    Dernier message: 21/02/2004, 12h41
  5. Multitexturing???
    Par sebh dans le forum OpenGL
    Réponses: 2
    Dernier message: 07/12/2003, 18h23

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