从视口坐标转换为 [-1,1]^2 顶点 [OpenGL]
Posted
技术标签:
【中文标题】从视口坐标转换为 [-1,1]^2 顶点 [OpenGL]【英文标题】:Converting from Viewport Coordinates to [-1,1]^2 Vertex [OpenGL] 【发布时间】:2015-11-09 08:31:47 【问题描述】:生日快乐!
假设我在窗口中有一个由整数值表示的鼠标点击(窗口可调整大小),所以它的域将是 (0,0) - > (current_width, current_height)。是否有一种简单的方法可以“规范化”或将此鼠标单击位置转换为 OpenGL 领域中的顶点?即 R^2 中具有域 [-1,1]^2 的点?
例如:如果窗口的当前宽度和高度分别为 400 和 600,并且我点击了 400,600,我想轻松地将其转换为 [1,-1]。
此功能是否存在于 OpenGL 中,还是我必须自己编写该功能?
干杯。
【问题讨论】:
【参考方案1】:您必须自己编写函数,但这很简单:
x_ogl = 2.0 * (x_mouse - width / 2) / width
y_ogl = -2.0 * (y_mouse - height / 2) / height
第二个公式中的否定是将鼠标/屏幕坐标中的“+ve Y down”转换为“+ve Y up”的更正常的笛卡尔。
此外,在 X 和 Y 坐标之间保持 1:1 的纵横比会更常规,其中较大的轴保持范围 [-1, 1],而较小的轴具有较小的范围。
如果这是您真正喜欢的,则在上面的两个表达式中将外部除法的右侧替换为 max(width, height)
,而不是如图所示。
【讨论】:
我认为它最终必须有所不同。我最终得到:x_ogl = 1+ (x_mouse-width)*2/width
和 y_ogl =-1* ( (y_mouse-height)*2/height)+1)
不过谢谢。您的建议促使我解决了这个问题。
@AggressiveSneeze。我给出的方程式应该没问题 - 请参阅 jsfiddle.net/8onndhuw/2 以获得(javascript)演示以上是关于从视口坐标转换为 [-1,1]^2 顶点 [OpenGL]的主要内容,如果未能解决你的问题,请参考以下文章
窗口调整大小后将鼠标位置转换为 2D openGL 中的世界坐标
我的OpenGL学习进阶之旅介绍一下OpenGL ES的图元装配:坐标系统透视分割视口变化