Использование gluPerspective () - PullRequest
2 голосов
/ 26 октября 2011

Я изучаю OpenGL; Мне удалось создать свою первую 2D-программу, но я застрял на использовании gluPerspective.

Я пытаюсь провести небольшой тест, чтобы понять, как я могу сделать 3D-проект, но я не могу понять, чего мне не хватает и что нужно для того, чтобы этот маленький тест заработал:

void init_perspective()

{

SDL_Init(SDL_INIT_EVERYTHING); 
SDL_SetVideoMode(640, 480, 32, SDL_OPENGL); 
SDL_WM_SetCaption( "OpenGL Test", NULL ); 

glClearColor( 0, 0, 0, 0 ); 
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
gluPerspective(45, 1.333, 0, 100); 
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
glClear( GL_COLOR_BUFFER_BIT );

}

int main( int argc, char **argv)

{

init_perspective();

glTranslatef( 200, 200, 50 );
glColor4f(1.0,1.0,1.0,1.0);

glBegin(GL_QUADS);

    glVertex3f(0, 0 ,0);
    glVertex3f(50,0 ,10);
    glVertex3f(50,50,30);
    glVertex3f(0, 50,0);

glEnd();

glLoadIdentity();

SDL_GL_SwapBuffers();

SDL_Delay(1000);

SDL_Quit();

return 0;

}

Если бы кто-нибудь мог сказать мне, какие вызовы функций я мог бы использовать и отсутствует в этом тестовом коде, чтобы я мог поиграть и узнать, как работает 3D OpenGL, я был бы благодарен.

1 Ответ

6 голосов
/ 26 октября 2011

gluPerspective (45, 1.333, 0 , 100);

Никогда не устанавливайте zNear на ноль.Это портит математика :

Поскольку r = zFar / zNear приближается к бесконечности, когда zNear приближается к 0, zNear никогда не должен быть установлен на 0.

Выберите небольшое положительное число, например 0.01 или 12.

РЕДАКТИРОВАТЬ: Кроме того, поместите камеру куда-нибудь так, чтобы она могла видеть вашу геометрию:

int main( int argc, char **argv)
{
init_perspective();

glTranslatef(0,0,-5);
glColor4f(1.0,1.0,1.0,1.0);

glBegin(GL_QUADS);
    glVertex2f(-1,-1);
    glVertex2f( 1,-1);
    glVertex2f( 1, 1);
    glVertex2f(-1, 1);
glEnd();

SDL_GL_SwapBuffers();

SDL_Delay(1000);

SDL_Quit();

return 0;
}

По умолчаниюон смотрит вниз по оси -Z из положения (0,0,0).

...