質問
プログラムでズームするためにglScalef()を使用していますが、コードで元のサイズに戻しています:
glScalef(1.0f/ZOOM, 1.0f/ZOOM, 1);
高倍率ズームではうまく機能しません...(小数点が失われたためでしょうか?)
上記のような計算をせずに元のサイズに完全に戻すにはどうすればよいですか?
解決
次のようにすることができます:
ZOOMSQRT = sqrt(ZOOM);
glScalef(1.0f/ZOOMSQRT, 1.0f/ZOOMSQRT, 1);
glScalef(1.0f/ZOOMSQRT, 1.0f/ZOOMSQRT, 1);
またはglPushMatrix / glPopMatrixを使用して、ズームする前に元のマトリックスを復元します。
glPushMatrix();
glScalef(ZOOM, ZOOM, 1);
[do whatever you like here...]
glPopMatrix(); // now it's at normal scale again
[do other things here...]
他のヒント
投影行列を保存するだけです。 glPushMatrix()、glScalef()、...、glPopMatrix()
最初のglScalef()の前にglPushMatrix()を使用して現在のモデル行列をスタックにプッシュし、元のスケールに戻したい場合はglPopMatrix()を使用します。このように丸めエラーはありません計算は行われていません。
以前のサイズをスタックなどに保存して、それを使用します。
(前のズーム、パン、回転の設定に戻るトランジションをアニメーション化することは、ズームするよりもかなり楽しいです)
所属していません StackOverflow