Как работает система координат OpenGL? - PullRequest
2 голосов
/ 14 октября 2011

это, вероятно, довольно простой вопрос, но я не могу заставить OpenGL работать с системой координат точек.Вместо этого, кажется, в процентах, например .99 ставит меня прямо на краю экрана.Это так или я что-то не так делаю?Спасибо!

использованный код:

#include <iostream>
#include <stdlib.h>
#include <GLUT/GLUT.h>

void RenderScene()
{
    glLoadIdentity (); 
    glClear(GL_COLOR_BUFFER_BIT);

    glBegin( GL_POINTS );  

        glVertex3f( 0, 0, 0 );

    glEnd();


    glFlush();  
}

int main(int argc, char **argv)
{
    glutInit( &argc, argv );                
    glutInitDisplayMode( GLUT_SINGLE | GLUT_RGB );        
    glutInitWindowSize( 600, 600 );        
    glutCreateWindow( "OpenGL" );   
    glutDisplayFunc( RenderScene );
    glutMainLoop();
    return 0;
}

Ответы [ 3 ]

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

OpenGL работает следующим образом: Вы запускаете локальную систему координат (из произвольных единиц).Эта система координат преобразуется в так называемые пространство глаз координат с помощью матрицы модель-вид (она называется матрицей вида модель, поскольку она объединяет преобразования модели и вида).

Затем пространство глаза преобразуется в пространство клипа с помощью матрицы проекция , за которой сразу следует деление перспективы для получения нормализованных координат устройства (NDC{x,y,z} = Clip{x,y,z}/Clip_w).Диапазон [-1,1] ^ 3 в NDC пространстве отображается на область просмотра (x и y) и заданный диапазон глубины (z).

Так что если вы оставите свое преобразованиеМатрицы ( ModelView и Проекция ) идентичны, тогда действительно, диапазоны координат [-1,1] будут отображаться в окне просмотра.Однако, выбрав соответствующее преобразование и проекцию, вы можете произвольно отобразить единицы измерения пространства модели в единицы просмотра.

1 голос
/ 14 октября 2011

вам не хватает концепции матрицы проекции.

По сути, матрица проекции - это матрица, которая проецирует вершину на двумерное пространство. Существует две проекционные матрицы: перспективная и орфографическая.

Текущая матрица проекции определяет эффективную позицию экрана вершины. Поскольку вы не устанавливаете матрицу проекции, вы используете матрицу по умолчанию, которая является орфографической, с горизонтальным и вертикальным диапазоном -1 .. + 1.

Чтобы управлять матрицей проекции, см. Функцию gluOrtho2D. Там вы можете найти всю необходимую информацию.

1 голос
/ 14 октября 2011

Это не совсем процент: он связан с размером и соотношением сторон вашего текущего окна просмотра.Я мог бы написать об этом целую историю, но я бы посоветовал вам взглянуть на руководства NeHe по OpenGL, начиная с урок 1 о настройке окна.Очень тщательно и настоятельно рекомендуется.

...