查看: 989|回复: 3

图元关闭光照后异常变色

[复制链接]

该用户从未签到

发表于 2014-1-17 10:51:38 | 显示全部楼层 |阅读模式
本帖最后由 gis_wudi 于 2014-1-17 10:54 编辑

遇到个问题,用三角面绘制的时候,关闭了光照,但在旋转视角后,会莫名其妙的变色了,不知道是什么情况,望解答

正常显示

正常显示

异常变色了

异常变色了

贴一部分代码
                        。。。
                        osg::ref_ptr<osg::Vec3Array> normals = new osg::Vec3Array();

                        normals->push_back(osg:uat(osg:I_2+dip,at)*dipVec);
                        normals->push_back(osg::Quat(osg::PI_2+dip,at)*dipVec);

                        normals->push_back(osg::Quat(osg::PI_2+dip,at)*dipVec);
                        normals->push_back(osg::Quat(osg::PI_2+dip,at)*dipVec);

                        normals->push_back(up);
                        normals->push_back(up);

                        osg::ref_ptr<osg::Vec2Array> texs = new osg::Vec2Array();

                        texs->push_back(osg::Vec2(0,0));
                        texs->push_back(osg::Vec2(hLen / bCTex,0));

                        float ratio = 1 - gEdgeDisFrombEdge / (gEdgeDisFrombEdge + ((*vertex)[2]-(*vertex)[0]).length());

                        texs->push_back(osg::Vec2(0,ratio));
                        texs->push_back(osg::Vec2(hLen / bCTex,ratio));

                        texs->push_back(osg::Vec2(0,1));
                        texs->push_back(osg::Vec2(hLen / bCTex,1));

                        osg::ref_ptr<osg::Geometry> geom = new osg::Geometry;
                        geom->addPrimitiveSet( new osg:rawArrays(
                                osg::PrimitiveSet::TRIANGLE_STRIP,
                                0, vertex->size()));

                        geom->setVertexArray(vertex);
                        geom->setNormalArray(normals);
                        geom->setNormalBinding(osg::Geometry::BIND_PER_VERTEX);

                        geom->setTexCoordArray(0,texs);
                        geom->getOrCreateStateSet()->setTextureAttributeAndModes(0,bcTexture,osg::StateAttribute::ON);
                        //geom->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF);

                        baseGeo->addDrawable(geom);
                }       

                prePos = pos * mat;
        }
        baseGeo->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF);

该用户从未签到

发表于 2014-1-18 22:04:54 | 显示全部楼层
一个建议是所有的Geometry都应该有setColorArray,哪怕只是全局的一个color值。因为颜色是一种可以继承的状态

该用户从未签到

 楼主| 发表于 2014-1-19 23:20:26 | 显示全部楼层
确实是这个问题,谢谢Array解答,不知道有没有可以直接设置属性,限制颜色状态的继承,我试了GL_COLOR和COLOR_MATERIAL相关的,好像没有什么作用

该用户从未签到

 楼主| 发表于 2014-1-19 23:20:43 | 显示全部楼层
array 发表于 2014-1-18 22:04
一个建议是所有的Geometry都应该有setColorArray,哪怕只是全局的一个color值。因为颜色是一种可以继承的状 ...


确实是这个问题,谢谢Array解答,不知道有没有可以直接设置属性,限制颜色状态的继承,我试了GL_COLOR和COLOR_MATERIAL相关的,好像没有什么作用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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