查看: 1447|回复: 5

关于遮挡问题

[复制链接]

该用户从未签到

发表于 2012-12-13 15:03:29 | 显示全部楼层 |阅读模式
请教一下,我最近在做一个项目,需要在MAYA中利用osg来绘制一些物体,目前我采用的用osg绘制locator的方法

目前初步功能已经实现,如图
捕获.JPG
其中牛是用osg来绘制,小球是用maya绘制的

现在有个问题,就是当牛在前,球在后时,正常遮挡;当球在前,牛在后时,本不应该绘制的牛,却出现在了最前面。

我现在怀疑,是因为osg在绘制时,也创建了一个camera。maya本身的camera能识别自身绘制的球和locator(牛),但是osg的camera只能识别牛,因此无论牛在前还是在后,都会绘制出来。

请教一下,如何解决这个问题?就是说如何将osg的camera的深度缓存绑定的maya自身的深度缓存中?

谢谢

该用户从未签到

 楼主| 发表于 2012-12-13 21:06:42 | 显示全部楼层
我现在用的类是osgUtil::SceneView,如果这个类不适合,那么应该用哪个类呢?

该用户从未签到

发表于 2012-12-14 08:13:35 | 显示全部楼层
depth 不清除 试试

该用户从未签到

 楼主| 发表于 2012-12-17 10:08:55 | 显示全部楼层
liuzhiyu123 发表于 2012-12-14 08:13
depth 不清除 试试

我试了试

如果仅仅清除depth,则maya绘制的小球和osg绘制的牛都能显示,但是osg绘制的牛无法获得小球的深度数据,也就是无法正确遮挡,牛永远在前面,类似HUD

如果仅仅清除color,则能够正确遮挡,但是osg的背景色不是透明的,而且把maya绘制的球的颜色也设置成了osg的背景色

如果都不清除,则osg的背景色既不是透明的,也无法实现正确的遮挡

如果采用osgUtil:sceneView确实无法实现我想要的功能,那么有没有其他的view类能实现?或者sceneView里面有没有哪个函数是仅仅负责opengl绘制,而没有camera参与的?或者osg里面有没有能实现类似功能的类?

我自己查了查,发现与view相关的类基本都是在camera下绘制的

该用户从未签到

发表于 2012-12-17 10:23:35 | 显示全部楼层
您要实现Maya中绘制OSG场景,这个我知道有朋友已经完美地实现了,不过我并不清楚具体过程。要做到这一步只有通过SceneView,至于遮挡和透明融混,其实就是depth和绘制顺序的双重影响,您可以尝试确保OSG场景总是在Maya场景之后渲染(我不知道用Maya怎么做),并且不要清除depth bits

该用户从未签到

 楼主| 发表于 2012-12-17 11:19:06 | 显示全部楼层
array 发表于 2012-12-17 10:23
您要实现Maya中绘制OSG场景,这个我知道有朋友已经完美地实现了,不过我并不清楚具体过程。要做到这一步只有 ...

我觉得应该是osg在maya之前渲染吧?(osg渲染时清除depth)

因为如果osg在maya之后渲染,而且不清除depth,那么osg的背景色就不是透明的,会将已经绘制好的maya场景覆盖掉。

我很早前就觉得应该是这个顺序,不过一直没找到如何让maya的locator最先渲染的方法,呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表