2011-05-19 106 views
2

我开发显示一个大的肥胖型(约1M顶点),静态2D图像的应用程序。由于内存限制问题,每次用户滚动或缩放时,我一直在向维也纳各组织提供新数据,给人的印象是整个图像“存在”,即使它没有。 enter image description here 有两个问题的方法:1)虽然反应是“足够好”,它会更好,如果我能做出滚动缩放更快,更连贯。 2)我一直坚持可以在一次绘制中完成的64k顶点限制,这可以严格限制一次可以显示多少图像。能够看到更多的图像,甚至是同时看到所有的图像将是很好的。尽管目前的性能再次足够好,因为我们处于原型阶段,并且已经设置了数据以应对局限性,但要达到产品级别,我们必须摆脱这种限制。2D的OpenGL ES架构

最近我发现,通过使用“机器人:largeHeap”选项,我可以得到一个摩托罗拉XOOM,这意味着我可以存储在维也纳组织整个图像256 MB的堆空间。在我的理想世界中,我只需将OpenGL引擎传递给VBOs,并告诉它相机已移动,或使用glScale/glTranslate进行缩放/滚动。

我的问题是:我是在正确的轨道上?我应该总是“画出”所有块,并让OpenGl弄清楚哪些实际上会被看到,或者找出哪些块是我自己可见的?使用类似gluLookAt和glScale/glTranslate之间的任何区别?

我不在乎宽高比失真(图像是数学生成的,而不是照片),它比它高很多,在未来的顶点数量可能会变得更大,更大(例如60M)。谢谢你的时间。 enter image description here

+0

“看到这一切在同一时间”我希望在手机上呈现60M顶点@ 30fps的是不是一个强大的需求,顺便说一句。您必须通过限制最小变焦倍数以及提供良好的降级(详细程度)来减少60M。 – Calvin1602 2011-05-19 15:17:14

+0

@ Calvin1602不,这不是要求,谢天谢地。 :-) – 2011-05-19 16:07:46

+0

希望很明显,第二个图像有一个错字。右侧的块应该被标记为“块n”。 – 2011-05-19 16:08:20

回答

4

不要让OpenGL的找出自己有什么在屏幕上。他不会。所有顶点将被转换,并且所有不在屏幕上的人将被剪裁;但是你有更好的关于你的场景的OpenGL知识。

使用huuuge 256Mo VBO会让你每次渲染整个场景,每一次,这是不好的性能与互感器的所有顶点。

使一些小的维也纳各组织(例如3×3网格只应在任何时刻可见),并仅显示那些是可见的。可选预填基于运动外推未来维也纳组织...

有gluLookAt和glTranslate/......没有什么区别。两个计算矩阵,就是这样。

顺便说一句,如果你的图片是静态的,你不能预先计算它(点菜谷歌地图)?同样,您的数据在缩小时提供了一些“减少”的方法吗?例如对点云,只显示出1 N个点的...

+0

感谢您的回答。 “预先计算”是什么意思?正如你所建议的那样,我可以创建一系列的维也纳国际组织,但听起来你的意思超出了这个范围。也许你的意思是纹理?在这个问题中,我忘记提到这些不是纹理,只是彩色化顶点,我需要OpenGl来进行平滑/插值。 – 2011-05-19 16:11:47

+0

是的,我的意思是一个真正的纹理。您可以在纹理(“RTT”)中渲染一次顶点,并仅显示纹理( - > 1四 - > 4个顶点而不是许多)。顺便说一句,缩小时,你可以使用以前的纹理来渲染新的纹理,所以它可能*可以绘制60M的顶点作为你的特定情况。 – Calvin1602 2011-05-19 21:19:47