OpenGL:如何将世界坐标转换为屏幕坐标?

问题描述:

GL.LoadIdentity(); 
    GL.Translate(0f, 0f,-1f); 

    GL.Begin(BeginMode.Quads); 
    GL.Color4(1f, 0f, 0f, 1f); 

    GL.Vertex3(-1.0f, 1.0f,0);    
    GL.Vertex3(1.0f, 1.0f,0);    
    GL.Vertex3(1.0f, -1.0f,0);    
    GL.Vertex3(-1.0f, -1.0f,0);    
    GL.End(); 

这是使用世界坐标系,现在我想要使用像素中的屏幕位置。怎么做?非常感谢您的帮助OpenGL:如何将世界坐标转换为屏幕坐标?

OpenGL没有“世界”坐标系。它具有模型视图空间,该模型视图空间由模型视图矩阵转换,并具有从模型视图空间到投影矩阵转换的剪辑空间。剪辑空间是[-1,1]^3,它被映射到视口和Z缓冲区深度范围。

因此,您需要做的是定义一个转换链,通过标识转换将模型视图坐标映射到视口坐标(对Z不适用)。从剪辑空间到视口的转换是固定的。所以,你要做到这一点使用的投影,使模型视图恒等变换:

该做的伎俩:

glViewport(x, y, width, height); 

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(0, width, 0, height, -1, 1); 

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

把它放在每一套绘图命令在视口中像素的空间来发生的前面。