Bonjour a tous je suis en train de dévelloper un loader dans le cadre d'un projet openGL pour l'IUT et lorsque je le lance le debuger me renvoie un erreur que je n'avais encore jamais vu:
0xC0000096: Privileged instruction.
voici mon code:
CObjet3D.h
CObjet3D.cpp
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 #include <iostream> #include <vector> #include <SFML\Window.hpp> //pour l'utilisation d'openGL using namespace std; #ifndef COBJET3D_H #define COBJET3D_H class CObjet3D { private: char* fileName; vector<double> m_pVertexBuffer; vector<double> m_pFaceBuffer; public: CObjet3D(); CObjet3D(char* file); void Draw(); vector<double> getVertexBuffer(){return m_pVertexBuffer;} vector<double> getFaceBuffer(){return m_pFaceBuffer;} }; #endif //COBJET3D_H
et enfin
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 #include "CObjet3D.h" #include <fstream> #include <string> using namespace std; CObjet3D::CObjet3D() { fileName = "\0"; } CObjet3D::CObjet3D(char* file) { fileName = file; ifstream fichier(fileName, ios::in);//ouverture du flux //si ouverture == OK if(fichier) { string CurrentString = "\0"; double CurrentCoord = 0.0; unsigned CurrentFace = 0; while(!fichier.eof()) { fichier >> CurrentString; if(CurrentString == "v") { //X fichier >> CurrentCoord; m_pVertexBuffer.push_back(CurrentCoord); //Y fichier >> CurrentCoord; m_pVertexBuffer.push_back(CurrentCoord); //Z fichier >> CurrentCoord; m_pVertexBuffer.push_back(CurrentCoord); } else if(CurrentString == "f") { //1er vertex de la face fichier >> CurrentFace; m_pFaceBuffer.push_back(m_pVertexBuffer[CurrentFace]); //2eme vertex de la face fichier >> CurrentFace; m_pFaceBuffer.push_back(m_pVertexBuffer[CurrentFace]); //3eme vertex de la face fichier >> CurrentFace; m_pFaceBuffer.push_back(m_pVertexBuffer[CurrentFace]); //4eme vertex de la face fichier >> CurrentFace; m_pFaceBuffer.push_back(m_pVertexBuffer[CurrentFace]); } } fichier.close();//fermeture du flux } } void CObjet3D::Draw() { for(unsigned i=0; i<m_pFaceBuffer.size(); i++) { glBegin(GL_QUADS); glVertex3f(m_pVertexBuffer[m_pFaceBuffer[i]],m_pVertexBuffer[m_pFaceBuffer[i+1]],m_pVertexBuffer[m_pFaceBuffer[i+2]]); i++; glVertex3f(m_pVertexBuffer[m_pFaceBuffer[i]],m_pVertexBuffer[m_pFaceBuffer[i+1]],m_pVertexBuffer[m_pFaceBuffer[i+2]]); i++; glVertex3f(m_pVertexBuffer[m_pFaceBuffer[i]],m_pVertexBuffer[m_pFaceBuffer[i+1]],m_pVertexBuffer[m_pFaceBuffer[i+2]]); i++; glVertex3f(m_pVertexBuffer[m_pFaceBuffer[i]],m_pVertexBuffer[m_pFaceBuffer[i+1]],m_pVertexBuffer[m_pFaceBuffer[i+2]]); glEnd(); } }
main.cpp
Si une âme charitable pouvait me tirer de ce mauvais pas je lui en serait reconaissante
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 #include "CObjet3D.h" using namespace std; using namespace sf; void main() { WindowSettings Settings; Settings.DepthBits = 24; // Demande un Z-buffer 24 bits Settings.StencilBits = 8; // Demande un stencil-buffer 8 bits Settings.AntialiasingLevel = 2; // Demande 2 niveaux d'anti-crénelage Window App(VideoMode(800, 600, 32), "SFML OpenGL", Style::Close, Settings); CObjet3D mon_obj("cube.obj"); ///////////////////////////////// //initialisation openGL ///////////////////////////////// glClearDepth(1.f); glClearColor(0.f, 0.f, 0.f, 0.f); glEnable(GL_DEPTH_TEST); glDepthMask(GL_TRUE); gluLookAt(0,0,2,0,0,0,0,1,0); ///////////////////////////////// //boucle principale ///////////////////////////////// while (App.IsOpened()) { //gestion d'événements Event Event; while (App.GetEvent(Event)) { //click sur la croix if (Event.Type == Event::Closed) App.Close(); //touche échape if ((Event.Type == Event::KeyPressed) && (Event.Key.Code == sf::Key::Escape)) App.Close(); //reshape if (Event.Type == Event::Resized) glViewport(0, 0, Event.Size.Width, Event.Size.Height); } //commande openGL glMatrixMode(GL_MODELVIEW); glLoadIdentity(); mon_obj.Draw(); App.Display(); } }![]()
Partager