OpenGL gluperspective () - PullRequest
       2

OpenGL gluperspective ()

0 голосов
/ 16 ноября 2011

Я думаю, что я мог неправильно понять использование gluperspective () и мне нужна помощь.

В настоящее время у меня есть этот код, который выдает пустой черный экран (из того, что, как я думал, я понял, он должен создать два квадрата, один ближе, а другой дальше). Это не делает этого, и мне нужно понять, почему нет.

#include <SDL/SDL.h>
#include <SDL/SDL_opengl.h>
#include <GL/glu.h>
#include "functionfile.h"

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

glTranslatef(0,0,10);
glColor4f(1.0,1.0,1.0,1.0);

glBegin(GL_QUADS);
glVertex3f(0,  0,0);
glVertex3f(10, 0,0);
glVertex3f(10,10,0);
glVertex3f(0, 10,0);
glEnd();

glLoadIdentity();
glTranslatef(0,0,50);

glBegin(GL_QUADS);
glVertex3f(0,   0, 0);
glVertex3f(10,  0, 0);
glVertex3f(10, 10, 0);
glVertex3f(0,  10, 0);
glEnd();

glLoadIdentity();

SDL_GL_SwapBuffers();

SDL_Delay(2000);

SDL_Quit();

return 0;
}

// from header file "functionfile.h" 

void init_perspective(int width, int height)

{

SDL_Init(SDL_INIT_EVERYTHING);
SDL_SetVideoMode(width, height, 32, SDL_OPENGL);
SDL_WM_SetCaption( "OpenGL Test", NULL );

glClearColor( 0, 0, 0, 0 );
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
gluPerspective(45, width/height, 1, 100);
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
glClear( GL_COLOR_BUFFER_BIT );

}

Ответы [ 2 ]

3 голосов
/ 16 ноября 2011

Ваша камера смотрит вниз по отрицательной оси Z, поэтому ваши вызовы glTranslatef перемещают геометрию позади камеры, а не впереди.

3 голосов
/ 16 ноября 2011

Ваш код содержит несколько проблем. Прежде всего, вам не нужно устанавливать область просмотра (см. Документацию glViewport). Далее вы должны знать, что OpenGL - это конечный автомат, и рекомендуется устанавливать все необходимые состояния перед каждой итерацией рендеринга. Это включает в себя настройку области просмотра и проекции. Таким образом, glViewport и семантическое задание матрицы проекции принадлежат командам рисования, а не командам управления окнами.

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

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