从视口坐标转换为[-1,1] ^ 2顶点[OpenGL]

时间:2015-11-09 08:31:47

标签: c++ opengl graphics viewport vertices

天儿真好!

假设我在窗口中用其整数值表示鼠标单击(窗口可调整大小),因此其域将为(0,0) - > (current_width,current_height)。有没有一种简单的方法可以“标准化”或将鼠标单击位置转换为OpenGL域中的顶点? R ^ 2中的一个点,域[-1,1] ^ 2?

例如:如果窗口的当前宽度和高度分别为400和600,我点击400,600,我想轻松将其转换为[1,-1]。

OpenGL中是否存在此功能,还是我必须自己编写该功能?

干杯。

1 个答案:

答案 0 :(得分: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),而不是如图所示。