这可能是一个非常基本的问题,但我似乎无法让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;
}
Run Code Online (Sandbox Code Playgroud)
OpenGL以下列方式工作:您启动一个本地坐标系(任意单位).该坐标系由模型 - 视图矩阵转换为所谓的眼睛空间坐标(它被称为模型 - 视图矩阵,因为它结合了模型和视图变换).
然后通过投影矩阵将眼睛空间转换为剪辑空间,紧接着是透视分割以获得标准化的设备坐标().NDC空间中的范围[-1,1] ^ 3 被映射到视口(x和y)和设置的深度范围(z).NDC{x,y,z} = Clip{x,y,z}/Clip_w
因此,如果您保留转换矩阵(模型视图和投影)标识,那么坐标范围[-1,1]确实将映射到视口.但是,通过选择适当的变换和投影,您可以任意地从"模型空间"单位映射到"视口"单位.
| 归档时间: |
|
| 查看次数: |
8293 次 |
| 最近记录: |