単純な三角メッシュ
はてなのマークダウンの練習
CGの入門書に書いてあるようなやつです
メッシュ構造
メッシュ構造は3DCGで利用される3Dモデルの表現法です.
ここでは、シンプルなobjファイルで使われるような、頂点+三角形
で構成されるメッシュ構造を書いてみました
template <typename T> struct Vertex{ //頂点 //...コンストラクタなど...// tvec3<T> position; //位置座標 }; template <typename T> struct Face{ //面 //...コンストラクタなど...// std::shared_ptr<Vertex<T>> verticies[3]; //三頂点へのポインタ tvec3<T> normal; //法線 }; template <typename T> struct Mesh{ //メッシュ //...コンストラクタなど..// std::vector<std::shared_ptr<Vertex<T>>> verticies; //頂点へのポインタリスト std::vector<std::shared_ptr<Face<T>>> faces; //面へのポインタリスト };
各面はその三角形を構成する3頂点へのポインタを持ちます.
ついでに法線まで計算する気まんまんですが、不要な場合はなくても良いですね.
関数を全部削ってしまいましたが、簡単なので.
リソース開放はshared_ptr
とかに任せちゃうのがナウなヤングのやり方じゃないでしょうか.
もっと複雑なハーフエッジ構造などは少し凝った構築をしないといけなくて大変で、それに対する最適化手法も色々あります.
CGは奥が深いですね.