繁体   English   中英

OpenGL的坐标系如何工作?

[英]How Does OpenGL's Coordinate System Work?

这可能是一个非常基本的问题,但我似乎无法让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;
}

OpenGL以下列方式工作:您启动一个本地坐标系(任意单位)。 该坐标系由模型 - 视图矩阵转换为所谓的眼睛空间坐标(它被称为模型 - 视图矩阵,因为它结合了模型和视图变换)。

然后通过投影矩阵将眼睛空间变换为剪辑空间 ,紧接着是透视分割以获得归一化的设备坐标NDC{x,y,z} = Clip{x,y,z}/Clip_w )。 NDC空间中的范围[-1,1] ^ 3被映射到视口(x和y)和设置的深度范围(z)。

因此,如果您保留转换矩阵( 模型视图投影 )标识,那么坐标范围[-1,1]确实将映射到视口。 但是,通过选择适当的变换和投影,您可以任意地从“模型空间”单位映射到“视口”单位。

它实际上并不是一个百分比:它与当前视口的大小和宽高比有关。 我可以写一个关于它的整个故事,但我建议你看看NeHe关于OpenGL 的教程 ,从第1课开始,关于设置窗口。 非常彻底,强烈推荐。

你缺少投影矩阵概念。

实质上,投影矩阵是在2D空间上投影顶点的矩阵。 有两个投影矩阵:透视和正交。

当前投影矩阵确定有效顶点屏幕位置。 由于未设置投影矩阵,因此使用的是默认值,即正交值,水平和垂直范围为-1 .. + 1。

要控制投影矩阵,请参阅gluOrtho2D函数。 在那里你可以找到所需的所有信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM