OpenGL:如何将世界坐标转换为屏幕坐标?
Posted
技术标签:
【中文标题】OpenGL:如何将世界坐标转换为屏幕坐标?【英文标题】:OpenGL: How to convert world coordinate to screen coordinate? 【发布时间】:2011-03-20 14:31:45 【问题描述】: 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();
这是使用世界坐标系,现在我想使用以像素为单位的屏幕位置。怎么做?非常感谢您的帮助
【问题讨论】:
【参考方案1】: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();
将它放在视口像素空间中发生的每组绘图命令之前。
【讨论】:
以上是关于OpenGL:如何将世界坐标转换为屏幕坐标?的主要内容,如果未能解决你的问题,请参考以下文章