0

ダイスロールをシミュレートするアプリを作成しようとしていますが、現時点ではすべて正常に動作しています。ユーザーがサイコロを選択したときにシェーダーを追加しようとすると、選択したサイコロの周りにアウトラインが配置されます。これを行う方法は、特定のサイコロをわずかに拡大して完全に黒くレンダリングし、その上にテクスチャ付きのサイコロを描画して、輪郭があるように見せることです。

私が抱えている問題は、オブジェクトを黒く描画するためのシェーダーが最初に適用されたとき、黒いサイコロをうまく描画しますが、テクスチャ付きのサイコロをその上に描画しようとすると、間違った場所に描画し、間違ったものを描画することですサイコロ。奇妙なことに、画面上の他のサイコロの 1 つの中に描画されます。

同じシェーダーをオブジェクトに 2 回適用すると、すべてがその特定のシェーダーの想定どおりに描画されます (アウトライン シェーダーのためにすべてが黒くなるか、通常のシェーダーからすべてのテクスチャとライトが適用されます)。同じモデル、うまくいかない。

このクラスは頂点などをロードし、オブジェクトを描画します: http://pastebin.com/N5aYAtBC

このクラスはシェーダーを管理します: http://pastebin.com/0bT7ABRu

問題とは何の関係もないと思われる多くのコードを省略しましたが、さらに必要な場合はコメントを残してください

そして、別のサイコロをクリックすると、これが起こります(最初の写真は正常です): http://imgur.com/a/ikZVX

4

1 に答える 1

4
glUniformMatrix4fv(toon_mvp, 1, 0, modelViewProjectionMatrix.m);
glUniform4fv(toon_outline, 1, oc);
glUseProgram(Toon);

制服の扱いが悪いと思います。例として、ソースからこのスニペットを引き出しました。

ユニフォームをアップロードすると、現在バインドされているプログラムにのみ影響します (各プログラムには、ユニフォームの独自の内部ストレージがあります)。

'toon_mvp' と 'toon_outline' がプログラム 'Toon' で利用できることを期待している場合、それらは利用できません。変更するプログラムを最初にバインドし、バインド後にユニフォームを変更する必要があります。この順序は逆ではありません。

おそらく、コードの他の場所でもこれを修正する必要があります。

于 2012-08-31T01:18:27.670 に答える