【问题标题】:Moving an object along a predefined path沿预定义路径移动对象
【发布时间】:2012-12-02 23:23:18
【问题描述】:

我和几个朋友正在尝试编写一个小的动画片段。所以,我们决定一个不错的而且还是有点简单的项目是制作某种恐怖屋之旅,其中“玩家”乘坐手推车穿越废弃的矿井。

由于制作圆和直线有点无聊,我们决定制作一个“稍微”更复杂的动作。我们推断我们可以导入一个带有简单顶点条带的 .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. 当我渲染对象时,我将它转换为我的顶点列表中的一个顶点,并将它的lookat 分配给该行中的下一个顶点。然而,这带来了我的 .obj 中的顶点不一定有序的问题。有没有办法订购它们?我推断我可以计算出最接近每个顶点的顶点并进行类似冒泡排序的排序。但这会更容易吗?

【问题讨论】:

    标签: opengl c++-cli glulookat


    【解决方案1】:
    1. vn只能表示顶部=>vn可能是(0,0,1);在gluLookAtup向量中用于计算side向量:side=forward X up
    2. 这可能是合适的方法。不要在运行时设置顺序。

    【讨论】:

      猜你喜欢
      • 2011-09-03
      • 2011-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-13
      相关资源
      最近更新 更多