查看: 4053|回复: 15

关于画多边形的问题

[复制链接]

该用户从未签到

发表于 2012-8-22 15:13:13 | 显示全部楼层 |阅读模式
123.jpg 未命名.jpg

如图所示,当我选择在多边形里面的点或不按顺序添加就变成上路的样子!

有什么办法解决这个问题啊!求助~~~~~~~~~~~~~

该用户从未签到

发表于 2012-8-22 16:32:18 | 显示全部楼层
凹多边形 需要OpenGL Tessellation

该用户从未签到

 楼主| 发表于 2012-8-22 16:35:05 | 显示全部楼层
liuzhiyu123 发表于 2012-8-22 16:32
凹多边形 需要OpenGL Tessellation
  1.         //创建分格化对象
  2.                 osg::ref_ptr<osgUtil::Tessellator> tess = new osgUtil::Tessellator;
  3.                 //设置分格类型为几何体
  4.                 tess->setTessellationType(osgUtil::Tessellator::TESS_TYPE_DRAWABLE);
  5.                 //设置只显示轮廓为false,这里还需要填充
  6.                 tess->setBoundaryOnly(false);
  7.                 //设置环绕规则
  8.                 tess->setWindingType(osgUtil::Tessellator::TESS_WINDING_ODD);

  9.                 //使用分格化
  10.                 tess->retessellatePolygons(*geom2);
复制代码
具体应该怎么设置呢!我试了几种感觉都没效果啊!

该用户从未签到

发表于 2012-8-22 16:39:47 | 显示全部楼层

该用户从未签到

 楼主| 发表于 2012-8-22 16:58:55 | 显示全部楼层
liuzhiyu123 发表于 2012-8-22 16:39
http://www.songho.ca/opengl/gl_tessellation.html
自己学一下吧

貌似他geom里需要2个图形!我这只有一个啊!有点晕

该用户从未签到

 楼主| 发表于 2012-9-4 18:22:56 | 显示全部楼层
liuzhiyu123 发表于 2012-8-22 16:39
http://www.songho.ca/opengl/gl_tessellation.html
自己学一下吧

能否给个示例代码给我啊!还是没搞懂!

该用户从未签到

发表于 2012-9-6 17:23:44 | 显示全部楼层
代码中自带的osgtessellation应该就是非常有说服力的例子了

该用户从未签到

 楼主| 发表于 2012-10-30 11:11:09 | 显示全部楼层
array 发表于 2012-9-6 17:23
代码中自带的osgtessellation应该就是非常有说服力的例子了
  1. osg::ref_ptr<osg::Vec3Array> vertexs = new osg::Vec3Array;
  2.         geom->setVertexArray(vertexs.get());
复制代码
如是顶点设置为osg::Vec3dArray Tessellator 不起作用这是什么原因啊!

该用户从未签到

发表于 2012-10-30 12:15:06 | 显示全部楼层
木子匕 发表于 2012-10-30 11:11
如是顶点设置为osg::Vec3dArray Tessellator 不起作用这是什么原因啊!

??

该用户从未签到

 楼主| 发表于 2012-10-30 14:07:21 | 显示全部楼层
liuzhiyu123 发表于 2012-10-30 12:15
??

意思是如果这个多边形的
osg::Geometry* geom = new osg::Geometry;
osg::Vec3Array* vertexs = new osg::Vec3Array;
geom->setVertexArray(vertexs);

顶点数据设置osg::Vec3dArray

osg::ref_ptr<osgUtil::Tessellator> tes = new osgUtil::Tessellator();
tes->setBoundaryOnly(false);
tes->setWindingType(osgUtil::Tessellator::TESS_WINDING_NONZERO);
tes->setTessellationType(osgUtil::Tessellator::TESS_TYPE_GEOMETRY);
tes->retessellatePolygons(*geom);

这个多边形分格化就没有效果了!设置为osg::Vec3Array就有效果!

该用户从未签到

发表于 2012-10-30 14:11:11 | 显示全部楼层
retessellatePolygons 中第一行     osg::Vec3Array* vertices = dynamic_cast<osg::Vec3Array*>(geom.getVertexArray()); 您编译的osg 默认的Vec3Array 是float的吧?

该用户从未签到

 楼主| 发表于 2012-10-30 14:20:41 | 显示全部楼层
没错

该用户从未签到

 楼主| 发表于 2012-10-30 14:22:45 | 显示全部楼层
估计颜色设置也是这个原因吧 如果是osg::Vec4dArray也会出现些问题

该用户从未签到

 楼主| 发表于 2012-10-30 14:35:47 | 显示全部楼层
osg::Vec3Array* vertices = dynamic_cast<osg::Vec3Array*>(geom.getVertexArray())!

若是osg::Vec4dArray不是也强转为osg::Vec3Array为何还是无效呢!

retessellatePolygons 中需要的Vec3Array 是什么类型啊!

该用户从未签到

发表于 2012-10-30 14:38:47 | 显示全部楼层
本帖最后由 liuzhiyu123 于 2012-10-30 14:41 编辑
木子匕 发表于 2012-10-30 14:22
估计颜色设置也是这个原因吧 如果是osg::Vec4dArray也会出现些问题


是的,CMake的时候 选择一下,如果选择的vec3是float的 那么osg::Vec3Array=osg::Vec3fArray,double同理

该用户从未签到

发表于 2012-11-5 09:25:19 | 显示全部楼层
Vec3Array是唯一支持的细分数据类型,等同于Vec3fArray。这和OpenGL VA的渲染所需有关
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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