2010-06-30 28 views
1

我正在绘制大量的半透明多边形。我的场景是2D并使用2f顶点。我不能使用深度缓冲区,因为它不会帮助,因为alpha混合。什么是其他一些技术来减少透支,因为这是削弱我的应用程序,而不是多边形计数,因为我使用VBO的。谢谢防止透支(OpenGL)的技巧

+0

“透支”究竟是什么意思?仅仅因为你使用VBO并不意味着你不能一次尝试渲染太多。 – 2010-06-30 23:21:10

+0

@Jon Cage:基本上,渲染场景时多次绘制相同的像素。使用半透明多晶硅时,一些透视是必要的,但我敢肯定,您可以前后排列您的多面体,然后使用一些模板魔法在已经绘制像素几次之后不绘制像素。 – 2010-06-30 23:25:05

+0

我的意思是,如果我绘制一个50x50的正方形阵列,它不会滞后,但是在另一个顶部的50x50正方形1确实很多。 – jmasterx 2010-06-30 23:25:23

回答

4

首先,你怎么确定透支是你的问题?如果没有更多关于你正在绘制的信息,很难猜测如何更快地绘制它。一般而言,避免过度抽取的关键是避免画出任何不需要的东西。所以,如果你有一个2D侧滚动游戏,并且为了视差目的而独立滚动几层背景图像 - 天空,云彩,山脉,远处的森林和附近的森林 - 你会想要避免在任何其他地方绘制天空图层可见。因此,如果您知道山脉确保覆盖天空的某一部分,请改变天空多边形的形状,以便只在您期望天空可见的区域绘制。如果您仍然有问题,可能会为跟随山脉形状的天空创建一个相当高分辨率的网格。同样,如果森林层的地平面保证覆盖一定的高度跨度,那么不要在该地区绘制山脉。

在现代视频硬件上,OTOH在2D场景中透支的几层通常不是什么大问题,所以我仍然很想知道你是如何确定这一点的,并且如果可能有某种类型的你的仪器和分析中存在偏差,这可能导致你误入歧途。

+0

+1:我的想法正是:) – 2010-06-30 23:35:34

+0

我正在制作一个矢量绘图应用程序,我推着它,经过大约35层后,它变得迟钝,不是在我的电脑上,而是在我的笔记本电脑上,我只是想让它变得尽快尽可能。 – jmasterx 2010-06-30 23:38:12

+1

要我上传这个exe文件,这样你才能评估你自己? – jmasterx 2010-06-30 23:42:17

0

在你的特定场景中,我会考虑将一些图层渲染成OpenGL FBO(静态图层)。 然后合成动态图层和静态图层等

毕竟,如果它是一个矢量绘图应用程序,您不需要在每次用户交互时重绘所有内容。

+0

我必须重绘一切OnScroll() – jmasterx 2010-07-01 00:26:20

+0

你能渲染一个大的补丁一次(然后复制一个合适的比例或大补丁),还是一切都变得很频繁? – 2010-07-01 07:50:21

+0

@ user146780:OnScroll()是指放大,缩小?如果每次触发该事件都必须渲染所有内容,则这不应该成为问题:放大意味着绘制的图元较少,缩小意味着要混合的像素较少。 – Stringer 2010-07-01 13:07:21