1

簡単な質問があります。

私はMinecraftmodに取り組んでおり、glOrtho()を介して設定された恐ろしい外観のスケーリングを無効にし、ピクセル化されていない素敵な文字列を描画できるように独自のスケーリングセットを指定する必要があります。Minecraftを見たことがあれば、フォントはひどいものに見えます。

私のmodでは、Slick(2D JavaゲームAPI)を使用して文字列をレンダリングし、フォントをロードしています。Slickを正しく設定し、メニューにフォントが適切に描画されるのを見てきました。唯一の問題は、行列のリセットで...

GL11.glMatrixMode(GL11.GL_PROJECTION);      // Select Projection
GL11.glPushMatrix();      // Push The Matrix
GL11.glLoadIdentity();        // Reset The Matrix
GL11.glOrtho(0, Minecraft.getMinecraft().displayWidth,                 Minecraft.getMinecraft().displayHeight, 0, 3000.0D, -3000.0D);
GL11.glMatrixMode(GL11.GL_MODELVIEW);  // Select Modelview Matrix
GL11.glPushMatrix();    // Push The Matrix
GL11.glLoadIdentity();    // Reset The Matrix

以前の関数で設定された変換とスケールを失います。(私が書いたことがないもの)

このゲームの作成者であるMojangによってすでに作成されたソースから、現在のスケール係数を非常に簡単に取得できます。マトリックスをリセットする前にスケールと通常を取得できれば、これらの文字列を1対1のピクセルスケールで適切にレンダリングできる(最適な表示解像度を提供する)チャンスがあることを期待しています。

つまり、結論:LWGLで翻訳とスケールの情報を取得するにはどうすればよいですか?または、私の状況を考えると、これを行うためのより良い方法はありますか?

4

1 に答える 1

0

あなたはマトリックスをプッシュしています。glPopMatrix()これにより、スタックがオーバーフローしないように、これと同じ量の呼び出しのバランスを取る必要があります。各glPushMatrix glPopMatrixペアは、「中括弧」のセットのように機能します。glPopMatrix前と同じようにスタックのマトリックス状態を閉じた後、対応する呼び出しglPushMatrixが復元されます。

でも!OpenGLはシーングラフではなく、マトリックススタックは「現在の位置」または「現在のスケーリング」を定義しません。これは、モデル空間からアイスペース(modelviewマトリックス)への変換、およびアイスペースからクリップスペース(プロジェクション)への変換を定義します。それだけでなく、それ以上のことは、行列が行うことです。シーンもオブジェクトもありません。OpenGLの位置などに関する内部ストレージもありません。したがって、OpenGLに関するアイデアを少し調整する必要があると思います。

于 2012-11-28T20:54:51.990 に答える