查看: 1904|回复: 14

osg::ClipPlane

[复制链接]

该用户从未签到

发表于 2012-8-14 18:11:42 | 显示全部楼层 |阅读模式
          for (osg::Vec4Array::iterator itr=getPlaneFromLine(pointList.get())->begin();itr!=getPlaneFromLine(pointList.get())->end();++itr)
                                          {
                                                  osg::ref_ptr<osg::ClipPlane>cp1=new osg::ClipPlane;
                                                  osg::Vec4& vec=*itr;
                                                  cp1->setClipPlane(vec);
                                                  root->getOrCreateStateSet()->setAttributeAndModes(cp1.get(),osg::StateAttribute::ON);
                                          }
                                }
                        }
各位大师,小女子想问关于裁剪面的问题,上面的代码中的getPlaneFromLine()是创建四维向量的函数,调试有错误:“osg::ClipPlane::setClipPlane”:对重载函数的调用不明确。我不知道什么原因,望各位大师指点,小女子不胜感激……

该用户从未签到

发表于 2012-8-14 18:23:46 | 显示全部楼层
本帖最后由 木子匕 于 2012-8-14 18:24 编辑

osg::ClipPlane::setClipPlane”:对重载函数的调用不明确 原因都告诉你了 仔细检查下是不是你自己写了个setClipPlane的参数不对

该用户从未签到

 楼主| 发表于 2012-8-14 20:27:14 | 显示全部楼层
木子匕 发表于 2012-8-14 18:23
osg::ClipPlane::setClipPlane”:对重载函数的调用不明确 原因都告诉你了 仔细检查下是不是你自己写了个set ...

那个参数,传入四维向量不对么?

该用户从未签到

发表于 2012-8-15 09:09:00 | 显示全部楼层
估计是这个原因!重载函数调用不明确  还不明白吗!

该用户从未签到

 楼主| 发表于 2012-8-15 09:18:11 | 显示全部楼层
木子匕 发表于 2012-8-15 09:09
估计是这个原因!重载函数调用不明确  还不明白吗!

这个问题已经解决了,谢谢啊

该用户从未签到

发表于 2012-8-15 10:14:54 | 显示全部楼层
问题出在哪啊!是参数错了吗

该用户从未签到

 楼主| 发表于 2012-8-15 11:30:34 | 显示全部楼层
木子匕 发表于 2012-8-15 10:14
问题出在哪啊!是参数错了吗

如果是osg::Vec4 vec=new osg:Vec4;作为setClipPlane的参数传入就不对,改成setClipPlane(vec.x(),vec.y(),vec.z(),vec.w())就不会出现那个问题,但是依然实现不了免裁剪。  
ClipPlane (unsigned int no, const Vec4d &plane)
   ClipPlane (unsigned int no, double a, double b, double c, double d)
API中这么写的,那不就是说可以直接输入四维向量么?

该用户从未签到

发表于 2012-8-15 14:44:49 | 显示全部楼层
额!   他需要4个参数,你当然就要传4个参数啊!你比如你注册,要你填账号啊密码啊!你直接传个TXT,信息全部包含也不行啊!

该用户从未签到

发表于 2013-4-8 16:28:58 | 显示全部楼层
如何重新定义ClipPlane的坐标中心?

该用户从未签到

 楼主| 发表于 2013-4-9 10:30:54 | 显示全部楼层
wulingxia 发表于 2013-4-8 16:28
如何重新定义ClipPlane的坐标中心?

亲,这个面裁剪,就是空间内的一个没有边界的面进行裁剪的,要想设置中心,我想只能设置裁剪范围,无边界的面本来就没有中心的,你设置好了裁剪的范围就可以确定中心了,这个裁剪,我当时没有实现想要的效果,现在想想也不是不可以哈,这是我的想法,也不知道对不对,交流学习吧

该用户从未签到

发表于 2013-4-9 12:34:06 | 显示全部楼层
你这代码中存在一个问题:没有指定裁剪平面的序号。
  1. void glClipPlane( GLenum   plane,  
  2.   const GLdouble *   equation);
复制代码
第一个参数是表示平面序号,第二个参数表示平面方程。
所以循环中需要加上这么一句:
  1. cp1->setClipPlaneNum(the_number_specified);
复制代码

该用户从未签到

发表于 2013-4-16 15:32:48 | 显示全部楼层
有一确定的裁剪面,即ClipPlane->setClipPlane(0,1,0,0)已设定,可以裁剪掉前面,如何使其裁减掉后面?(不通过重新设置平面参数实现,如ClipPlane->setClipPlane(0,-1,0,0),这样就产生两个裁剪面了,要求只一个裁剪面)

该用户从未签到

发表于 2013-4-16 16:45:09 | 显示全部楼层
wulingxia 发表于 2013-4-16 15:32
有一确定的裁剪面,即ClipPlane->setClipPlane(0,1,0,0)已设定,可以裁剪掉前面,如何使其裁减掉后面?(不 ...

同一个 clipplan 怎么能出现两个裁剪平面?

该用户从未签到

 楼主| 发表于 2013-4-17 09:01:42 | 显示全部楼层
wulingxia 发表于 2013-4-16 15:32
有一确定的裁剪面,即ClipPlane->setClipPlane(0,1,0,0)已设定,可以裁剪掉前面,如何使其裁减掉后面?(不 ...

正常情况下,只要改变面的法向量,使他指向相反的方向就可以裁剪另一面。当然这个裁剪面没有范围限制,因此实现不了挖洞的效果,不知道你想要实现什么?

该用户从未签到

发表于 2013-12-16 16:34:32 | 显示全部楼层
Berly 发表于 2013-4-9 10:30
亲,这个面裁剪,就是空间内的一个没有边界的面进行裁剪的,要想设置中心,我想只能设置裁剪范围,无边界 ...

请问如何实现面裁剪呢?请问你有神么好的想法呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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