Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[OpenGl] VBO problem

Ostatnio zmodyfikowano 2013-09-23 23:00
Autor Wiadomość
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)

C/C++
#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();
    // ... nieistotne
}

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();
    //problemowy fragment********************/
    glBindBuffer( GL_ARRAY_BUFFER, vbo_id ); ///
    glEnableClientState( GL_VERTEX_ARRAY );
    glVertexPointer( 3, GL_FLOAT, 0, 0 ); ///
    ///  glVertexPointer(3, GL_FLOAT, 0, tab2);
   
    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 );
   
    /******problemowy fragment**************/
    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]
P-92571
« 1 »
  Strona 1 z 1