我正在爲此項目使用SDL和OpenGL。我的程序啓動時的屏幕是640 x 480,我的glOrtho設置也是如此。所以程序開始同步。但是我的程序允許用戶使用鼠標的一部分顯示來放大。例如,用戶可以選擇從320,240(_mouseStart)到640,480(_mouseEnd)的區域。然後將此選擇區域傳遞給glOrtho,以便它可以居中並放大到所選區域。我的問題是當我嘗試選擇已放大區域的區域時,因爲SDL鼠標座標的範圍是從0,0到640,480而不是所選的新區域,在這種情況下,這個區域是320,240到640,480。我需要一種方法來計算試圖選擇和已經放大區域時真實的鼠標位置。將SDL窗口位置轉換爲OpenGL世界位置
我無法在此發佈圖片,但是我在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);
感謝詳細的例子,但我試圖以相反的方式。我試圖從非縮放的x和y座標計算縮放的x和y座標應該是什麼。換句話說,我試圖計算藍色座標的綠色座標和綠色座標的紅色座標。 – arnm
嗯,你確定你瞭解我的照片嗎?我認爲我在左上角的x座標上犯了一個錯誤,因爲120是小的。但是,如果你看看右下角。 '(564,392)'是你得到的絕對鼠標位置(從'0,0'到'640,480')。 '330,186'是相對於綠色矩形的座標,'558,274'是您可以用來計算新視口的座標。 – micha
所以紅色的座標是絕對的鼠標座標。因此,我們首先將顯示寬度乘以選擇寬度,然後除以絕對鼠標x座標以獲得與放大圖像相對應的x座標。我們使用該新的x座標,併爲其添加當前放大選擇的開始x座標值。我們也爲y值做這個,應該是這樣。對? – arnm