おそらく簡単な数学の問題があり、それを理解するのに驚くほど苦労しています。サイズ変更可能な LWJGL (OpenGL) ウィンドウがあります。私が作成しているゲームは 2D ですが、glFrustum() を使用してスプライトの深度を取得しています。私の投影コードからの(少し簡略化された)スニペットは次のとおりです。
double divider = 64.0;
double left = -vw / divider;
double right = vw / divider;
double bottom = vh / divider;
double top = -vh / divider;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(left * aspect, right * aspect, bottom, top, 8, 65536);
float zModifier = -256;
float vRatio = Game.HEIGHT / Display.getHeight();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(-vw / 2.0f, -vh / 2.0f, zModifier * vRatio);
(私は錐台ビットをよく理解していないことを認めなければなりません。インターネットのどこかでこのコードを見つけて、うまく機能しました...)
ただし、スプライトで独自のカーソルをレンダリングしており、カーソルがウィンドウの境界に接触するとネイティブ カーソルに切り替わります。ウィンドウのサイズを変更できるようにするまで、これはすべてうまくいきました。
今私の問題は、ウィンドウのサイズを変更すると、ネイティブカーソルがvRatio
. サイズ変更されたウィンドウサイズに応じて、少し、またはもう少し「ジャンプ」します。
スプライト カーソルが境界線に接触したら、次のようにします。
- スプライトカーソルを隠す
- ネイティブ カーソルを表示する
- ネイティブ カーソルの位置をスプライト カーソルの位置に設定します(これは正しく機能しなくなりました)
これには簡単な数学的な解決策があるように感じますが、それを理解することはできません(私は試しました...しかし..)。
私の質問が曖昧すぎず、十分な情報を提供したことを願っています!