2016-11-28 4 views
-1

Я пытаюсь отобразить 2 простых треугольника в OpenGL, но они не отображаются, несмотря на проверку множества сайтов. Я что-то забыл в коде?OpenGl не отображает треугольники с помощью VBO

#define BUFFER_OFFSET(bytes) ((GLubyte*) NULL + (bytes)) 


    // Prepare: 
    GLfloat vertices[]={0,0,1, 
     0.5,0,-0.5, 
     0,0,0, 
     0,0,1, 
     0,0,0, 
     -0.5,0,-0.5}; 
    GLushort indices[]={0,1,2,3,4,5}; 

    GLfloat *generatedVertices=new GLfloat[18]; 
    GLushort *generatedIndices=new GLushort[6]; 
    GLfloat *colors=new GLfloat[18]; 

    glGenBuffers(3, triangleBuffers); // triangleBuffers = Global GLuint 

     for (int p=0;p<6;p++) 
     { 
      MVector V(vertices[p*3],vertices[p*3+1],vertices[p*3+2]); // Maya type 
      generatedVertices[p*3]=V.x; 
      generatedVertices[p*3+1]=V.y; 
      generatedVertices[p*3+2]=V.z; 

      generatedIndices[p]=p; 

      colors[p*3]=0.8f; 
      colors[p*3+1]=0.6f; 
      colors[p*3+2]=0.0f; 
     } 


    // vertices 
    glBindBuffer(GL_ARRAY_BUFFER, data->triangleBuffers[0]); 
    glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat)*18, generatedVertices, GL_STATIC_DRAW); 

    // indices 
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, data->triangleBuffers[1]); 
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GLushort)*6, generatedIndices, GL_STATIC_DRAW); 

    // couloirs 
    glBindBuffer(GL_ARRAY_BUFFER, data->triangleBuffers[2]); 
    glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat)*18*data->totalSize, colors, GL_STATIC_DRAW); 

// Render: 
    glEnableClientState(GL_VERTEX_ARRAY); 
    glEnableClientState(GL_COLOR_ARRAY); 

    glBindBuffer(GL_ARRAY_BUFFER, data->triangleBuffers[0]); 
    glVertexPointer(3, GL_FLOAT, 0, BUFFER_OFFSET(0)); 

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, data->triangleBuffers[1]); 

    glBindBuffer(GL_ARRAY_BUFFER, data->triangleBuffers[2]); 
    glColorPointer(3, GL_FLOAT, 0, BUFFER_OFFSET(0)); 

    glDrawElements(GL_TRIANGLES, totalSize*6, GL_UNSIGNED_INT, 0); 

    glDisableClientState(GL_VERTEX_ARRAY); 
    glDisableClientState(GL_COLOR_ARRAY); 
+3

Вы загружаете индексы в формате 'GLushort', но в обратном вызове вы говорите, что это формат« GL_UNSIGNED_INT ». – BDL

+0

Какова позиция камеры? Если у него есть позиция '0' на оси y, то это означает, что на основе ваших вершин. Вы не увидите треугольники, потому что вы рисуете два треугольника. Попробуйте следующие вершины; '0,1,0 - 0,0,0 - 0,5, -0,5,0' Для треугольника один – marko5049

+0

BDL: Хороший улов, исправленный, но все еще не отображающий ничего –

ответ

0

Проблема исходит от майи. В режиме OpenGL-Legacy сетка отображается правильно, в режиме OpenGL-Strict это не так. Я буду исследовать в этом направлении.

Смежные вопросы