首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >最优二维拼接法

最优二维拼接法
EN

Stack Overflow用户
提问于 2013-01-18 20:35:36
回答 1查看 183关注 0票数 0

我对OpenGL ES2.0有点困惑,我找不到任何关于处理2D砖块的正确过程的权威信息(或者我可能已经知道了,我也不明白)。

现在,我有一些基于画布的游戏(其实并不像人们说的那么糟糕,我在一个1 1GHz的CPU上得到了30-40之间的FPS ),而且性能很好,但是我有一些新的想法,我认为OpenGL是我展示我的炫目特效所需要的唯一方法。

我有一个包含数千个小时的GameEngine,所以我有点不愿意做巨大的架构更改,只为了“测试”是否可以避免它(特别是因为我对OpenGL并不熟悉,也没有时间花一个月的时间来获得最高性能(time = money) )。

我知道纹理转换是非常昂贵的。并且已经有了一个保持纹理区域在单一纹理上的系统。我还跟踪哪些对象在屏幕上,所以只有绘制调用是必要的,以显示现场将发送到GPU。

因此,我有大量的瓷砖/图层在屏幕上,必须重新绘制每一帧。最好是:

  1. 解析我的级别文件,并将每个瓷砖转换成一个多边形(quad),链接到它的兄弟姐妹等等,并在加载时为其创建一个UV地图?(这需要从将每个瓷砖存储为矩形到跟踪相邻瓷砖的点以进行链接的体系结构更改)。
  2. 创建一个单一的四角体,并将其移动到所有的位置,注意渲染可以用同样的纹理在相同的路径上呈现的瓷砖。
  3. 为每个平铺创建一个四块,只需调用每个瓷砖上的draw()方法(仍然要确保将textureswaps保持在最小或完全消失)。

要在屏幕上重新定位对象,我应该是glTranslate (我知道这会给GPU带来压力)还是更新保存四坐标的FloatBuffer会更好呢?

谢谢你一吨!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-20 22:53:27

首先,如果您使用的是OpenGL es2.0,那么glTranslate()是不可用的;它仅在OpenGL es1.x中得到支持。

最好的解决方案将取决于您正在使用的平台。特别是,GPU的底层图形体系结构(无论是即时渲染系统还是平铺渲染系统)将决定你可以在场景中获得多少次绘图调用。由于OpenGL ES没有四边形基元(例如,GL_QUADS,您可以在桌面的兼容性配置文件中使用),所以您需要绘制一系列三角形(每个三角形条,每个三角形条都需要自己的绘制调用),或者作为一组独立的三角形集合,每对三角形组成一个四角(这种模式可以转换更多的位置,但减少了绘制调用的次数),或者如果您可以在1.建议中这样做,并跟踪所有使用相同纹理的四边形,你可以画一个带退化三角形的长三角条(那些面积为零的三角形,不会被栅格化到屏幕上)。这将需要更多的几何工作,但可以减少你需要做的纹理交换的数量。

最后,对于更新顶点位置缓冲区的问题,这也将是一个依赖于平台的解决方案,但是,无论如何,还是要使用顶点缓冲区对象(VBO)。几乎所有的移动GPU都将受益于以这种方式存储的顶点数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14407183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档