OpenGL填充率问题,为何粒子系统越靠近效率越低,具体见图

zhucde 2007-11-15 12:53:26

使用粒子系统制作的火和烟的效果,远看还行,FPS很高,几乎不会降低多少FPS,但越靠近,FPS越低,
都是由于使用了glDepthFunc的结果,去除这个效果就没有影响, 但又必须使用, 有什么办法可以解决呢?

...全文
152 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhucde 2007-11-16
  • 打赏
  • 举报
回复
楼上的, 先试一下再说,不是看出来的,我就是问关闭深度数据写入后效率降低有何办法可以解决,不是讨论深度缓冲
syy64 2007-11-15
  • 打赏
  • 举报
回复
上面的那段代码已关闭了写深度缓冲,没看到跟深度比较函数有啥关系。
zhucde 2007-11-15
  • 打赏
  • 举报
回复
//以下为绘制粒子单元的代码,其实是最普通的一种单面绘制,使用布告牌的方式让它始终面对相机,
主要原因就是使用glDepthMask(GL_FALSE);它可以使粒子边缘模糊化,让它跟背景更好的溶合,看起来更真实.
如果使用AlphaFunc,那缘故就非常的硬,不知道有什么办法能够解决此问题
glPushMatrix();
glDepthMask(GL_FALSE);

glBlendFunc(GL_ONE, GL_SRC_ALPHA_SATURATE);

glDisable(GL_FOG);

glDisable(GL_CULL_FACE);
//绑定纹理,略


glTranslatef(pos.x,pos.y,pos.z);
glColor4f(color.x*color.w,color.y*color.w,color.z*color.w,alpha);

///设定矩阵,略


glRotatef(Rotbase,0.0f,0.0f,1.0f);
Rotbase+=Rotf;

glBegin(GL_QUADS);

glTexCoord2f(0,1);
glVertex3f(size, size, 0);

glTexCoord2f(0,0);
glVertex3f(size, -size, 0);

glTexCoord2f(1,0);
glVertex3f(-size, -size, 0);

glTexCoord2f(1,1);
glVertex3f(-size, size, 0);

glEnd();



glEnable(GL_CULL_FACE);

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_FOG);
glDepthMask(GL_TRUE);
glPopMatrix();
ouyh12345 2007-11-15
  • 打赏
  • 举报
回复
mark。
帮顶。
计算机图形学只会一点概念。
syy64 2007-11-15
  • 打赏
  • 举报
回复
贴出相关代码看看。

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧