查看: 1989|回复: 4

关于光源的问题

[复制链接]

该用户从未签到

发表于 2013-1-2 11:15:16 | 显示全部楼层 |阅读模式
昨天在一些简单的几何模型中加入光源以后模型都变黑了,包括和光源同一位置的球体也是黑的,球体原先是透明的,如果球体不是透明的又和光源重合会对光源有影响吗?平面图形的法线对光的影响具体是怎么的???不管我怎么变换法线,其中一个平面的多边形也会都变黑。想问下哪位大神可以告诉我为什么?谢谢哈!

该用户从未签到

发表于 2013-1-2 23:28:26 | 显示全部楼层
法线设了没

该用户从未签到

 楼主| 发表于 2013-1-3 07:12:46 | 显示全部楼层
Mooneast 发表于 2013-1-2 23:28
法线设了没

平面图形设了啊但就是黑的,内设几何体有法线吗???

该用户从未签到

发表于 2013-1-4 09:43:45 | 显示全部楼层
您的光源参数和材质参数设置是否是合理的,还有您是否高估了固定流水线光照的表现力

该用户从未签到

 楼主| 发表于 2013-1-4 09:51:49 | 显示全部楼层
array 发表于 2013-1-4 09:43
您的光源参数和材质参数设置是否是合理的,还有您是否高估了固定流水线光照的表现力

你帮我看看??
//设置材质
        osg::ref_ptr <osg::Material  > material=new osg::Material ;
        osg::ref_ptr <osg::Texture2D  >texture2d=new osg::Texture2D  ;
        osg::ref_ptr <osg::Image >image;

        //光照颜色
        material->setAmbient (osg::Material ::FRONT_AND_BACK ,osg::Vec4f (1.0,1.0,1.0,1.0));
        //混合光颜色
        material->setDiffuse (osg::Material ::FRONT_AND_BACK ,osg::Vec4f (0.5,0.5,0.5,1.0));
        //镜面反射光的颜色
        material->setSpecular (osg::Material ::FRONT_AND_BACK ,osg::Vec4f (1.0,0.0,0.0,1.0));
        //影像点大小
        material->setShininess (osg::Material ::FRONT_AND_BACK ,6.0);
        //设置纹理
        image=osgDB::readImageFile ("Image/whitemetal_diffuse.jpg");
        if(image.valid())
        {
                texture2d->setImage (image.get ());
        }
        //设置状态
        geode->getOrCreateStateSet ()->setAttributeAndModes (material.get (),osg::StateAttribute ::ON );
        geode->getOrCreateStateSet ()->setMode (GL_BLEND,osg::StateAttribute ::ON );
        geode->getOrCreateStateSet ()->setMode (GL_DEPTH_TEST,osg::StateAttribute ::ON );
        geode->getOrCreateStateSet ()->setTextureAttributeAndModes (0,texture2d.get (),osg::StateAttribute ::ON );

                //增加光源
        osg::ref_ptr <osg:ight > toplight=new osg::Light ;
        toplight->setLightNum (0);//给light设置ID
        toplight->setPosition (osg::Vec4 (20.0f,20.0f,-20.5f,1.0f));//位置
        toplight->setAmbient (osg::Vec4 (1.0f,1.0f,1.0f,1.0f));//全局光
        toplight->setDiffuse (osg::Vec4 (1.0f,1.0f,1.0f,1.0f));//混合光,,省略了镜面关
        toplight->setConstantAttenuation (0.1f);//
        toplight->setLinearAttenuation (0.1f);//光的衰减度
        toplight->setQuadraticAttenuation (0.1f);

        osg::ref_ptr <osg::LightSource > ls=new osg::LightSource ;
        ls->setLight (toplight);
        ls->setLocalStateSetModes (osg::StateAttribute ::ON );

        osg::ref_ptr <osg::Node >cow=new osg::Node ;
        cow=osgDB::readNodeFile ("cow.osg");

   root ->addChild (geode.get()) ;
   root ->addChild (ls);
   root->addChild (cow);
谢谢哈!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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