作者mellean (莉莉姆)
看板GameDesign
标题Re: [请益] 请问关於 Ogre 材质 透明色 设定
时间Sat Mar 7 01:14:20 2009
如你的原文有推文提到需要开启alpha test才会有你想要的功能
在你的情况中,你将depth write enable打开(true),亦即只要被处理的
pixel就会将depth资讯写在depth buffer中用来做depth test,
但如果没打开alpha test,会造成即使alpha为0(假设会全透明)还是会处理该
pixel所以也是会将depth资讯写入,会造成在後来绘制的而且被刚刚其实应该
全透明的地方的物件档住的物件被拒绝绘制到该处,所以就变成还是刚刚画上
去的透明的背景色;将depth write关闭的话就没办法用depth test来检查
pixel距离camera的远近而做绘制的筛选,所以後来画的物件在场景中其实比面画的
距离camera还要远却会盖在最上面。
所以应该打开alpha test让全透明的pixel(alpha == 0)被reject掉,这样该
pixel就不会被处理,也不会将depth值写入depth buffer,不会影响後来绘制在
该处的物件,记得没错的话ogre只要pass的alpha reject function的值不是被设定成
always pass的话就会自动打开alpha test的功能了,
好像没办法自己直接控制要关闭还是打开。
※ 引述《pleaselouis (LOUISN)》之铭言:
: 大家好 小弟因最近工作较忙 所以比较少上来 这次关於此主题又有问题向大家请教
: 请各位前辈 帮帮忙 给在下一些帮助 谢谢大家 <(_ _)>
: 小弟我目前已经可以做到 透明色处理的功能 但是还有些异常问题发生
: 目前我针对一个 树 的模组做载入显示 其中分别对 setDepthWriteEnabled() 作测试
: 这是将参数设为 False 的情况 : http://0rz.tw/FbpI1
: 而这是将参数设为 True 的情况 : http://0rz.tw/Em40q
: 首先讨论关於 True 的图片 可以看见 每一片树叶模组 会以底色 盖住下面或後面的模组
: 原本希望的正常显示画面 应该是可以从 树叶的缝隙中 看到其他树叶或是枝干
: 但却完全被其底色所干扰 要是应用到人物的头发上 後果应该会蛮惨的...
: 以下是相关程式码 :
: Entity * EtTemp;
: EtTemp->getSubEntity(mTextureSubMeshIndex)->getMaterial()->getTechnique(0)
: ->getPass(0)->setSceneBlending(Ogre::SBF_SOURCE_ALPHA,
: Ogre::SBF_ONE_MINUS_SOURCE_ALPHA);
: EtTemp->getSubEntity(mTextureSubMeshIndex)->getMaterial()->getTechnique(0)
: ->getPass(0)->setDepthWriteEnabled(true);
: 再来讨论关於 False 的图片 底色盖住下面或後面的模组 略为减缓 但还是有出现
: 但由於参数为False 故对於 Depth 的判断关闭了 所以可以看到应该在比较後面的树叶
: 整块的显示在比较前面的位置 甚至是盖住了前面的树叶...
: 以下是相关程式码 :
: Entity * EtTemp;
: EtTemp->getSubEntity(mTextureSubMeshIndex)->getMaterial()->getTechnique(0)
: ->getPass(0)->setSceneBlending(Ogre::SBT_REPLACE);
: EtTemp->getSubEntity(mTextureSubMeshIndex)->getMaterial()->getTechnique(0)
: ->getPass(0)->setDepthWriteEnabled(false);
: 目前对於这样的错误 几乎没有头绪该如何解决
: 希望版上的前辈 可以再度指导一下晚辈 谢谢大家 <(_ _)>
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.116.37.95