查看: 1988|回复: 4

【求助】setColorIndices: 不是osg::Geometry的成员

[复制链接]

该用户从未签到

发表于 2016-4-12 14:23:45 | 显示全部楼层 |阅读模式
        我在学习肖鹏的《OpensceneGraph三维渲染编程指南》时,遇到了一个问题,在练习书中例子4-2的时候,代码
  1. geom->setColorIndices(colorIndex);
复制代码

        提示错误【        IntelliSense:  class "osg::Geometry" 没有成员 "setColorIndices"】,我点击该方法的【转到声明】,的确可以看到该方法,这个错误该如何解决呢?望各位前辈帮助~

        osg版本:3.40   编译器:vs2013

        完整代码如下:
        
  1. #include<osgViewer/Viewer>

  2. #include<osg/Node>
  3. #include<osg/Group>
  4. #include<osg/Geode>
  5. #include<osg/Geometry>

  6. #include<osgDB/ReadFile>
  7. #include<osgDB/WriteFile>
  8. #include<osgUtil/Optimizer>



  9. //创建一个四边形节点

  10. osg::ref_ptr<osg::Node>createQuad(){

  11.         //创建一个叶节点
  12.         osg::ref_ptr<osg::Geode>geode = new osg::Geode();

  13.         //创建一个几何体对象
  14.         osg::ref_ptr<osg::Geometry>geom = new osg::Geometry();

  15. //创建顶点数组,注意顶点添加顺序是逆时针的
  16.         osg::ref_ptr<osg::Vec3Array> v = new osg::Vec3Array();
  17.         //添加数据
  18.         v->push_back(osg::Vec3(0.0f, 0.0f, 0.0f));
  19.         v->push_back(osg::Vec3(1.0f, 0.0f, 0.0f));
  20.         v->push_back(osg::Vec3(1.0f, 0.0f, 1.0f));
  21.         v->push_back(osg::Vec3(0.0f, 0.0f, 1.0f));
  22.         v->push_back(osg::Vec3(0.0f, -1.0f, 1.0f));

  23.         //设置顶点数据
  24.         geom->setVertexArray(v.get());

  25. //创建四边形顶点索引数组,指定绘图基元为四边形,注意添加顺序
  26.         osg::ref_ptr<osg::DrawElementsUInt>quad = new osg::DrawElementsUInt(osg::PrimitiveSet::QUADS, 0);
  27.         //添加数据
  28.         quad->push_back(0);
  29.         quad->push_back(1);
  30.         quad->push_back(2);
  31.         quad->push_back(3);
  32.         //添加到几何体
  33.         geom->addPrimitiveSet(quad.get());

  34. //创建三角形顶点索引数组,指定绘图基元为三角形,注意添加顺序
  35.         osg::ref_ptr<osg::DrawElementsUInt>triangle = new osg::DrawElementsUInt(osg::PrimitiveSet::TRIANGLES, 0);
  36.         //添加数据
  37.         triangle->push_back(4);
  38.         triangle->push_back(0);
  39.         triangle->push_back(3);
  40.         //添加到几何体
  41.         geom->addPrimitiveSet(triangle.get());





  42. //创建颜色数组
  43.         osg::ref_ptr<osg::Vec4Array>vc = new osg::Vec4Array();
  44.         //添加数据
  45.         vc->push_back(osg::Vec4(1.0f, 0.0f, 0.0f, 1.0f));
  46.         vc->push_back(osg::Vec4(0.0f, 1.0f, 0.0f, 1.0f));
  47.         vc->push_back(osg::Vec4(0.0f, 0.0f, 1.0f, 1.0f));
  48.         vc->push_back(osg::Vec4(1.0f, 1.0f, 0.0f, 1.0f));

  49.         //创建颜色索引数组
  50.         osg::TemplateIndexArray<unsigned int, osg::Array::UIntArrayType, 4, 4>* colorIndex = new osg::TemplateIndexArray<unsigned int, osg::Array::UIntArrayType, 4, 4>();
  51.         //添加数据,注意添加数据顺序与顶点一一对应

  52.         colorIndex->push_back(0);
  53.         colorIndex->push_back(1);
  54.         colorIndex->push_back(2);
  55.         colorIndex->push_back(3);
  56.         colorIndex->push_back(4);


  57.         //设置颜色数组
  58.         geom->setColorArray(vc.get());
  59.         //设置颜色索引数
  60.         //setColorIndices
  61.         geom->setColorIndices(colorIndex);


  62.         //设置颜色的绑定方式为单个顶点
  63.         geom->setColorBinding(osg::Geometry::BIND_PER_VERTEX);

  64. //创建法线数组
  65.         osg::ref_ptr<osg::Vec3Array>nc = new osg::Vec3Array();
  66.         //添加法线
  67.         nc->push_back(osg::Vec3(0.0f, -1.0f, 0.0f));

  68.         //设置法线数组
  69.         geom->setNormalArray(nc.get());
  70.         //设置法线的绑定方式为全部顶点
  71.         geom->setNormalBinding(osg::Geometry::BIND_OVERALL);



  72. //添加到叶节点
  73.         geode->addDrawable(geom.get());

  74.         return geode.get();
  75. }



  76. int main(){

  77.         //创建Viewer对象,场景浏览器

  78.         osg::ref_ptr <osgViewer::Viewer>viewer = new osgViewer::Viewer();

  79.         osg::ref_ptr<osg::Group>root = new osg::Group();
  80.         

  81.         //添加子节点
  82.         root->addChild(createQuad());




  83.         //场景优化数据;

  84.         osgUtil::Optimizer optimizer;

  85.         optimizer.optimize(root.get());

  86.         //设置场景数据

  87.         viewer->setSceneData(root.get());


  88.         //初始化并创建窗口

  89.         viewer->realize();

  90.         //开始渲染

  91.         viewer->run();

  92.         return 0;

  93. }
复制代码


该用户从未签到

发表于 2016-4-12 14:52:43 | 显示全部楼层
顶点索引这种方式已经准备弃用了,原来的那个在deprecated_osg域名下

该用户从未签到

 楼主| 发表于 2016-4-12 18:42:49 | 显示全部楼层
smash 发表于 2016-4-12 14:52
顶点索引这种方式已经准备弃用了,原来的那个在deprecated_osg域名下

非常感谢您!!

该用户从未签到

发表于 2019-3-17 20:59:13 | 显示全部楼层
那么替代的方法是什么

该用户从未签到

发表于 2020-8-26 11:34:48 | 显示全部楼层
所以没有新的替代方法吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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