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