Bonjour,
Je viens encor une nouvelle fois vers vous car je me trouve confronter à un problème avec le tuto sur le moteur 3D Yes::Engine.
Je suis entrain d'implémenter une classe C_Model mais j'ai rencontrer un problème de scintillement.
J'ai donc voulu faire un test pour voir ou se situe le problème.
Si j'essaye de faire l'exemple suivant comme dans le tuto tous se passe bien (affichage du rectangle) :
Mais lorsque j'essaye d'afficher un Cube avec les index la j'ai un scintillement qui apparait.
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 // Création du vertex buffer - rectangle centré en (0, 0) TVertex Vertices[] = { { -200, -100, 0, Renderer.ConvertColor(0xFF008080) }, { 200, -100, 0, Renderer.ConvertColor(0xFF303050) }, { -200, 100, 0, Renderer.ConvertColor(0xFF505000) }, { 200, 100, 0, Renderer.ConvertColor(0xFF1090F0) }, }; m_VertexBuffer = Renderer.CreateVertexBuffer(4, 0, Vertices); // Création de la déclaration de vertex TDeclarationElement Decl[] = { { 0, ELT_USAGE_POSITION, ELT_TYPE_FLOAT3 }, { 0, ELT_USAGE_DIFFUSE, ELT_TYPE_COLOR } }; m_Declaration = Renderer.CreateVertexDeclaration(Decl); /////////////////////////////////////////////// // Dans la fonction Render ////////////////////////////////////////////////// Renderer.BeginScene(); // glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); // Affichage du rectangle Renderer.SetDeclaration(m_Declaration); Renderer.SetVertexBuffer(0, m_VertexBuffer); Renderer.DrawPrimitives(PT_TRIANGLESTRIP, 0, 2); Renderer.EndScene(); // SwapBuffers(m_Handle);
Voici le code tester pour le Cube :
J'aurais aimer savoir si quelqu'un était tomber sur ce problème ou si quelqu'un avait une proposition du à se problème?
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 // Création du vertex buffer - Cube T_Vertex Vertices[] = { { -1.0f, 1.0f, -1.0f, Renderer.ConvertColor(0xFF008080) }, { -1.0f, -1.0f, -1.0f, Renderer.ConvertColor(0xFF303050) }, { -1.0f, 1.0f, 1.0f, Renderer.ConvertColor(0xFF505000) }, { -1.0f, -1.0f, 1.0f, Renderer.ConvertColor(0xFF1090F0) }, { 1.0f, 1.0f, 1.0f, Renderer.ConvertColor(0xFF1090F0) }, { 1.0f, -1.0f, 1.0f, Renderer.ConvertColor(0xFF1090F0) }, { 1.0f, 1.0f, -1.0f, Renderer.ConvertColor(0xFF1090F0) }, { 1.0f, -1.0f, -1.0f, Renderer.ConvertColor(0xFF1090F0) }, }; m_VertexBuffer = Renderer.CreateVertexBuffer(8, 0, Vertices); // Création de l'index buffer - Cube T_Index Indices[] = { 0, 1, 2, 2, 1, 3, 4, 5, 6, 6, 5, 7, 3, 1, 5, 5, 1, 7, 0, 2, 6, 6, 2, 4, 6, 7, 0, 0, 7, 1, 2, 3, 4, 4, 3, 5 }; m_indexBuffer = Renderer.CreateIndexBuffer(36, 0, Indices); // Création de la déclaration de vertex TDeclarationElement Decl[] = { { 0, ELT_USAGE_POSITION, ELT_TYPE_FLOAT3 }, { 0, ELT_USAGE_DIFFUSE, ELT_TYPE_COLOR } }; m_Declaration = Renderer.CreateVertexDeclaration(Decl); /////////////////////////////////////////////// // Dans la fonction Render ////////////////////////////////////////////////// // Affichage du Cube Renderer.BeginScene(); // glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); Renderer.SetDeclaration(m_Declaration); Renderer.SetVertexBuffer(0, m_VertexBuffer); Renderer.SetIndexBuffer(m_indexBuffer); Renderer.DrawPrimitives(PT_TRIANGLELIST, 0, m_indexBuffer.GetCount() / 3); Renderer.EndScene(); // SwapBuffers(m_Handle);
Je précise également j'utilise les même configuration que le tuto l'initialisation de Opengl :
J'ai également essayer de rajouter le code ci-dessous pour désactiver après le rendu les buffer mais aucun résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 // States par défaut glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClearDepth(1.0f); glClearStencil(0x00); glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); glEnable(GL_DEPTH_TEST);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 glColor4f(1, 1, 1, 1); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); glDisableClientState(GL_COLOR_ARRAY); glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0);
Partager