【问题标题】:OpenGL: How to convert world coordinate to screen coordinate?OpenGL:如何将世界坐标转换为屏幕坐标?
【发布时间】: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();

这是使用世界坐标系,现在我想使用以像素为单位的屏幕位置。怎么做?非常感谢您的帮助

【问题讨论】:

    标签: c# opengl


    【解决方案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();
    

    将它放在视口像素空间中发生的每组绘图命令之前。

    【讨论】:

      猜你喜欢
      • 2012-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-14
      • 2017-02-25
      • 1970-01-01
      • 2017-12-11
      相关资源
      最近更新 更多