查看: 1192|回复: 3

osg::LineWidth 的问题

[复制链接]

该用户从未签到

发表于 2015-2-10 13:42:13 | 显示全部楼层 |阅读模式
各位,我在使用osg:ineWidth,发现有个问题,当将线宽设置为1.0,10.0,线的宽度确实变宽了,
但是将线宽设置为100.0后,实际显示的时候线宽未继续变大了。

下面是我测试代码和截图(分别是线宽,为1.0,10.0,100.0的结果)。
请问这是osg的bug吗?还是小弟使用错误了。大侠请指点。

  1. //测试,如何修改线的宽度

  2. osg::Drawable* createAxis2(const osg::Vec3& corner,const osg::Vec3& xdir,const osg::Vec3& ydir,const osg::Vec3& zdir)
  3. {
  4.         // set up the Geometry.
  5.         osg::Geometry* geom = new osg::Geometry;

  6.         osg::Vec3Array* coords = new osg::Vec3Array(6);
  7.         (*coords)[0] = corner;
  8.         (*coords)[1] = corner+xdir;
  9.         (*coords)[2] = corner;
  10.         (*coords)[3] = corner+ydir;
  11.         (*coords)[4] = corner;
  12.         (*coords)[5] = corner+zdir;

  13.         geom->setVertexArray(coords);

  14.         osg::Vec4 x_color(0.0f,1.0f,1.0f,1.0f);
  15.         osg::Vec4 y_color(0.0f,1.0f,1.0f,1.0f);
  16.         osg::Vec4 z_color(1.0f,0.0f,0.0f,1.0f);

  17.         osg::Vec4Array* color = new osg::Vec4Array(6);
  18.         (*color)[0] = x_color;
  19.         (*color)[1] = x_color;
  20.         (*color)[2] = y_color;
  21.         (*color)[3] = y_color;
  22.         (*color)[4] = z_color;
  23.         (*color)[5] = z_color;

  24.         geom->setColorArray(color);
  25.         geom->setColorBinding(osg::Geometry::BIND_PER_VERTEX);

  26.         geom->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::LINES,0,6));

  27.         osg::StateSet* stateset = geom->getOrCreateStateSet();
  28.         osg::LineWidth* linewidth = new osg::LineWidth();
  29.         linewidth->setWidth(100.0f); //改变此值
  30.         stateset->setAttributeAndModes(linewidth,osg::StateAttribute::ON);
  31.         stateset->setMode(GL_LIGHTING,osg::StateAttribute::OFF);       

  32.         return geom;
  33. }

  34. osg::Node* createModel2()
  35. {
  36.         // create the root node which will hold the model.
  37.         osg::Group* root = new osg::Group();

  38.         osg::Geode* axis = new osg::Geode();
  39.         axis->addDrawable(createAxis2(osg::Vec3(0.0f,0.0f,0.0f),osg::Vec3(5.0f,0.0f,0.0f),osg::Vec3(0.0f,5.0f,0.0f),osg::Vec3(0.0f,0.0f,5.0f)));

  40.         root->addChild(axis);

  41.         return root;
  42. }

  43. int main(int, char**)
  44. {
  45.         // construct the viewer
  46.         osgViewer::Viewer viewer;

  47.         // set the scene to render
  48.         viewer.setSceneData(createModel2());
  49.         viewer.addEventHandler(new osgViewer::WindowSizeHandler);
  50.         // run the viewers frame loop
  51.         return viewer.run();
  52. }
复制代码


线宽为1.0

线宽为1.0

线宽未10.0

线宽未10.0

线宽为100.0

线宽为100.0

该用户从未签到

 楼主| 发表于 2015-2-11 11:30:33 | 显示全部楼层
在《opengl 编程指南》一书上看到:opengl3.1不支持线宽大于1.0的值。
可是仍然无法解释我遇到的这个问题啊。

该用户从未签到

 楼主| 发表于 2015-2-12 10:54:22 | 显示全部楼层
看来要过年了,大牛都回家啦。。。

该用户从未签到

 楼主| 发表于 2015-2-27 14:05:59 | 显示全部楼层
线宽的问题难道诸位都无法复现?没有遇到这个问题。代码可以直接跑起来的。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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