プログラムでズームするために 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() を元のスケールに戻したい場合は、計算がないため丸めエラーが発生しません。行われています。
以前のサイズをスタックなどのどこかに保存し、それを使用します。
(以前のズーム、パン、回転の設定に戻る遷移をアニメーション化するのは、ズームするよりもかなり楽しいです)