SDL OpenGL C ++ проблема - PullRequest
       1

SDL OpenGL C ++ проблема

2 голосов
/ 28 сентября 2011

Я пытаюсь сделать простую игру в понг с использованием SDL и OpenGL в C ++, и у меня возникают проблемы с отображением любого вида изображения OpenGL на экране, и мне было интересно, может ли кто-нибудь помочь:

Инициализация:

void init_everything()
{
    SDL_Init( SDL_INIT_EVERYTHING );
    SDL_SetVideoMode( width_of_screen, height_of_screen, bpp_of_screen, SDL_OPENGL );

    glClearColor( 0, 0, 0, 0 );

    // Sets the projection
    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
    glOrtho( 0, width_of_screen, height_of_screen, 0, 1, -1 );

    // initalises the modelview matrix
    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity();

    SDL_WM_SetCaption( "Pong - By Michael Clover", NULL );
}

После этого я вызываю функцию класса:

void paddle::show()
{
    //Move to offset
    glTranslatef( x, y, 0 );

    //Start quad
    glBegin( GL_QUADS );

        //Set color to white
        glColor4f( 1.0, 1.0, 1.0, 1.0 );

        //Draw square
        glVertex3f( 0,            0,             0 );
        glVertex3f( paddle_width, 0,             0 );
        glVertex3f( paddle_width, paddle_height, 0 );
        glVertex3f( 0,            paddle_height, 0 );

    //End quad
    glEnd();

    //Reset
    glLoadIdentity();

}

Затем я вставил это в свою основную функцию:

int main( int argc, char **argv )
{
    bool quit = false;

    init_everything();

    paddle playerpaddle;

    while (quit == false )
    {
        while( SDL_PollEvent( &event ) )
        {
            playerpaddle.handle_input();

            if (event.type == SDL_QUIT)
            {
                quit = true;
            }
        }
        playerpaddle.move();
        glClear( GL_COLOR_BUFFER_BIT );
        playerpaddle.show();
        SDL_GL_SwapBuffers();

    }

    clean_up();
    return 0;
}

Все, что я получаю, это постоянный черный фоновый экран, который я устанавливаю в пределах экрана 640 на 480 пикселей SDL.

Извините за огромное количество текста, и я был бы чрезвычайно благодарен за любое понимание того, в чем может быть проблема, я предполагаю, что я где-то совершаю глупую ошибку.

Ответы [ 3 ]

2 голосов
/ 28 сентября 2011

Я думаю, что glOrtho может быть настроено неправильно. Последние 2 параметра - это ближняя и дальняя плоскости отсечения. Ваша ближняя плоскость должна быть меньше нуля, если вы не хотите обрезать весло. И ваша дальняя плоскость должна быть больше нуля. Итак, попробуйте это:

glOrtho( 0, width_of_screen, height_of_screen, 0, -1, 1 );
0 голосов
/ 28 сентября 2011

Вместо этого попробуйте это для вашей проекции (если вы хотите 0,0,0 в вашем центре).

double range = 4.0; // Set this to whatever you want for the range of the display.
double ratio = double(displayWidth) / double(displayHeight);
glOrtho(-range* ratio, range* ratio, -range, range, -1.0, 1.0);

Временно попробуйте визуализировать квадрат от -1,0, -1,0 до 1,0,1,0, чтобы увидетьесли ваш дисплей работает.

0 голосов
/ 28 сентября 2011

Всего 2 вещи, чтобы проверить теперь, когда вы исключили ошибки:

  1. Попробуйте удалить вызов glTranslatef. Это может быть слишком далеко для вас, чтобы увидеть сцену.

  2. Вы создаете свои вершины по часовой стрелке? Я не могу сказать по переменным, которые вы использовали, но если paddle_height равен> 0 или paddle_width <0, это не будет по часовой стрелке (что необходимо). </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...