我正在为该项目使用SDL和OpenGL。程序启动时的屏幕为640 x 480,glOrtho设置也是如此。因此,程序开始同步。但是我的程序允许用户使用鼠标来缩放显示的一部分来创建选择。例如,用户可以从320,240(_mouseStart)到640,480(_mouseEnd)中选择区域。然后将该选择区域传递到glOrtho,以便它可以居中并放大到所选区域。我的问题是当我尝试选择一个已经放大的区域时,因为SDL鼠标坐标的范围是从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);

最佳答案

我创建了一张解释该过程的图像(希望如此)

  • 蓝色矩形是您的(未缩放)基本视口(viewport)。
  • 绿色小矩形是在基本视口(viewport)
  • 中选择的区域
  • 绿色的大矩形是新的缩放视口(viewport)
  • 在缩放的视口(viewport)中,一个新的矩形被选中(红色的)

  • 红色矩形处的红色坐标是您应该从鼠标位置获得的坐标。您可以使用此坐标来计算当前缩放的视口(viewport)的值(绿色坐标)。要获得最终未缩放的坐标(蓝色值),您必须添加绿色矩形的偏移量(228,88)。

    请注意,我的示例不是最佳示例,因为绿色矩形的偏移量和绿色矩形的高度相同(两个值均为228)

    10-08 07:56
    查看更多