从window到opengl坐标系直观讲解

Posted

技术标签:

【中文标题】从window到opengl坐标系直观讲解【英文标题】:From window to opengl coordinate system intuitive explanation 【发布时间】:2014-11-06 21:30:26 【问题描述】:

当使用鼠标功能时,我试图了解从窗口坐标轴(原点左上角)到OpenGL 坐标轴(原点左下角)的映射。在相关书籍中,这张地图由以下两行描述:

points[count].x = (float) x / (w/2) - 1.0;
points[count].y = (float) (h-y) / (h/2) - 1.0;

我怀疑这两条线描绘了一个比例。您能否对这张地图进行直观的数学解释?

【问题讨论】:

天使的书。 【参考方案1】:

你指的是什么书? NDC 空间中的原点是视口的中心(0,0 是中心;-1,-1 是左下角;1, 1 是右上角)。任何其他坐标空间都由您的投影矩阵定义。

我相信这本书试图告诉你的是 NDC-1,-1 是你视口的左下角,而 NDC1,1 是右上角。

更完整的映射将包括视口的 X 和 Y 位置:

NDCX = (2.0 * (屏幕X - 视口X) / 视口W) - 1.0 ;

NDCY = (2.0 * (屏幕Y - 视口Y) / 视口H) - 1.0 ;

This mapping 如下图(右侧方块为视口):

  

您当然需要额外的步骤,因为 Y 轴在鼠标坐标系中的运行方向相反。这就是为什么您在映射中看到 Y 轴翻转的原因 h-y

【讨论】:

以上是关于从window到opengl坐标系直观讲解的主要内容,如果未能解决你的问题,请参考以下文章

openGL坐标系

OpenGL植物建模(附完整代码注释清晰分步讲解)

OpenGL植物建模(附完整代码注释清晰分步讲解)

OpenGL植物建模(附完整代码注释清晰分步讲解)

OpenGL学习笔记之坐标变换学习

OpenGL ES总结OpenGL坐标变换之平移及旋转