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 :

[Texture] cube s'affiche sans texture


Sujet :

OpenGL

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut [Texture] cube s'affiche sans texture
    Soirtous,

    Je fais(j'essaye) de faire de l'openGL avec les MFC.
    Je suis parvenu a afficher un cube, seulement je bloque pour la texture.
    J'ai deja realiser des application en C(sans MFC ni rien) et la je suis arrive a appliquer des textures, seulement maintenant j'essaye de proceder de la meme facon avec les mfc et je n'y arrive pas.
    Si vous pouvez me filer un coup de main, parce que la je suis bloquer.

    Donc je realise une application avec les MFC:
    IDE: Visual C++ 6.0
    OS: windows(normal)

    Ma fenetre avec l'openGL marche(je peut faire bouger mon cube, ca marche) seul la texture n'est pas prise en compte.

    Je ne met pas tout le code pour pas surchager la page mais je peut envoyer toute l'appli si necessaire (j'ai pas de site ou la mettre en download).

    Voici le code principal
    Je compile sans erreur et le cube s'affiche en gris, aucune texture n'est ajouter.
    La texture est charger a partir d'une bitmap(couleur:24bits).

    Dans mon .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    		GLuint m_gltexture[1];
    Dans mon .cpp (y pas tout le code, que ce qui m'a parut pertinent)
    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
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
     
    void COpenGLControl::OnSize(UINT nType, int cx, int cy)
    {
    	CWnd::OnSize(nType, cx, cy);
     
    	if (0 >= cx || 0 >= cy || nType == SIZE_MINIMIZED) return;
     
    	// Map the OpenGL coordinates.
    	glViewport(0, 0, cx, cy);
    	// Projection view
    	glMatrixMode(GL_PROJECTION);
     
    	glLoadIdentity();
    	// Set our current view perspective
    	gluPerspective(35.0f, (float)cx / (float)cy, 0.01f, 2000.0f);
    	// Model view
    	glMatrixMode(GL_MODELVIEW);
    }
     
    int COpenGLControl::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    	if (CWnd::OnCreate(lpCreateStruct) == -1) return -1;
    	oglInitialize();
    	return 0;
    }
     
    void COpenGLControl::OnDraw(CDC *pDC)
    {
    	// If the current view is perspective...
    	glLoadIdentity();
    }
     
    void COpenGLControl::OnTimer(UINT nIDEvent)
    {
    	switch (nIDEvent)
    	{
    		case 1:
    		{
    			// Clear color and depth buffer bits
    			glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    			// Draw OpenGL scene
    			oglDrawScene();
    			// Swap buffers
    			SwapBuffers(hdc);
    			break;
    		}
    		default:
    			break;
    	}
     
    	CWnd::OnTimer(nIDEvent);
    }
     
    void COpenGLControl::oglCreate(CRect rect, CWnd *parent)
    {
    	CString className = AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW | CS_OWNDC, NULL, (HBRUSH)GetStockObject(BLACK_BRUSH), NULL);
     
    	CreateEx(0, className, "OpenGL", WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, rect, parent, 0);
     
    	// Set initial variables' values
    	m_oldWindow	   = rect;
    	m_originalRect = rect;
    	hWnd = parent;
    }
     
    void COpenGLControl::oglInitialize(void)
    {
    	// Initial Setup:
    	//
    	static PIXELFORMATDESCRIPTOR pfd =
    	{
    		sizeof(PIXELFORMATDESCRIPTOR),
    		1,
    		PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER,
    		PFD_TYPE_RGBA,
    		32, // bit depth
    		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    		16, // z-buffer depth
    		0, 0, 0, 0, 0, 0, 0,
    	};
     
    	// Get device context only once.
    	//hdc = GetDC()->m_hDC;
    	hdc = ::GetDC(m_hWnd);
     
    	// Pixel format.
    	m_nPixelFormat = ChoosePixelFormat(hdc, &pfd);
    	SetPixelFormat(hdc, m_nPixelFormat, &pfd);
     
    	// Create the OpenGL Rendering Context.
    	hrc = wglCreateContext(hdc);
    	wglMakeCurrent(hdc, hrc);
     
    	// Basic Setup:
    	//
    	// Set color to use when clearing the background.
    	glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
     
    	// Turn on depth testing
    	glEnable(GL_DEPTH_TEST);
     
    	// Activation du texturing
    	glEnable(GL_TEXTURE_2D);
     
    	// Activation de la lumière
    	glEnable(GL_LIGHTING);
    	glEnable(GL_LIGHT0);
     
    	// Chargement de la texture
    	if(LoadGLTextures("data/texture.bmp", m_gltexture[0])==FALSE) // La fonction marche bien je l'ai recuperer de mon projet en C
    		return;
     
    	// Send draw request
    	OnDraw(NULL);
    }
     
    void COpenGLControl::oglDrawScene(void)
    {
    	GLint texture;
     
    	// Sélection de la texture
    	texture = m_gltexture[0];
    	glBindTexture(GL_TEXTURE_2D, texture);
     
    	glBegin(GL_QUADS);
    			// Front Side
    			glVertex3f( 1.0f,  1.0f, 1.0f); glTexCoord2f( 0, 0);
    			glVertex3f(-1.0f,  1.0f, 1.0f); glTexCoord2f( 0, 1);
    			glVertex3f(-1.0f, -1.0f, 1.0f); glTexCoord2f( 1, 1);
    			glVertex3f( 1.0f, -1.0f, 1.0f); glTexCoord2f( 1, 0);
     
    			//
    			// Meme chose pour les 5 autres faces
    			//
    	glEnd();
    }

    Voila voila, donc je n'ai pas de texture, a priori je pensai que ca venait de l'initialisation mais j'ai rien trouver.

    Si il vous manque des infos, ou si vous voulez le code, n'hesitez pas.

    Merci.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut
    Personne pour m'aider?

    Je suis toujours bloquer au meme endroit je supose que c'est un probleme d'initialisation mais je trouve rien.

  3. #3
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Deux infos:

    La chose la plus grave que je vois:

    Tu appelles glVertex3f avant glTexCoord2f... Cela expliquerait le problème

    Ensuite 2 détails:

    - Si tu utilises que les valeurs 0 et 1, utilises glTexCoord2i...

    - Tu passes à ta fonction LoadBitmap la valeur m_gltexture[0], celle-ci n'est pas initialisé par glGenTexture, bien que cela est possible et se fait de temps en temps, j'ai l'impression que c'est un oubli ici...

    Finalement, vérifies que ton image posséde des dimensions qui sont des puissances de 2...

    Jc

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut
    Alala!

    Franchement un grand MERCI!
    j'espere que je suis pas en train d'halluciner! mais ca a l'air de marcher!

    Et toute les erreurs que t'a dit etait vrai, texture non initialiser! et glVertex3f avant glTexCoord2f aussi.

    Encore Merci!
    c'est trop cool!

    Kacedda

  5. #5
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par kacedda
    Alala!

    Franchement un grand MERCI!
    j'espere que je suis pas en train d'halluciner! mais ca a l'air de marcher!

    Et toute les erreurs que t'a dit etait vrai, texture non initialiser! et glVertex3f avant glTexCoord2f aussi.

    Encore Merci!
    c'est trop cool!

    Kacedda
    De rien, pense au résolu

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut

    En fait j'ai pas mis le tag resolu car je voulai tester sur mon appli. La je codai sur un exemple,
    Donc sur l'exemple ca marche mais dans mon appli ca passe pas.

    En fait c'est le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    glGenTextures(1, &texture[0]);
    Il me retourne texture[0] = 345134321432 (n'importe quoi)
    Alors que dans mon appli de test j'ai bien
    texture[0] = 1
    Et je charge pareil(meme control meme initialisation).

    Donc je vai chercher de ce cote la.
    En tout cas tes remarques m'ont quand meme permis d'avancer

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut
    Mmm en fait c'est un probleme different.
    Je vais creer un nouveau post

    A+

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

Discussions similaires

  1. Afficher une texture "pleine" sur un support non c
    Par Mastero dans le forum DirectX
    Réponses: 20
    Dernier message: 27/01/2005, 13h28
  2. Afficher une texture plein ecran en 2D
    Par venomelektro dans le forum OpenGL
    Réponses: 8
    Dernier message: 07/10/2004, 12h30
  3. Rendu sans textures !
    Par Francky033 dans le forum DirectX
    Réponses: 5
    Dernier message: 23/09/2004, 05h03
  4. Réponses: 7
    Dernier message: 20/04/2004, 15h55
  5. texture cube glTexImage2D et moi
    Par Toukan dans le forum OpenGL
    Réponses: 3
    Dernier message: 04/06/2003, 15h01

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