slawkow68 Temat założony przez niniejszego użytkownika |
[OpenGl] VBO problem » 2013-09-23 23:00:07 Witam, zacząłem się ostatnio znowu bawić OpenGl (będzie mi za niedługo bardzo potrzebny) i natknąłem się na problem przy VBO, mianowicie wszystko się linku itd., nie wywala błędów, a nic nie wyświetla (wykomentowanie elementów VBO, tak żeby zostały z tego Vertex Arrays potwierdza, że same wierzchołki itd mają dobre współrzędne). Siedzę nad tym od kilku dni i nie mogę znaleźć błędu, więc zwracam się do was z uprzejmą prośbą o jakieś wskazówki. (Program powinien wyświetlić trójkąt w sześcianie) #include <GL/glew.h> #include <GL/glut.h> #include <cstdlib> #include <iostream>
using namespace std;
GLdouble aNear = 1; GLdouble aFar = 5; GLdouble przod = 1; GLdouble tyl =- 1; GLdouble lewo =- 1; GLdouble prawo = 1; GLdouble gora = 1; GLdouble dol =- 1; GLuint vbo_id;
float tab2[] = { - 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f };
void initVBO() { glGenBuffers =( PFNGLGENBUFFERSPROC ) wglGetProcAddress( "glGenBuffers" ); glBindBuffer =( PFNGLBINDBUFFERPROC ) wglGetProcAddress( "glBindBuffer" ); glBufferData =( PFNGLBUFFERDATAPROC ) wglGetProcAddress( "glBufferData" ); glMapBuffer =( PFNGLMAPBUFFERPROC ) wglGetProcAddress( "glMapBuffer" ); glUnmapBuffer =( PFNGLUNMAPBUFFERPROC ) wglGetProcAddress( "glUnmapBuffer" ); }
void drawBox() { glColor3f( 0.4, 0.4, 0.4 ); glBegin( GL_QUADS ); glVertex3f( lewo, dol, przod ); glVertex3f( prawo, dol, przod ); glVertex3f( prawo, dol, tyl ); glVertex3f( lewo, dol, tyl ); glEnd(); }
GLdouble angle = 0;
void Display() { glClearColor( 1.0, 1.0, 1.0, 1.0 ); glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glEnable( GL_DEPTH_TEST ); glDepthFunc( GL_LESS ); glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); glTranslatef( 0, 0, -( aNear + aFar ) / 2 ); glRotatef( angle, 1, 0, 0 ); drawBox(); glBindBuffer( GL_ARRAY_BUFFER, vbo_id ); glEnableClientState( GL_VERTEX_ARRAY ); glVertexPointer( 3, GL_FLOAT, 0, 0 ); glDrawArrays( GL_TRIANGLES, 0, 3 ); glDisableClientState( GL_VERTEX_ARRAY ); glBindBuffer( GL_ARRAY_BUFFER, 0 ); glFlush(); glutSwapBuffers(); }
void Reshape( int width, int height ) { glViewport( 0, 0, width, height ); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); glFrustum( lewo, prawo, dol, gora, aNear, aFar ); Display(); }
void Keyboard( unsigned char key, int x, int y ) { if( key == '+' ) angle -= 1; if( key == '-' ) angle += 1; if( key == '0' ) angle = 0; Reshape( glutGet( GLUT_WINDOW_WIDTH ), glutGet( GLUT_WINDOW_HEIGHT ) ); }
int main( int argc, char * argv[] ) { glutInit( & argc, argv ); glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB ); glutInitWindowSize( 800, 800 ); glutCreateWindow( "okno" ); glutDisplayFunc( Display ); glutReshapeFunc( Reshape ); glutKeyboardFunc( Keyboard ); initVBO(); glGenBuffers( 1, & vbo_id ); glBindBuffer( GL_ARRAY_BUFFER, vbo_id ); glBufferData( GL_ARRAY_BUFFER, sizeof( GLfloat ) * 1 * 3, tab2, GL_STATIC_DRAW ); glutMainLoop(); return 0; }
[red] Problem rozwiązany, glBufferData( GL_ARRAY_BUFFER, sizeof( GLfloat ) * 1 * 3, tab2, GL_STATIC_DRAW ); powinno byc 3*3 [/red] |