このプロジェクトではSDLとOpenGLを使用しています。プログラム起動時の画面は640x480で、glOrthoの設定も同様です。したがって、プログラムは同期して開始されます。しかし、私のプログラムでは、ユーザーはディスプレイの一部のマウスを使用して選択範囲を作成し、ズームインすることができます。たとえば、ユーザーは320,240(_mouseStart)から640,480(_mouseEnd)までの領域を選択できます。次に、この選択領域がglOrthoに渡され、選択した領域を中央に配置してズームインできるようになります。私の問題は、SDLマウス座標が選択された新しい領域(この場合は320、240から640,480)ではなく、0,0から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);