这可能是一个非常基本的问题,但我似乎无法让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;
}
答案 0 :(得分:6)
OpenGL以下列方式工作:启动局部坐标系(任意单位)。这个坐标系被模型 - 视图矩阵转换为所谓的眼睛空间坐标(它被称为模型 - 视图矩阵,因为它结合了模型和视图变换)。 / p>
然后通过投影矩阵将眼睛空间转换为剪辑空间,然后立即进行透视划分以获得标准化设备坐标(NDC{x,y,z} = Clip{x,y,z}/Clip_w
)。 NDC 空间中的范围[-1,1] ^ 3将映射到视口(x和y)以及设置的深度范围(z)。
因此,如果您保留转换矩阵( modelview 和投影)标识,那么坐标范围[-1,1]的确会映射到视口。但是,通过选择适当的变换和投影,您可以任意地从模型空间单位映射到视口单元。
答案 1 :(得分:1)
这不是一个百分比:它与当前视口的大小和宽高比有关。我可以写一个关于它的整个故事,但我建议你看一下关于OpenGL的NeHe's tutorials,从lesson 1开始关于设置窗口。非常彻底,强烈推荐。
答案 2 :(得分:1)
您缺少投影矩阵概念。
基本上,投影矩阵是在2D空间上投影顶点的矩阵。有两个投影矩阵:透视和正交。
当前投影矩阵确定有效顶点屏幕位置。由于您未设置投影矩阵,因此您使用的是默认值,即正交值,水平和垂直范围为-1 .. +。
要控制投影矩阵,请参阅gluOrtho2D函数。在那里,您可以找到所需的所有信息。