沿预定义路径移动对象

时间:2012-12-02 23:23:18

标签: opengl c++-cli glulookat

我和几个朋友正试图编写一个小动画片段。因此,我们认为一个好的,仍然有点简单的项目将是进行某种恐怖之旅,其中“玩家”在一辆废弃的矿井中的购物车中旅行。

由于制作圆圈和直线有点无聊,我们决定制作一个“稍微”更复杂的动作。我们推断我们可以导入一个带有简单顶点条的.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);
    }
}
}

但我有两个小问题:

  1. 由于我使用顶点条,我无法为它们分配法线。有没有办法计算使用gluLookAt()的法线?
  2. 当我渲染对象时,我将其转换为我的vert List中的顶点,并将其lookat分配给该行中的下一个顶点。然而,这带来了我的.obj中的顶点不一定按顺序的问题。有没有办法订购它们?我推断我可以计算哪个是最接近每个顶点的顶点并进行冒泡排序排序。但它可以更容易吗?

1 个答案:

答案 0 :(得分:0)

  1. vn只能表示top =&gt; vn可能是(0,0,1);在gluLookAt up向量中用于计算side向量:side=forward X up
  2. 这可能是适当的方法。不要在运行时设置顺序。