查看: 4573|回复: 12

请教读取模板缓存值和深度缓存值的问题!

[复制链接]

该用户从未签到

发表于 2009-4-20 09:42:31 | 显示全部楼层 |阅读模式
请教各位一下,在osg中如何读取模板缓存值和深度缓存值? 请尽量详细些,谢谢

该用户从未签到

发表于 2009-4-20 12:37:11 | 显示全部楼层
暂时没有这样的代码,不过使用Image:: readPixels就可以实现,注意需要读取的内容为GL_DEPTH_COMPONENT或者GL_STENCIL_INDEX。osghud,osgautocapture等几个例子都有类似的应用,注意这个函数的调用时机,通常必须在Camera:: DrawCallback中

该用户从未签到

 楼主| 发表于 2009-4-20 15:05:59 | 显示全部楼层
继续请教一下,_image->readPixels(_PAT->getPosition().x(),_PAT->getPosition().y(),1,1,GL_STENCIL_INDEX,GL_UNSIGNED_BYTE);这样是不是就读取了节点_PAT中心点像素的模板缓存值?但是,我如何调用模板缓存值呀?模板缓存存放到了哪?

该用户从未签到

 楼主| 发表于 2009-4-20 15:08:17 | 显示全部楼层
还有个问题,就是在DrawCallback中,是virtual void operator()(osg::Camera* camera)还是 virtual void operator () (osg::RenderInfo& renderInfo)?

该用户从未签到

 楼主| 发表于 2009-4-20 15:33:24 | 显示全部楼层
请问_image->readPixels能否和osg::Stencil结合就能实现模板测试?osg::Stencil是在osg::StateSet中有什么作用?我想做的是首先获取某个区域或点的模板缓存值,然后通过osg::Stencil进行下一步操作

该用户从未签到

发表于 2009-4-20 20:01:40 | 显示全部楼层
1、使用Image::data()读出
2、virtual void operator () (osg::RenderInfo& renderInfo)
3、osg::Stencil封装了glStencilOp的功能,也就是设置OpenGL的模板检验函数

该用户从未签到

 楼主| 发表于 2009-4-20 20:07:05 | 显示全部楼层
我用osg::Stencil了,但是两个阴影的重合部分总是闪烁,如果用PolygonOffset设置一下的话,是否改变深度缓存和模板缓存值?

该用户从未签到

发表于 2009-4-20 20:12:06 | 显示全部楼层
不会改变模板缓存值

该用户从未签到

 楼主| 发表于 2009-4-20 20:14:07 | 显示全部楼层
请问用Image::data()如何读出?

该用户从未签到

 楼主| 发表于 2009-4-20 20:14:59 | 显示全部楼层
如果我只想显示重叠的阴影区域,应该如何设置?谢谢

该用户从未签到

发表于 2009-4-20 20:41:03 | 显示全部楼层
Image::data  ( int  column,  int  row)

譬如,您的代码:
_image->readPixels(_PAT->getPosition().x(),_PAT->getPosition().y(),1,1,GL_STENCIL_INDEX,GL_UNSIGNED_BYTE);
想要取出唯一的模板值数据,直接获取
_image->data(0,0)就可以了

如果您保存到Image的值不是unsigned char类型(例如GL_FLOAT),则指定:
float* fdata = (float*)_image->data()
再操作指针

至于您在自己的程序中所需执行的操作,抱歉我并不了解您的具体需求和工作流程,因此也不知道该如何设置。

该用户从未签到

 楼主| 发表于 2009-4-20 20:49:31 | 显示全部楼层
十分谢谢 array,还有一个就是使用你的osgModeling::calcProjection(),是求模型所有的顶点在某个平面上与之对应的投影点(姑且这么说),我有一个问题:我不想都要这些投影点,只想要这些投影点的最外边一层,请问array有什么的方法?我头开始想用点的裁剪,但是不知道如何判断所有投影点中,那些是投影区域顶点,请教一下array

该用户从未签到

发表于 2009-4-21 09:12:17 | 显示全部楼层
这个具体算法我也不是很熟悉,也许点云处理方面的算法会适用于这种情形,可以自行搜索一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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