数人の友人と私は小さなアニメーション セグメントをコーディングしようとしています。そこで、「プレイヤー」が放棄された鉱山をカートで移動する、ある種のホラー ハウス ツアーを作成することは、良い、まだやや単純なプロジェクトであると判断しました。
円や直線を作るのはちょっとつまらないので、「ちょっと」複雑なモーションを作ることにしました。移動するパスとして機能する単純な頂点ストリップを使用して .obj をインポートできると考えました。もちろん、このオブジェクトは画面に描画されません。そこで、このパスのインポートを処理する Trayectory クラスを作成しました。パスをインポートするために使用するコードは次のとおりです。
Trayectory::Trayectory(String^ obj)
{
this->vert = gcnew List<Point3D^>();
this->norm = gcnew List<Point3D^>();
StreamReader^ archivo=gcnew StreamReader(obj);
array<String^>^ file = archivo->ReadToEnd()->Split('\n');
archivo->Close();
for each(String^ s in file) {
array<String^>^ str = s->Split(' ');
if(str[0]=="v") {
Point3D^ tmp = gcnew Point3D(Convert::ToSingle(str[1]),Convert::ToSingle(str[2]),Convert::ToSingle(str[3]));
this->vert->Add(tmp);
}
if(str[0]=="vn") {
Point3D^ tmp = gcnew Point3D(Convert::ToSingle(str[1]),Convert::ToSingle(str[2])+1.0,Convert::ToSingle(str[3]));
this->norm->Add(tmp);
}
}
}
ただし、2 つの小さな問題があります。
- 頂点ストリップを使用しているため、法線を割り当てることができません。gluLookAt() で使用する法線を計算する方法はありますか?
- オブジェクトをレンダリングするとき、それを頂点リストの頂点に変換し、そのルックアットを行の次の頂点に割り当てます。ただし、これにより、.obj の頂点が必ずしも正しいとは限らないという問題が発生します。それらを注文する方法はありますか?それぞれの頂点に最も近い頂点を計算し、バブル ソートのようなソートを実行できると考えました。しかし、もっと簡単にできるでしょうか?