代码之家  ›  专栏  ›  技术社区  ›  twerdster

一般动画问题

  •  1
  • twerdster  · 技术社区  · 14 年前

    (仅仅是为了设定场景,尽管它与问题并不特别相关:我在iphone上使用opengl es)

    他们会:

    !c) 我假设没有人会实际存储30个模型的同一个对象,然后只是提出这些,除非它是一个非常低的多元数模型?还是我错了? 三维动画的最佳对象格式是什么?

    任何其他关于技术、机制等的建议/提示将非常感谢!

    1 回复  |  直到 14 年前
        1
  •  6
  •   Tommy    14 年前

    你的想法基本上是对的。有两种主要的方法,骨骼和非骨骼,都倾向于提供关键帧。

    对于非骨骼动画,您可能会获得10帧动画,例如,在行走时绘制,以及从一帧到下一帧所需的时间。所以它是二维像素精灵工作方式的精确的三维模拟。您可以计算出当前可见的帧,也可以应用粗花呢。如果你知道你在一个顶点位于V1的帧和一个顶点位于V2的帧之间,你可以将它定位在V1和V2之间的中间。所以你线性插值帧之间的所有顶点位置。这看起来比仅仅在帧中轻弹要平滑一些,但确实会稍微扭曲几何体,因此您仍然需要使帧具有合理的密度。

    要将实际几何体放置在骨骼上,每个顶点都与多个骨骼中的一个相关联。你给它一个对每个骨骼的加权附着,例如,下臂上的顶点可能100%附着在下臂骨骼上,面向肘部的顶点可能80%附着在下臂骨骼上,20%附着在上臂骨骼上。可以使用每个相关骨骼将顶点转换到的位置的加权和来获得实际顶点位置。这样你可以得到相当好的关节(尽管,通常使用比我的简单解释更复杂的骨架)。

    用iPhone的术语来说,在ES 1.x下,你很可能不得不在CPU上进行非骨骼tweening,这并不像你想象的那样是一个性能问题,因为PowerVR MBX实际上并没有将顶点缓冲区对象保存在视频RAM中。只要你以一种PowerVR友好格式积累缓冲区(主要是对齐问题,按指定顺序交错位置/纹理坐标/法线等也很有用),那么提交到OpenGL并不比使用顶点缓冲区对象贵多少。

    在支持ES 2.x的设备上,使用顶点着色器可以更好地处理非骨骼粗花呢。这将允许您使用顶点缓冲区对象并计算出GPU上的位置。由于ES 2.x硬件支持将顶点缓冲区对象推送到GPU上进行全面管理,这是一个巨大的胜利。