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


G'day!

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

例如:如果当前窗口的宽度和高度分别为400和600,并且我点击了400600,我想很容易地将其转换为[1,-1]。

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

干杯。

您必须自己编写函数,但它很琐碎:

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)代替外部除法的右手边,而不是如图所示。

最新更新