Bonjour,
je suis en train de me battre avec OpenGL et je ne trouve pas de solution.
je travail sur l'affichage de la scene avec l'aide des VBO. A chaque tentative, j'obtien un joli:
voila mon code:
Nom du signal :
EXC_BAD_ACCESS
Signification du signal :
Could not access memory
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 //ma structure de donnée GLuint m_VertexBuffer; SVertex* m_VertexBufferContent; bool m_IsLocked; bool m_IsEnable; // identifiant de l'indexbuffer GLuint m_IndexBuffer; ushort* m_IndexBufferContent; int m_Numvertex; int m_NumIndex;
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 //Definition de mon modele: this->aMesh = new projet::models::CModelsMesh(); SVertex aVertex; aVertex.nx=0; aVertex.ny=0; aVertex.nz=0; aVertex.s0=0; aVertex.t0=0; aVertex.x=0; aVertex.y=0; aVertex.z=0; this->aMesh->addVertex(aVertex); aVertex.nx=0; aVertex.ny=0; aVertex.nz=0; aVertex.s0=0; aVertex.t0=0; aVertex.x=1; aVertex.y=0; aVertex.z=0; this->aMesh->addVertex(aVertex); aVertex.nx=0; aVertex.ny=0; aVertex.nz=0; aVertex.s0=0; aVertex.t0=0; aVertex.x=1; aVertex.y=1; aVertex.z=0; this->aMesh->addVertex(aVertex); aVertex.nx=0; aVertex.ny=0; aVertex.nz=0; aVertex.s0=0; aVertex.t0=0; aVertex.x=0; aVertex.y=1; aVertex.z=0; this->aMesh->addVertex(aVertex); this->aMesh->addIndex((ushort)0); this->aMesh->addIndex((ushort)2); this->aMesh->addIndex((ushort)3); this->aMesh->addIndex((ushort)0); this->aMesh->addIndex((ushort)1); this->aMesh->addIndex((ushort)2); this->aMesh->updateIndexBuffer(); this->aMesh->updateVertexBuffer();
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 // la creation des buffers void CModelsMesh::updateIndexBuffer() { this->m_NumIndex = this->m_IndexBufferVector.size(); this->m_IndexBufferContent = new ushort[this->m_NumIndex]; for(int i=0;i< this->m_NumIndex;i++) { this->m_IndexBufferContent[i]=this->m_IndexBufferVector[i]; std::cout << this->m_IndexBufferContent[i] << std::endl; } glGenBuffers(1, &this->m_IndexBuffer); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, this->m_IndexBuffer); glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(ushort) * this->m_NumIndex, this->m_IndexBufferContent, GL_STATIC_DRAW); //return this->m_IndexBuffer; } void CModelsMesh::updateVertexBuffer() { this->m_Numvertex = this->m_VertexBufferVector.size(); this->m_VertexBufferContent = new SVertex[this->m_Numvertex]; for(int i=0;i< this->m_Numvertex;i++) { this->m_VertexBufferContent[i]=this->m_VertexBufferVector[i]; } glGenBuffers(1, &this->m_VertexBuffer); glBindBuffer(GL_ARRAY_BUFFER, this->m_VertexBuffer); glBufferData(GL_ARRAY_BUFFER, sizeof(SVertex) * this->m_Numvertex, &this->m_VertexBufferContent[0].x, GL_STATIC_DRAW); //return this->m_VertexBuffer; }
cela va faire pret de 3jours que je toruture mon cerveau mais je ne trouve rien ni sur internet ni dans la doc... avez vous une idée?
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 //et l'affichage glBindBuffer(GL_ARRAY_BUFFER, aMeshPart->getParent()->getVertexBuffer()); glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(3, GL_FLOAT, sizeof(SVertex), BUFFER_OFFSET(0)); //The starting point of the VBO, for the vertices glEnableClientState(GL_NORMAL_ARRAY); glNormalPointer(GL_FLOAT, sizeof(SVertex), BUFFER_OFFSET(12)); //The starting point of normals, 12 bytes away glClientActiveTexture(GL_TEXTURE0); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glTexCoordPointer(2, GL_FLOAT, sizeof(SVertex), BUFFER_OFFSET(24)); //The starting point of texcoords, 24 bytes away glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, aMeshPart->getParent()->getIndexBuffer()); glDrawRangeElements(GL_TRIANGLES, 0, 3, 3, GL_UNSIGNED_SHORT, BUFFER_OFFSET(0)); //The starting point of the IBO
merci beaucoup d'avance
T.
Partager