Opengl es 对于OpenGL ES 2.0中任意数量的转换,在哪里计算模型和视图矩阵?

Opengl es 对于OpenGL ES 2.0中任意数量的转换,在哪里计算模型和视图矩阵?,opengl-es,opengl-es-2.0,game-engine,Opengl Es,Opengl Es 2.0,Game Engine,我正在用OpenGLES2.0编写一个小型2D游戏引擎。它可以工作,但是对于中等大小的场景,它现在感觉有点迟钝。我设计它是为了让每个游戏对象都是一棵节点树,每个节点都是一个基本形状(三角形、正方形、圆形)。每个节点都可以在创建时和运行时应用任意一组转换 举例来说,“head”节点是一个圆,它有一个子“hat”节点,该节点是一个三角形,通过平移变换将其移动到圆的顶部。现在,在运行时,我可以通过头部的动画平移变换来移动头部,帽子也随之移动。或者,我可以通过在帽子上应用旋转变换,在运行时动态地设置“帽

我正在用OpenGLES2.0编写一个小型2D游戏引擎。它可以工作,但是对于中等大小的场景,它现在感觉有点迟钝。我设计它是为了让每个游戏对象都是一棵节点树,每个节点都是一个基本形状(三角形、正方形、圆形)。每个节点都可以在创建时和运行时应用任意一组转换

举例来说,“head”节点是一个圆,它有一个子“hat”节点,该节点是一个三角形,通过平移变换将其移动到圆的顶部。现在,在运行时,我可以通过头部的动画平移变换来移动头部,帽子也随之移动。或者,我可以通过在帽子上应用旋转变换,在运行时动态地设置“帽尖”的动画

在渲染时,每个节点对每个父节点应用自己的静态变换(帽子向上移动),然后应用任何动态变换(帽子尖端),依此类推。每个节点有三个矩阵,另外每个应用的动态动画有三个矩阵。对于深树来说,这会增加很多矩阵运算

如果可能的话,将其推送到GPU似乎是一件好事,但由于动画是动态应用的,我不知道为了编写着色器来处理它,每个节点将经历多少次变换。我是OpenGLES2.0和游戏引擎设计的新手,不知道所有的限制

我的问题是

  • 我是否完全不符合“好”的游戏引擎设计
  • 这确实是CPU或GPU的任务吗
  • 是否可以编写OpenGL 2.0 ES着色器来处理符合我的“对象树”设计和运行时应用动画矩阵的任意数量的变换

  • 将转换层次计算移到GPU是个坏主意。着色器在每个基本体/每个顶点/每个片段级别上操作。因此,您将对绘制的每个顶点执行这些计算。效率不高

    你应该真正优化你制作动画的方式。例如,每个节点不需要3个矩阵。一个矩阵包含整个变换。每4×4矩阵乘法涉及64个浮点乘法。那么你已经64岁了⁴ 每个节点的乘法。别说了

    优化动画系统的一个好方法是分离单个参数。使用四元数进行旋转;四元数只进行8次标量乘法,将平移存储为3个向量,与缩放相同。然后由这些部分组成单个变换矩阵。可以将四元数直接转换为3×3的左上部分,描述旋转,使用缩放向量作为列上的因子。译文排在第四行。元素4,4是1