天儿真好!
假设我在窗口中用其整数值表示鼠标单击(窗口可调整大小),因此其域将为(0,0) - > (current_width,current_height)。有没有一种简单的方法可以“标准化”或将鼠标单击位置转换为OpenGL域中的顶点? R ^ 2中的一个点,域[-1,1] ^ 2?
例如:如果窗口的当前宽度和高度分别为400和600,我点击400,600,我想轻松将其转换为[1,-1]。
OpenGL中是否存在此功能,还是我必须自己编写该功能?
干杯。
答案 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)
,而不是如图所示。