我一直在四处寻找不同的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如何映射到那些坐标?
答案 0 :(得分:1)
转换为像素并绘制到屏幕的轴上。
通过转换管道。顶点坐标与Modelview矩阵相乘,得到的眼睛位置坐标与投影矩阵相乘,图元被剪裁,然后应用透视划分产生NDC。那些会映射到视口。
答案 1 :(得分:0)
您显示的转换只是将事物映射到由(-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)情况下。