このクラスのインスタンスを glUniformMatrix に渡すことができるように、C++ カスタム マトリックス クラスを作成することは可能ですか? つまり、このクラスのインスタンスを頂点シェーダーに渡します。
この質問をするのは、コンピューター グラフィックスのコースを受講したときに、opengl および glsl シェーダー プログラミングのコード スケルトンが与えられたからです。コード スケルトンには、mat4 という名前のカスタム C++ 行列クラスがありました。このクラスには、多くのメソッドとユーザー定義のコンストラクターが含まれていました。ただし、glUniformMatrix へのパラメーターとして使用される mat4 のインスタンスと、このインスタンスは、頂点シェーダーで mat4 型に正しく変換されます。
将来的には、 GLM ライブラリを使用して、opengl コードと頂点/フラグメント シェーダーの間のインターフェイスを作成したいと考えていますが、glUniformMatrix に渡すことができるデータ型のルールとセマンティクスを理解したいので、この型のインスタンスが正しくなります。頂点シェーダーで均一の mat4 に変換されます。
この動作の鍵は演算子を定義することだと思います
operator GLfloat* ();
operator const GLfloat* () const;
行列データ構造の先頭に戻りstatic_cast<const GLfloat*>(...)
、すべての行列を列ごとに指すようにします。これは、GLMライブラリがどのように機能するかの大まかな流れですか?