从视口坐标转换为 [-1,1]^2 顶点 [OpenGL]
Converting from Viewport Coordinates to [-1,1]^2 Vertex [OpenGL]
你好!
假设我在 window 中用它的整数值表示鼠标单击(window 可以调整大小),所以它的域将是 (0,0) - > (current_width, current_height).有没有一种简单的方法可以 'normalise' 或将此鼠标单击位置转换为 OpenGL 土地中的顶点?即 R^2 中域为 [-1,1]^2 的点?
例如:如果 window 的当前宽度和高度分别为 400 和 600,我点击了 400,600,我想轻松地将其转换为 [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)
代替外除法的右侧,而不是如图所示。
你好!
假设我在 window 中用它的整数值表示鼠标单击(window 可以调整大小),所以它的域将是 (0,0) - > (current_width, current_height).有没有一种简单的方法可以 'normalise' 或将此鼠标单击位置转换为 OpenGL 土地中的顶点?即 R^2 中域为 [-1,1]^2 的点?
例如:如果 window 的当前宽度和高度分别为 400 和 600,我点击了 400,600,我想轻松地将其转换为 [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)
代替外除法的右侧,而不是如图所示。