Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenGL-VBOs用于2D渲染的理论动画问题_Opengl_Animation_Shader_Textures_Vbo - Fatal编程技术网

OpenGL-VBOs用于2D渲染的理论动画问题

OpenGL-VBOs用于2D渲染的理论动画问题,opengl,animation,shader,textures,vbo,Opengl,Animation,Shader,Textures,Vbo,所以最近我决定创建一个游戏,并使用OpenGL的新版本来完成它(注意:游戏是2D的) 到目前为止,我有一个VBO为每个类是绘制。我这样做是为了避免类的1个实例(6*3个元素)使用VBO。现在,正如您所知,在绑定纹理时渲染VBO之前。现在的问题是,我开始实现动画,然后我意识到动画是而不是可能的。通过这种方式,我无法渲染可能包含5个海龟的VBO,每个海龟具有不同的纹理(每个动画关键帧具有不同的纹理) 因此,要概括一下这就是问题所在:*一个VBO可以容纳多只海龟。一只乌龟决定进攻。通过切换到“攻击纹理

所以最近我决定创建一个游戏,并使用OpenGL的新版本来完成它(注意:游戏是2D的)

到目前为止,我有一个VBO为每个类是绘制。我这样做是为了避免类的1个实例(6*3个元素)使用VBO。现在,正如您所知,在绑定纹理时渲染VBO之前。现在的问题是,我开始实现动画,然后我意识到动画是而不是可能的。通过这种方式,我无法渲染可能包含5个海龟的VBO,每个海龟具有不同的纹理(每个动画关键帧具有不同的纹理)

因此,要概括一下这就是问题所在:*一个VBO可以容纳多只海龟。一只乌龟决定进攻。通过切换到“攻击纹理”开始动画。提供。VBO中的所有海龟都在攻击。*

现在的问题是:

  • 有没有办法在着色器内切换纹理
  • 如果以上不可能,我能做什么
    • 找到了自己的解决方案:


      对于每个可以有动画的对象,制作一张精灵表,然后只更改ST坐标,而不是为下一帧重新绑定纹理。

      “一个VBO可以容纳多个海龟”您是否想到这可能是您的问题?一般来说,2D游戏具有相当短暂的网格数据。您必须经常更改顶点数据,所以您应该接受这一点。这意味着每个对象都需要自己的顶点数据。那么你是说什么呢?一个海龟使用一个VBO?你有多少缓冲区对象是完全不相关的。您需要做的是停止让每只海龟使用相同的顶点数据,就像每只海龟都是另一只海龟的克隆一样。他们可以共享顶点数据的存储,但是他们不能共享实际的顶点,他们不能。它们共享的只是相同的FloatBuffer和相同的纹理。VBO为每只海龟保存6*3个元素。我听说过,但我觉得spritesheets也可以完成这项工作,并且不限制帧数。。(因此,它们几乎更好、更容易处理)