Opengl es 仅旋转部分顶点?

Opengl es 仅旋转部分顶点?,opengl-es,rotation,opengl-es-2.0,Opengl Es,Rotation,Opengl Es 2.0,我正在将OpenGL渲染器添加到我的2D游戏引擎中,我想知道是否有一种方法可以在单个绘制调用中将mvp矩阵仅应用于部分顶点 我计划按纹理分组绘制调用,因此我将传递一个包含许多顶点和texcoords的缓冲区,现在我想对不同的四边形应用不同的旋转角度。有没有一种方法可以在着色器中实现它,或者我应该放弃着色器中的mvp矩阵,使用cpu执行相同的操作 编辑:每个顶点添加3个浮动属性(旋转和旋转中心.xy)怎么样 什么性能更好 (1) 做CPU轮换 (2) 每个顶点提供3个以上的浮动 (3) 分开抽签

我正在将OpenGL渲染器添加到我的2D游戏引擎中,我想知道是否有一种方法可以在单个绘制调用中将mvp矩阵仅应用于部分顶点

我计划按纹理分组绘制调用,因此我将传递一个包含许多顶点和texcoords的缓冲区,现在我想对不同的四边形应用不同的旋转角度。有没有一种方法可以在着色器中实现它,或者我应该放弃着色器中的mvp矩阵,使用cpu执行相同的操作

编辑:每个顶点添加3个浮动属性(旋转和旋转中心.xy)怎么样

什么性能更好

(1) 做CPU轮换

(2) 每个顶点提供3个以上的浮动

(3) 分开抽签

还有其他选择吗?

这里有一种可能性:

  • 在顶点着色器中执行旋转。传入创建旋转矩阵作为顶点属性所需的信息(角度?)

  • 传入一个顶点属性(ubyte),该属性实际上是逐顶点布尔标志。只有设置了bool,才会执行#1中的旋转


  • 从性能/存储的角度来看,不确定上述内容是否适用。

    我认为,尽管出于许多不同的性能原因对绘制调用进行分组是一件好事,但更改代码以满足基本要求并不是一个好主意,因为轮换不是一个好主意

    绘图批处理是一件好事,但是,如果您被迫保留一个附加属性(因为您不能肯定地使用制服来执行此操作,您将无法获得单个实体的信息),那么它就不值得了

    附加属性意味着更多的内存带宽使用,这通常是当今系统性能的主要致命因素

    另一方面,图纸配料很重要,但并不总是关键的,它取决于许多因素,例如:

  • GPU-OpenGL驱动程序优化
  • GPU分幅配置
  • 我们正在讨论的图形/绘图调用的数量(如果屏幕上有20个四边形,为什么要费心批处理?:)
  • 换句话说,通常更方便的做法是放弃极端配料,以利于简易性/主要可维持性,并避免针对简单要求(如旋转)的花哨解决方案


    我希望这在某种程度上有所帮助。

    仅此而已,请使用两个不同的对象

    对于对象部分的旋转,没有其他解决方法

    例如:


    一款带有坦克的游戏,你想把炮塔和剩下的身体分开旋转。就像在这里的例子中,这两个对象被视为单独的对象。

    我希望使用cpu,因为仅仅更改特定顶点可能超出了着色器的功能。不可能回答“什么是更好的性能”。这将取决于cpu的速度、gpu的速度、顶点的数量、绘制调用的数量等。只需选择一个适合您的,如果您发现它太慢,那么尝试其他一些方法,并配置最好的。我将配置代码,但我更感兴趣的是,是否有其他更好的方法来实现这一目标?