Может кто-нибудь уточнить этот код для меня - PullRequest
0 голосов
/ 07 ноября 2011

Я ходил и смотрел на другой код OpenGL 3+, чтобы познакомиться поближе. Я также следую учебным пособиям и пытаюсь кодировать с помощью OpenGL.

поэтому я нашел код, который рисует сферу. некоторые вершины находятся ниже, и вот результат:

.
..
...
Sphere vertices are: >> Vertice 10281: X>0.000747, Y>-0.000275, Z>1.000000! 
Sphere vertices are: >> Vertice 10282: X>0.000769, Y>-0.000208, Z>1.000000! 
Sphere vertices are: >> Vertice 10283: X>0.084840, Y>-0.023011, Z>0.996129! 
Sphere vertices are: >> Vertice 10284: X>0.084840, Y>-0.023011, Z>0.996129! 
Sphere vertices are: >> Vertice 10285: X>0.000769, Y>-0.000208, Z>1.000000! 
Sphere vertices are: >> Vertice 10286: X>0.000784, Y>-0.000141, Z>1.000000! 
Sphere vertices are: >> Vertice 10287: X>0.086522, Y>-0.015533, Z>0.996129! 
Sphere vertices are: >> Vertice 10288: X>0.086522, Y>-0.015533, Z>0.996129! 
Sphere vertices are: >> Vertice 10289: X>0.000784, Y>-0.000141, Z>1.000000! 
Sphere vertices are: >> Vertice 10290: X>0.000793, Y>-0.000072, Z>1.000000! 
Sphere vertices are: >> Vertice 10291: X>0.087546, Y>-0.007936, Z>0.996129!
...
..
.

Теперь код, который я скачал, рисует сферу в середине экрана. Использует пакет glm. Чего я не понимаю, так это того, как «X = 0.087546» или «Z = 0.996129» переводятся в пиксели и рисуются на оси экрана.

Вот код glm:

//PROJECTION
glm::mat4 Projection = glm::perspective(45.0f, 1.0f, 0.1f, 100.0f);
angle = (GLfloat) (i/50 % 360); //to dia gia nan pio argo
//printf("Angle: >>>> %f, \n", angle);  

//VIEW
glm::mat4 View = glm::mat4(1.);
View = glm::translate(View, glm::vec3(0.f, 0.f, -5.0f)); // x, y, z position ? 
//View = glm::rotate(View, angle * -1.0f, glm::vec3(1.f, 0.f, 0.f));
View = glm::rotate(View, angle * 0.5f, glm::vec3(0.f, 1.f, 0.f));
//View = glm::rotate(View, angle * 0.5f, glm::vec3(0.f, 0.f, 1.f));

//MODEL
glm::mat4 Model = glm::mat4(1.0);
glm::mat4 MVP = Projection * View * Model;
glUniformMatrix4fv(glGetUniformLocation(shaderprogram, "mvpmatrix"), 1, GL_FALSE, glm::value_ptr(MVP));

Окно, в котором оно создается, является окном 600 * 600 пикселей. Так как X и Z отображаются на эти координаты?

Ответы [ 2 ]

1 голос
/ 07 ноября 2011

переводится в пиксели и рисуется на оси экрана.

Проходя через конвейер преобразования. Координаты вершин умножаются на матрицу просмотра модели, результирующие координаты положения глаза умножаются на матрицу проекции, примитивы обрезаются, затем применяется деление перспективы, что дает NDC. Затем они отображаются в окне просмотра.

http://www.opengl.org/wiki/Vertex_Transformation

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

Преобразования, которые вы показали, просто отображают вещи в куб, ограниченный (-1, -1, -1) к (1,1,1). Это «нормализованные координаты устройства». В нормализованных координатах устройства X и Y отображаются на пиксели, где (-1, -1) - один угол области просмотра, а (1,1) - противоположный угол. Z отображается на значения в буфере глубины, где -1 - ближняя плоскость отсечения, а 1 - дальняя плоскость отсечения.

glViewport затем отображает нормализованные координаты устройства, (X, Y) = (-1, -1) .. (1,1), в фактические пиксельные координаты вашего окна просмотра, (0,0) .. (599 599) в случай.

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