查看: 1216|回复: 5

奇怪的 ClipNode removeClipPlane 问题 和贴图问题

[复制链接]

该用户从未签到

发表于 2014-6-10 15:54:39 | 显示全部楼层 |阅读模式
本帖最后由 rubby 于 2014-6-11 08:54 编辑

大家好:

奇怪的 ClipNode  removeClipPlane 问题
(1)我新建了一个圆柱 节点,然后挂接在 clipped_subgraph下,
以实现:将圆柱面上下裁剪掉,剩余中间部分,


        osg::ref_ptr<osg::ClipNode> clipped_subgraph = new osg::ClipNode;
        double clipDistance =10.0;
        clipped_subgraph->addClipPlane( new osg::ClipPlane( 0 ) );
        clipped_subgraph->getClipPlane(0)->setClipPlane( 0.0, 0.0, 1.0, clipDistance );

        clipped_subgraph->addClipPlane( new osg::ClipPlane( 1 ) );
        clipped_subgraph->getClipPlane(1)->setClipPlane( 0.0, 0.0, -1.0, clipDistance);

见图1. 正常

(2)然后增加一个新的ClipPlane,将圆柱面切掉一半,
clipped_subgraph->addClipPlane( new osg::ClipPlane( 2 ) );
                        clipped->getClipPlane(2)->setClipPlane( 1.0, 0.0, 0.0, 0.0);  //x=0

见图2,正常


(3)最后,移除新加入的ClipPlane,
clipped_subgraph->removeClipPlane(2);
clipped->getNumClipPlanes()值也从3变为2。

见图3, 不正常,

但是此时,用鼠标拖动圆柱,圆柱面积发生变化,感觉裁剪面x=0仍然存在,见图4,5。
但是clipped->getNumClipPlanes()值已经从3变为2。


纹理贴图问题

我的圆柱面是一段一段绘制的,然后为每一段生成纹理。 纹理是根据值生成的。

我将生成的纹理导出图片。其中一段见图6,红色线是连接起来的。

但是在图7中,这些红色的线 未连接起来,每一段圆柱面的纹理有明显的错位。(弯曲是正常的,因为图6是其中一小段,整个图片中红色线是曲线)



多谢
图1.png
图2.png
图3.png
图4.png
图5.png
图6.png
图7.png

该用户从未签到

 楼主| 发表于 2014-6-10 16:04:26 | 显示全部楼层
请求牛人帮忙看一下啊,万分感谢。

该用户从未签到

 楼主| 发表于 2014-6-12 22:08:47 | 显示全部楼层
本帖最后由 rubby 于 2014-6-15 17:17 编辑

                       解决方法1
                        osg::ClipPlane* remove = clipped->getClipPlane(2);
                        boolean b = clipped->removeClipPlane(2);       
                        remove->releaseGLObjects(); //Rubby 必须增加这句话,否则还是裁剪了
                        解决方法2:
                        clipped_subgraph->setDataVariance(osg::Object:YNAMIC);


虽然加上上面的几句话,但是有时候,还是不可以。
                       

该用户从未签到

发表于 2014-6-18 10:24:35 | 显示全部楼层
我记得是要通过设置属性来启用剪裁平面的
node->getorcreatrStateset()->setattributeandmodes(cp,osg::stateset::ON);
你把on改成off试试,我记不清了

该用户从未签到

发表于 2014-6-18 10:25:53 | 显示全部楼层
这个纹理有点难看啊 ,你让美工给你做一个纹理就行了

该用户从未签到

 楼主| 发表于 2014-6-18 14:04:26 | 显示全部楼层
casthc 发表于 2014-6-18 10:24
我记得是要通过设置属性来启用剪裁平面的
node->getorcreatrStateset()->setattributeandmodes(cp,osg::st ...

多谢,我试一试。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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