C++ 带OpenGL的2D引擎:使用Z缓冲区还是自己的实现进行sprite排序?
如果我在做一个3D引擎,这个问题的答案会很清楚:我会使用深度缓冲区,而不是考虑自己对所有多边形进行排序 然而,这与2D的情况不同,因为在这里,层可以在没有OpenGL帮助的情况下轻松实现,然后您甚至可以在层中排序和移动精灵。(这在OpenGL afaik中是不可能的)C++ 带OpenGL的2D引擎:使用Z缓冲区还是自己的实现进行sprite排序?,c++,opengl,2d,layer,C++,Opengl,2d,Layer,如果我在做一个3D引擎,这个问题的答案会很清楚:我会使用深度缓冲区,而不是考虑自己对所有多边形进行排序 然而,这与2D的情况不同,因为在这里,层可以在没有OpenGL帮助的情况下轻松实现,然后您甚至可以在层中排序和移动精灵。(这在OpenGL afaik中是不可能的) < Li >(为什么)我应该使用OpenGL深度缓冲区代替在CPU上运行的C++层系统? 深度缓冲区版本会慢多少 P>我清楚地看到,在C++中制作一个层系统将完全没有性能影响,因为我必须在精灵中迭代以进行渲染。 < P>我建
-
< Li >(为什么)我应该使用OpenGL深度缓冲区代替在CPU上运行的C++层系统?
- 深度缓冲区版本会慢多少李>
<> P>我清楚地看到,在C++中制作一个层系统将完全没有性能影响,因为我必须在精灵中迭代以进行渲染。 < P>我建议你在软件中做它,因为你可能想在你的精灵上使用透明度,这意味着你从前面到前面渲染它们。另外,对两个精灵进行排序也不应该对CPU有太高的要求。直接回答:
- 允许GPU使用深度缓冲区将允许您动态调整事物的绘制顺序,而无需在CPU上进行任何洗牌,并且在有点虚构的情况下,您无需将事物分配到不同的层,例如,你可以有像投射物一样的效果,从背景向玩家的方向投射,然后在玩家的前面投射,而不必一直计算将它们分配到哪一层
- 在GPU上,深度的使用不会产生可测量的影响,即使你使用的是嵌入式芯片、十多年前的插件卡或集成部件;它们是现代GPU的基础,因此从实用角度来看,它们被优化为零成本
另一方面,软件排序很好,因此您可以对不透明精灵进行前后渲染,并且必须正确进行alpha混合(当然,您可以前后绘制这些精灵)。我认为完全由您决定。。。在DirectX中制作二维瓦片滚动引擎时,我选择在纯C++中绘制自己的图层。然而,我的精灵也由一个纹理组成(换句话说,阴影被嵌入到框架中,我只有两层瓷砖和精灵)