2015-04-03 2 views
-1
#include <stdio.h> 
#include <stdlib.h> 
#include <GL/glew.h> 
#include <GL/glut.h> 

void changeSize(int w, int h) 
{ 
    if(h == 0) 
     h = 1; 
    float ratio = w/h; 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glViewport(0, 0, w, h); 
    gluPerspective(40,ratio,1.5,20); 
    glMatrixMode(GL_MODELVIEW); 
} 

void renderScene(void) 
{ 
    glClear(GL_COLOR_BUFFER_BIT); 
    glLoadIdentity(); 
    glTranslatef(0.0,0.0,-5.0); 
    glDrawArrays(GL_TRIANGLES,0,3); 
    glutSwapBuffers(); 
} 

void init() 
{ 
    GLfloat verts[] = { 
     0.0, 1.0, 
     -1.0, -1.0, 
     1.0, -1.0 
    }; 

    GLuint bufferid; 
    glGenBuffers(1,&bufferid); 
    glBindBuffer(GL_ARRAY_BUFFER,bufferid); 
    glBufferData(GL_ARRAY_BUFFER,sizeof(verts),verts,GL_STATIC_DRAW); 
    glEnableVertexAttribArray(0); 
    glVertexAttribPointer(0,2,GL_FLOAT,GL_FALSE,0,0); 

    if(glGetError()==GL_NO_ERROR) 
     printf("no error"); 
} 

int main(int argc, char **argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA); 
    glutInitWindowPosition(100,100); 
    glutInitWindowSize(500,500); 
    glutCreateWindow("MM 2004-05"); 
    glewInit(); 

    init(); 

    glutDisplayFunc(renderScene); 
    glutReshapeFunc(changeSize); 

    if (GLEW_ARB_vertex_program && GLEW_ARB_fragment_program) 
     printf("Ready for GLSL\n"); 
    else { 
     printf("No GLSL support\n"); 
     //exit(1); 
    } 

    glutMainLoop(); 
    return 0; 
} 

При использовании glGenBuffers мой экран получается черным и не показывает ошибки. Если я рисую какую-то другую фигуру без использования буферов, они отображаются, но не с объектами буфера.Пустой экран при использовании glGenBuffers в openGL

версия OPENGL: 3,0 Операционная система: Ubuntu IDE: затмение

+0

Где ваши шейдеры? –

+0

нет шейдеров его базовой программы для рисования треугольника с буферами – user2445268

+0

и есть ваша проблема –

ответ

0

При использовании glGenBuffers вы используете спецификацию OpenGL-3.0. Чтобы нарисовать что-нибудь в OpenGL-3.0 +, вам нужно использовать шейдеры, поэтому экран черный; ваш треугольник не затенен.

+1

'glGenBuffers()' был введен в OpenGL 1.5. –

0

Вы используете вызовы для родового вершинных атрибутов здесь:

glEnableVertexAttribArray(0); 
glVertexAttribPointer(0,2,GL_FLOAT,GL_FALSE,0,0); 

Generic вершинных атрибутов можно использовать только в сочетании с шейдерами. До тех пор, пока вы используете конвейер с фиксированной функцией, вам также необходимо использовать атрибуты вершинной функции с фиксированной функцией.

Соответствующие вызовы с использованием атрибутов фиксированных функций являются:

glEnableClientState(GL_VERTEX_ARRAY); 
glVertexPointer(2, GL_FLOAT, 0, 0); 
Смежные вопросы