游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4108|回复: 1

请问关于 Ogre 材质 透明 Depth 设定

[复制链接]

1

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2009-3-10 09:58:00 | 显示全部楼层 |阅读模式
大家好 小弟有问题向大家请教 请各位前辈 帮帮忙 给在下一些帮助 谢谢大家 <(_ _)>

小弟我目前已经可以做到 透明色处理的功能 但是还有些异常问题发生

目前我针对一个 树 的模块做加载显示 其中分别对 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);

我希望呈现的正确版本 是可以从树叶缝隙中看到下面的 树叶 或是 枝干

但是在其缝隙之间 却是显示底色 就是涂满场景的颜色(我的程序预设为水蓝色)

例如下面的图片连结 就会看到头发的边缘 把脸盖住了

http://0rz.tw/XQJTI

目前研究觉得应该是关于 Depth 的问题 只是看了文件

只知道 似乎跟 setDepthWriteEnabled() setDepthCheckEnabled() setSceneBlending()

等相关Function有关系 但是目前测试仍是无法达到预期的效果 故上来发问

尤其是 setSceneBlending() 目前关于他的公式 :

(texture * sourceFactor) + (scene_pixel * destFactor)

还不是很能理解 正在研究中...

目前对于这样的错误 几乎没有头绪该如何解决

希望版上的前辈 可以再度指导一下晚辈 谢谢大家 <(_ _)>

1

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2009-3-11 14:54:00 | 显示全部楼层

Re: 请问关于 Ogre 材质 透明 Depth 设定

目前我似乎找到方法了 虽然好像没有完全正确就是了

希望在更为复杂的 头发 或是类似的Mesh 也不会有太差的表现就好了

我的做法很简单 就只是针对头发的 Entity 设定下列的程序代码 :


Entity * EtTemp;

EtTemp->setRenderQueueGroup( RENDER_QUEUE_6 );


而关于 setRenderQueueGroup 所使用的参数宣告如下 :


enum RenderQueueGroupID
{
RENDER_QUEUE_BACKGROUND = 0,
RENDER_QUEUE_SKIES_EARLY = 5,
RENDER_QUEUE_1 = 10,
RENDER_QUEUE_2 = 20,
RENDER_QUEUE_WORLD_GEOMETRY_1 = 25,
RENDER_QUEUE_3 = 30,
RENDER_QUEUE_4 = 40,
RENDER_QUEUE_MAIN = 50,
RENDER_QUEUE_6 = 60,
RENDER_QUEUE_7 = 70,
RENDER_QUEUE_WORLD_GEOMETRY_2 = 75,
RENDER_QUEUE_8 = 80,
RENDER_QUEUE_9 = 90,
RENDER_QUEUE_SKIES_LATE = 95,
RENDER_QUEUE_OVERLAY = 100,
RENDER_QUEUE_MAX = 105
};


虽然远观下 几乎完全正确 但近观下就有破碎的情形发生 如右 :  http://0rz.tw/VWKXN

根据文件所述 此 Function 是把指定的 Entity 强制更动在 Render Queue 的位置

由于还是有错误情形 因此仍上来跟大家讨论 请大家给予在下一些意见 谢谢
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-20 03:23

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表