查看: 1885|回复: 9

请教关于 光照 的问题!谢谢各位!

[复制链接]

该用户从未签到

发表于 2012-3-13 23:30:56 | 显示全部楼层 |阅读模式

是这样子的,我在场景里面加载了一个模型,然后那模型好苍白,模型本身的颜色都没了(我那个模型貌似没有材质,是默认的那种颜色比较灰的颜色)。。


所以,我想问一下,是不是因为光照的原因?

还有,我如何做,才能让某一个加载的模型不受光照啊?(就是想保持该模型默认的颜色)
(OpenGL里面是glDisable(GL_LIGHTING),  这里面都不知道把这句话加在那里..)

或者,在程序里面有没有什么办法定义一个模型的属性呀?(镜面反射、环境反射、散射之类的)

谢谢各位啦~~~
1.jpg

该用户从未签到

发表于 2012-3-14 10:47:51 | 显示全部楼层
遇到了同样的问题,同问~~

该用户从未签到

发表于 2012-3-15 09:51:23 | 显示全部楼层
setMode(GL_LIGHTING, OFF)

该用户从未签到

发表于 2012-3-16 09:56:21 | 显示全部楼层
按array的方法做了,好像没效果

该用户从未签到

发表于 2012-3-16 12:15:46 | 显示全部楼层
array说的方法没错,只是要注意写法,请参考osgGA::StatesetManilu那个事件处理中的禁用光照部分

该用户从未签到

 楼主| 发表于 2012-3-16 23:09:19 | 显示全部楼层
allenshen 发表于 2012-3-16 09:56
按array的方法做了,好像没效果

array说的是对了 只是新手估计不太会操作

然后 我按照 fenma 的说法,尝试了一下,确实是可以的,这是他说的那个文件里面的 一段禁用/启用光照的源码:

void StateSetManipulator::setLightingEnabled(bool newlighting)
{
    if (_lighting == newlighting) return;
   
    clone();

    _lighting = newlighting;
    if( _lighting ) _stateset->setMode(GL_LIGHTING,osg::StateAttribute::ON);
    else _stateset->setMode(GL_LIGHTING,osg::StateAttribute::OVERRIDE|osg::StateAttribute::OFF);
}

3Q~~~~

该用户从未签到

 楼主| 发表于 2012-3-16 23:18:41 | 显示全部楼层
array 发表于 2012-3-15 09:51
setMode(GL_LIGHTING, OFF)

OK了,尝试了一下, 成功了。 谢谢!   

该用户从未签到

 楼主| 发表于 2012-3-16 23:32:27 | 显示全部楼层
fenma3422 发表于 2012-3-16 12:15
array说的方法没错,只是要注意写法,请参考osgGA::StatesetManilu那个事件处理中的禁用光照部分

您好,感谢您上面精彩的回答!
在此,我冒昧的再次劳烦您一下,想向您请教一个问题,希望您能抽空解惑一下,谢谢您!

就是,我用下面这种方式创建了一个窗口:

int main()
{
        osgWidget::WindowManager* wm = new osgWidget::WindowManager(&viewer, WINDOW_WIDTH, WINDOW_HEIGHT, MASK_2D);
        osgWidget::Window* menu = new osgWidget::Box("menu", osgWidget::Box::HORIZONTAL);
        .......
        viewer.setCameraManipulator(new CSouth());
        .......

        return osgWidget::createExample(viewer, wm, group);
}

我希望能够用我自己定义的w/s/a/d 来控制人物移动。但是,我用这种方式创建窗口后,w/s 貌似是系统默认的交互键,

我希望能够屏蔽系统的定义的w/s键的功能,(即,我希望我按下w/s键后,能够达到我摄像机里面定义的前进/后退操作,而不是显示一些程序的运行状态)



前段时间,我好像看到过这样子的问题,然后有人回答是重载一些类...我确实不知道该重载那些类...以及如何重载...

所以,在此,我希望能够向您寻求帮助:我大概需要如何做才能达到我的目的,谢谢~~~

该用户从未签到

发表于 2012-3-17 09:20:26 | 显示全部楼层
本帖最后由 fenma3422 于 2012-3-17 09:21 编辑

不用重载,再osgGA::StatesetManilu和其他EventHandle中可以直接设置改变状态的按键,他们默认是w、s,你设置成别的键即可

该用户从未签到

发表于 2012-9-11 10:24:17 | 显示全部楼层
l917685120 发表于 2012-3-16 23:18
OK了,尝试了一下, 成功了。 谢谢!

您好,我遇到跟您一样的问题,但帖子没看懂,具体怎么做没明白,请您指点一二……
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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