明確にするために、私は私の質問から始めます:
RenderMonkey 1.82 の (OpenGL) ストリーム マッピングでTEXCOORD用に設定したカスタム アトリビュート名を(シェーダー コードで) 使用することは可能ですか? それとも gl_MultiTexCoord0 を使用する必要がありますか? (質問はNORMAL の使用法、つまりカスタム名またはgl_Normalにも有効である可能性があります)
バックグラウンド:
RenderMonkey バージョン 1.82 を使用します。ストリーム マッピングを使用して一般的な頂点属性「位置」(およびおそらく「法線」) をマッピングすることに成功しましたが、テクスチャ座標が正しく転送されていないようです。シェーダー コードには、#version 330 と GLSL の "in" 修飾子を使用します。RM はシェーダー自体をコンパイルしない (OpenGL ドライバーはコンパイルする) ため、これで問題ありません。
.obj ファイルと .3ds ファイル (blender からエクスポート) の両方を試しました。波面の .obj ファイルを確認すると、頂点の位置と法線だけでなく、すべてのテクスチャ座標情報がそこにあります。
それが不可能な場合は、ストリーム マッピングが壊れており、ストリーム マッピング エディタで変数に名前を付けても意味がありません (機能する頂点位置ストリームを除いて)。とにかく組み込み変数を使用する必要があるためです。
更新: 非推奨の組み込み変数を使用する場合は、シェーダーで互換モードを使用する必要があります。
#version 330 compatibility
out vec2 vTexCoord;
そして、メイン関数では:
vTexCoord = vec2(gl_MultiTexCoord0);
(現在、法線のストリーム マッピングについてもよくわかりません。テクスチャ座標が機能するようになるとすぐに、通常の問題が発生し、gl_Normal に戻す必要がありました。)
これは実用的なソリューションの写真ですが、組み込み変数を使用しています(はい、写真のコメント付きのtexcoord変数はストリームマッピングダイアログと同じ名前ではありませんが、使用しようとしたときは同じ名前でしたそれでOKです。):