2012-10-30 3 views
0

저는 현재 최신 OpenGL에 대한 자습서를보고 있습니다. 내가 자습서에서 코드를 복사하고 그것을 시도했다. 아래 코드는 삼각형을 표시해야하지만 빈 창이 나타납니다. 나는 화면에 포인트가 나타나고 작동하는이 튜토리얼을 시도했지만이 방법은 효과가 없다. 무엇이 문제 일 수 있습니까?OpenGL 삼각형이 보이지 않음

#include <stdio.h> 
#include <GL/glew.h> 
#include <GL/freeglut.h> 

GLuint VBO; 

static void RenderSceneCB() 
{ 
    glClear(GL_COLOR_BUFFER_BIT); 
    glEnableVertexAttribArray(0); 
    glBindBuffer(GL_ARRAY_BUFFER, VBO); 
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (void*)0); 

    glDrawArrays(GL_TRIANGLES, 0, 3); 

    glDisableVertexAttribArray(0); 

    glutSwapBuffers(); 
} 

static void InitializeGlutCallbacks() 
{ 
    glutDisplayFunc(RenderSceneCB); 
} 

static void CreateVertexBuffer() 
{ 
    static const GLfloat Vertices[] = { 
     -1.0f, -1.0f, 0.0f, 
     1.0f, -1.0f, 0.0f, 
     0.0f, 1.0f, 0.0f, 
    }; 

    glGenBuffers(1, &VBO); 
    glBindBuffer(GL_ARRAY_BUFFER, VBO); 
    glBufferData(GL_ARRAY_BUFFER, sizeof(Vertices), Vertices, GL_STATIC_DRAW); 
} 

int main(int argc, char** argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA); 
    glutInitWindowSize(1024, 768); 
    glutInitWindowPosition(100, 100); 
    glutCreateWindow("Tutorial 03"); 

    InitializeGlutCallbacks(); 

    // Must be done after glut is initialized! 
    GLenum res = glewInit(); 
    if (res != GLEW_OK) { 
     fprintf(stderr, "Error: '%s'\n", glewGetErrorString(res)); 
     return 1; 
    } 

    glClearColor(0.0f, 0.0f, 0.0f, 0.0f); 

    CreateVertexBuffer(); 

    glutMainLoop(); 

    return 0; 
} 
+0

데스크톱 OpenGL 또는 OpenGL ES를 사용하고 있습니까? –

답변

1

쉐이더에 대한 증거는 없습니다. 그리고 쉐이더없이 glVertexAttribPointer을 사용할 수 없습니다.

이 코드를 복사하여 붙여 넣은 자습서에는 아마도 어딘가에있는 쉐이더가있을 것입니다. 당신이 그들을 사용해야합니다.

0

우분투 12.04에서이 문제가 발생했습니다. OpenGL 1.x를 사용하려고하므로 현재 그래픽 드라이버가 설치되어 있지 않은 경우에도이 문제가 발생할 수 있습니다. 시스템이 최신 OpenGL을 사용하도록 비디오 드라이버를 업데이트하고 다시 시도하십시오.

내가 아는 한, 셰이더가 부족한 것은 기본 셰이더를 자동으로 사용해야하기 때문에 문제가되지 않습니다. 그게 나일지도 모르지만.