現時点では、単純な 3D レンダラーを構築しています。レンダラーは、Wavefront OBJ ファイルからオブジェクト情報を読み取ります。ファイルから取得するのは、頂点座標、法線座標、および UV 座標です。OBJ ファイルには、マテリアルに関する情報を保持する MTL ファイルが付属しています。現在行っていることは、glGenBuffers を使用してバッファーを生成することです。
- 頂点バッファ
- ノーマルバッファ
- UV 座標バッファ
- 拡散色バッファ
- スペキュラ カラー バッファ
- アンビエント カラー バッファ
- 透明度バッファ
これらのバッファまたは配列は、各頂点が正しい法線、UV 座標などを持つように並べられています。
私が理解していることから、これは glMultiDrawArrays がデータを配置する方法であり、機能します。これでシーンがレンダリングされ、オブジェクトのマテリアル カラーは正しくなりましたが、テクスチャはまだありません。チュートリアルで見つけた頂点シェーダーとフラグメントシェーダーを使用していることを付け加えておく必要があります。フラグメントシェーダーは色の計算を行います。
ここで、オブジェクトにテクスチャを追加したいと考えています (上記のように、頂点には既に適切な UV 座標があります)。私が最初に考えたのは、最初にテクスチャを持たないすべてのオブジェクトをレンダリングして glMultiDrawArrays から速度の利点を得てから、テクスチャを持つ各オブジェクトを単独でレンダリングすることでした。
しかしその後、fragmentshader が UV 座標を使用して色のテクスチャをサンプリングしていることがわかりました。私の考えでは、自分で UV 座標を使用してテクスチャをサンプリングし、カラー バッファに色を書き込み (頂点の色を UV 座標を持つ頂点のテクスチャの色で上書きします)、これを行うことでシーン全体をレンダリングすることができます。一発。
私はこのトピックに非常に慣れていないので、私の質問は次のとおりです。
どうにかしてフラグメント シェーダーの外側でテクスチャ サンプラーを使用して色情報を取得できますか?
と
私の2番目の質問は、これがそもそもこれを行う完全に間違った方法であり、まだ知らない標準的な方法があるかどうかです。
誰かが私を正しい方向に向けることができれば幸いです。ありがとうございました