我正在为这个项目使用 SDL 和 OpenGL。我在程序启动时的屏幕是 640 x 480,我的 glOrtho 设置也是如此。所以程序开始同步。但是我的程序允许用户使用鼠标创建选择要放大的显示部分。例如,用户可以选择从 320,240 (_mouseStart) 到 640,480 (_mouseEnd) 的区域。然后将此选择区域传递给 glOrtho,以便它可以居中并放大所选区域。我的问题是当我尝试选择一个已经放大区域的区域时,因为 SDL 鼠标坐标在 0,0 到 640,480 的范围内,而不是选择的新区域,在这种情况下是 320、240 到 640,480。我需要一种方法来计算尝试选择并已放大区域时的实际鼠标位置。
我无法在这里发布图片,但我在 gamedev.net 上创建了一个帖子,如果您需要更多信息,可以参考。http://www.gamedev.net/topic/636257-opengl-2d-selection-scaling-multiple-times/
这是我在用户选择一个区域后计算所有鼠标位置的地方(现在是正确的)
// modify mouse coordinates to fit scaled image
_mouseStart.x = ((_mouseStart.x / SCREEN_WIDTH) * (_portionEnd.x - _portionStart.x)) + _portionStart.x;
_mouseStart.y = ((_mouseStart.y / SCREEN_HEIGHT) * (_portionEnd.y - _portionStart.y)) + _portionStart.y;
_mouseEnd.x = ((_mouseEnd.x / SCREEN_WIDTH) * (_portionEnd.x - _portionStart.x)) + _portionStart.x;
_mouseEnd.y = ((_mouseEnd.y / SCREEN_HEIGHT) * (_portionEnd.y - _portionStart.y)) + _portionStart.y;
这是我将 glOrtho 重置为居中并显示所选区域的方法。
glLoadIdentity();
glOrtho(_portionStart.x, _portionEnd.x, _portionEnd.y, _portionStart.y, 1, -1);