1

数人の友人と私は小さなアニメーション セグメントをコーディングしようとしています。そこで、「プレイヤー」が放棄された鉱山をカートで移動する、ある種のホラー ハウス ツアーを作成することは、良い、まだやや単純なプロジェクトであると判断しました。

円や直線を作るのはちょっとつまらないので、「ちょっと」複雑なモーションを作ることにしました。移動するパスとして機能する単純な頂点ストリップを使用して .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 つの小さな問題があります。

  1. 頂点ストリップを使用しているため、法線を割り当てることができません。gluLookAt() で使用する法線を計算する方法はありますか?
  2. オブジェクトをレンダリングするとき、それを頂点リストの頂点に変換し、そのルックアットを行の次の頂点に割り当てます。ただし、これにより、.obj の頂点が必ずしも正しいとは限らないという問題が発生します。それらを注文する方法はありますか?それぞれの頂点に最も近い頂点を計算し、バブル ソートのようなソートを実行できると考えました。しかし、もっと簡単にできるでしょうか?
4

1 に答える 1

0
  1. vn はトップのみを示すことができます => vn は (0,0,1);gluLookAt upベクトルの計算に使用するsideベクトル内: side=forward X up.
  2. これは適切な方法かもしれません。実行時に順序を設定しないでください。
于 2012-12-03T02:55:39.540 に答える