3

ゲームを逆にして、GLDebuggerを使用してどのように機能するかを確認しようとしています。765x553の場合のウィンドウサイズ。

Texture2D184は次のようになります。 ここに画像の説明を入力してください

Texture2D203は次のようになります。

ここに画像の説明を入力してください

コードの結果は次のとおりです(ドル記号と感嘆符は無視してください)。 ここに画像の説明を入力してください

その背後にあるコードは次のとおりです。

glEnable(GL_SCISSOR_TEST)
glScissor(516, 335, 249, 168)
glEnable(GL_SCISSOR_TEST)
glScissor(550, 341, 154, 154)
glDisable(GL_TEXTURE_RECTANGLE)
glEnable(GL_TEXTURE_2D)

glBindTexture(GL_TEXTURE_2D, 184)
glActiveTextureARB(GL_TEXTURE1)
glEnable(GL_TEXTURE_RECTANGLE)
glBindTexture(GL_TEXTURE_RECTANGLE, 203)
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, 7681)
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, 8448)
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, 34168)
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, 768)

glBegin(GL_QUADS)
glColor3f(1, 1, 1)
glMultiTexCoord2fARB(GL_TEXTURE0, 0, 1)
glMultiTexCoord2fARB(GL_TEXTURE1, -194.55215, 353.57529)
glVertex2f(355.44785, -141.57529)
glMultiTexCoord2fARB(GL_TEXTURE0, 0, 0)
glMultiTexCoord2fARB(GL_TEXTURE1, -212.4122, -194.13358)
glVertex2f(337.5878, 406.13358)
glMultiTexCoord2fARB(GL_TEXTURE0, 1, 0)
glMultiTexCoord2fARB(GL_TEXTURE1, 335.29663, -211.99362)
glVertex2f(885.29663, 423.99362)
glMultiTexCoord2fARB(GL_TEXTURE0, 1, 1)
glMultiTexCoord2fARB(GL_TEXTURE1, 353.15674, 335.71524)
glVertex2f(903.15674, -123.71524)
glEnd()

このような大きな地図がどのように小さなものに変わるのか知りたいので、上記のコードが何をするのか知りたいです:S

誰かがそれを分解したり、これらの画像や別の画像などを使って説明したりできますか?

4

1 に答える 1

1

認識しておくべき重要なことは、非常に簡単に言えば、このコードが行うのは、立っている領域を「はさみ」で切り取り、それに円形フィルターを適用してから、画面に描画することだけです。

glScissorコマンドを使用するには、glEnableが必要です。彼らがそれを有効にして2回続けて使用する理由は私を超えています。私が理解していることから、このコードで有効にして使用する必要があるのは1回だけです。

次に、メインテクスチャがGL_TEXTURE_2Dにバインドされ、小さい方のテクスチャがGL_TEXTURE_RECTANGLEにバインドされていることがわかります。フィルタとして使用されているGL_TEXTURE_RECTANGLEが、特定のものを組み合わせ、他のものでソースとオペランドを使用することにより、正しい結果を生成するように、いくつかの環境フラグが設定されます。

glBeginに入ると、実際に画面に描画し始めます。glEndは、画面への描画の終了を意味します。

于 2012-11-19T03:52:51.657 に答える