我有一个大小为 (475,574) 的窗口。当我使用鼠标单击事件来获取屏幕上的位置时,我得到的范围是(0-475,0-574)。我正在使用 glOrthof(-1.5, +1.5, -1.5, +1.5, 4.0, 15.0) 所以我的问题是如何将通过鼠标事件获得的点转换为 3D openGL 点。
例如-我如何将 (100,200) 转换为 (-1.2,0.234,6)
我有一个大小为 (475,574) 的窗口。当我使用鼠标单击事件来获取屏幕上的位置时,我得到的范围是(0-475,0-574)。我正在使用 glOrthof(-1.5, +1.5, -1.5, +1.5, 4.0, 15.0) 所以我的问题是如何将通过鼠标事件获得的点转换为 3D openGL 点。
例如-我如何将 (100,200) 转换为 (-1.2,0.234,6)
您需要在两个坐标系之间进行转换才能将屏幕坐标转换为世界坐标。
//calculate ratio
widthRatio = 3.0 / width; // 3.0 = total width of viewport
heightRatio = 3.0 / height; // 3.0 = total height of viewport
worldX = (screenX * widthRatio) - 1.5; // subtract 1.5 (half of viewport width) to get origin
worldY = (screenY * heightRatio) - 1.5;
worldX 和 worldY 现在应该是您视口中的适当点。