茂加部珈琲店

主にtech関連のメモ置き場です

単純な三角メッシュ

はてなのマークダウンの練習
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は奥が深いですね.