だから最近、私はopengl/glslと一般的なシェーダーに最初の真剣な一歩を踏み出しました(少なくとも私はそう思います)。VBO を作成してレンダリングし、シェーダーを作成してコンパイルし、何らかの方法でそれらをいじることができました。頂点シェーダーを使用して、opengl ビューを修正 (アスペクト比を修正) し、アニメーションも実行しています。これは、さまざまなマトリックス操作で実現されます。
なぜアニメーションに頂点シェーダーを使用しているのかと疑問に思う人もいるかもしれませんが、世界中の記事を読んでいると、VBO を常に更新するのではなく、静的な VBO を維持するのが最善であるという印象を受けました。ある種の GPU > CPU の戦い。今、私はそれについて間違っているかもしれないので、私はこの問題について助けを求めてここに手を差し伸べています. それについての私の見解は、将来、(たとえば) プレイヤーがつかむためのたくさんのコインを持つゲームを作成する可能性があり、それらを GPU 側に静的に保存したいと考えています。そして、シェーダーを使用してそれらを回転させます。
先に進みます..「光がありますように」。
また、頂点シェーダーで法線を使用して照明を再現することもできました。私の立方体で光が回転することを除いて、すべて正常に機能しました(現在、立方体をテストダミーとして使用しています)。今、私はここで何が悪いのか知っています。それは絶対にすべてを変換する私の頂点シェーダーです(私の光源でさえも)。そして、この問題を解決する方法について、1 つまたは 2 つの方法を考えることができます。1 つは、光源に逆負の変換力を適用して、他のすべてが回転するときに静的に保つことができるようにすることです。
そして、ここですべてがぼやけます。前進する方法についてのガイダンスを求めて、スタックオーバーフローに到達しました。私はある意味でより大きく考えようとしています: 将来、基本的なアニメーション (回転、スケーリング、移動など) を実行したいオブジェクトがたくさんあるとしたらどうでしょうか。それには、さまざまなシェーダー、またはすべての機能が含まれたパックされたシェーダーが必要になるでしょうか。そして、これをどのように使用するのでしょうか。すべてのオブジェクトが同じシェーダー内でレンダリングされる前に、異なる値を渡しますか?
今、正直に言うと、私は照明の問題を処理したいと思っています。しかし、私がこれにアプローチしようとしている方法は、一般的なアニメーションのシェーディングにおける私の一般的なアプローチを設定すると感じています。ある人は (ここでは別の質問のスタックオーバーフローで) 異なるシェーダーを実際に使用し、すべての VBO レンダリングの前にそれらを交換する必要があることを提案しました。私はそれが十分に効率的であるかどうかについて懸念を持っていますが、私は間違いなくそのアイデアが好きです.