OpenGL: Как преобразовать мировую координату в экранную? - PullRequest
1 голос
/ 20 марта 2011
    GL.LoadIdentity();
    GL.Translate(0f, 0f,-1f);

    GL.Begin(BeginMode.Quads);
    GL.Color4(1f, 0f, 0f, 1f);

    GL.Vertex3(-1.0f, 1.0f,0);              
    GL.Vertex3(1.0f, 1.0f,0);               
    GL.Vertex3(1.0f, -1.0f,0);              
    GL.Vertex3(-1.0f, -1.0f,0);             
    GL.End();

Это использует мировую систему координат, и теперь я хочу сделать это, используя расположение на экране в пикселях.Как это сделать?Большое спасибо за помощь

1 Ответ

2 голосов
/ 20 марта 2011

OpenGL не имеет "мировой" системы координат.Он имеет пространство просмотра модели, которое преобразуется матрицей просмотра модели, и имеет пространство клипа, которое достигается из пространства просмотра модели, преобразуя его с помощью матрицы проекции.Пространство клипа - [-1, 1] ^ 3, и оно отображается в области просмотра и диапазоне глубины буфера Z.

Итак, вам нужно определить цепочку преобразований, которая отображает координаты модели в координаты области просмотра.с помощью преобразования идентичности (ну, это не будет работать для Z).Преобразование из пространства клипа в область просмотра исправлено.Таким образом, вы хотите сделать это, используя проекцию, оставляя вид модели преобразованием идентичности:

Это делает трюк:

glViewport(x, y, width, height);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, width, 0, height, -1, 1);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

Поместите его перед каждым набором команд рисования, которые происходятпиксельное пространство области просмотра.

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