2013-07-09 4 views
0

GLSL 1.2 및 glDrawElements를 사용하여 그리는 데 문제가 있습니다. 이것은 내 코드입니다.glsl 1.2 + DrawElements

 //At start of the program. 
     GLuint triangleVBO; 
     GLuint triangleIND; 
     float data[] = {1.0, 1.0,-5.0, 
        -1.0,-1.0,-5.0, 
         1.0,-1.0,-5.0, 
         1.0, 1.0,-5.0, 
        -1.0, 1.0,-5.0, 
        -1.0,-1.0,-5.0}; 
     GLuint ind[] = {0,1,2,0,3,1}; 

     glGenBuffers(1,&triangleVBO); 
     glBindBuffer(GL_ARRAY_BUFFER,triangleVBO); 
     glBufferData(GL_ARRAY_BUFFER,sizeof(data),data,GL_STATIC_DRAW); 

     glGenBuffers(1,&triangleIND); 
     glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,triangleIND); 
     glBufferData(GL_ELEMENT_ARRAY_BUFFER,sizeof(ind),ind,GL_STATIC_DRAW); 

     glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,0,0); 

     GLuint v,f,p; 
     v = glCreateShader(GL_VERTEX_SHADER); 
     f = glCreateShader(GL_FRAGMENT_SHADER); 
     p = glCreateProgram(); 

     char *vsFuente = LeeShader("shaders/shader.vert"); 
     char *fsFuente = LeeShader("shaders/shader.frag"); 

     const char *vs = vsFuente; 
     const char *fs = fsFuente; 

     glShaderSource(v,1,&vs,NULL); 
     glShaderSource(f,1,&fs,NULL); 
     free(vsFuente);free(fsFuente); 

     glCompileShader(v); 
     glCompileShader(f); 

     glAttachShader(p,v); 
     glAttachShader(p,f); 

     glLinkProgram(p); 

     //Main loop 

     while(1){ 

     .... etc 

       glUseProgram(p); 
       glEnableVertexAttribArray(0); 
        glBindBuffer(GL_ARRAY_BUFFER,triangleVBO); 
        glDrawElements(GL_TRIANGLES,6,GL_UNSIGNED_INT,0); 
       glDisableVertexAttribArray(0); 
       glUseProgram(0); 

     .... etc. 
    } 

문제는 정사각형이 2 개인 경우에만 삼각형을 그립니다.

누구든지 오류가 무엇입니까? 정점 데이터 정점 0 정점 3 찾고

답변

2

가 동일한 위치가 (1, 1, -5). 따라서 두 번째 삼각형 (인덱스 , , 1)은 퇴보합니다.

+0

대단히 감사합니다, 지금은 작동합니다. VBO 및 glDrawElements로 작업 할 수있는 방법을 찾았습니다. –