Opengl 光照 为什么有的物体有光照,有的没有呢?

xufangpang 2009-11-10 11:34:28


为什么我的光照效果是这样的呀。

绘制函数如下:
void CScan3DDoc::Draw()
{
glPushMatrix();
glTranslatef(m_pView->light_position[0],m_pView->light_position[1],m_pView->light_position[2] );
glutSolidTeapot(5);

glutSolidTorus(10.0,15.0,50,50);
glutSolidTeapot(5);
glTranslatef(0.0,15.0,25.0);
glutSolidTeapot(8);
glutSolidSphere(20.0,50,50);
glPopMatrix();


glutSolidTeapot(30.0);

}

//---------光照---------------

void CScan3DView::glEnableLight()
{
/**/
GLfloat global_ambient[]={1.0f,1.0f,1.0f,1.0f};
GLfloat light0_position[]={0.0f,10.0f,-50.0f,1.0f};
GLfloat white_light[]={1.0,0.5,0.3,1.0};
GLfloat lmodel_ambient[]={0.1,0.1,0.1,1.0};
GLfloat spot_direction[]={0.0,0.0,50.0,1.0};


light_position[0]=light0_position[0];
light_position[1]=light0_position[1];
light_position[2]=light0_position[2];


glLightfv(GL_LIGHT0,GL_AMBIENT,global_ambient);
glLightfv(GL_LIGHT0,GL_DIFFUSE,white_light);
glLightfv(GL_LIGHT0,GL_SPECULAR,white_light);


glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,GL_FALSE);
glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER,GL_TRUE);
glLightModelfv(GL_LIGHT_MODEL_AMBIENT,lmodel_ambient);

glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glDepthFunc(GL_LESS);
glEnable(GL_DEPTH_TEST);

m_bLightEnabled=TRUE;

glSetMaterial();
}

//--------------------------------------

void CScan3DView::glSetMaterial()
{
GLfloat amb_[4], dif_[4], spe_[4], shin_;
GLfloat memi[4] = {0, 0, 0, 0};

amb_[0]=0.105882f, amb_[1]=0.058824f, amb_[2]=0.113725f, amb_[3]=1.0f;
dif_[0]=0.427451f, dif_[1]=0.470588f, dif_[2]=0.541176f, dif_[3]=1.0f;
spe_[0]=0.333333f, spe_[1]=0.333333f, spe_[2]=0.521569f, spe_[3]=1.0f;
shin_ =9.846150f;

glMaterialfv(GL_FRONT, GL_AMBIENT, amb_);
glMaterialfv(GL_FRONT, GL_DIFFUSE, dif_);
glMaterialfv(GL_FRONT, GL_SPECULAR, spe_);
glMaterialfv(GL_FRONT, GL_EMISSION, memi);
glMaterialf(GL_FRONT, GL_SHININESS, shin_);


}

同样的光照设置,同样的材质,在一个函数中绘制,为什么只有glutsolidTeapot,有光照效果呢?

有没有朋友遇到过同样的情况?实在是很郁闷,期待大家的解答,不胜感激!
...全文
217 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
fandh 2009-11-11
  • 打赏
  • 举报
回复
你上面的哪儿设置的视点或者其它方面与位置相关的参数调一下!这个要你自己调试了!
xufangpang 2009-11-11
  • 打赏
  • 举报
回复
这样合算,每个人15分,呵呵
xufangpang 2009-11-11
  • 打赏
  • 举报
回复
两位朋友,问题解决了。谢谢你们的热心帮助。

问题是法向,我scale了整个模型,法向大小也跟着边了。需要将normal normalize一下!

为了感谢二位一人10分,我自己也功不可没,我很想给自己留10分,呵呵,没意见吧,^_^。
xufangpang 2009-11-10
  • 打赏
  • 举报
回复
http://hi.csdn.net/attachment/200911/10/25622_1257843022r9Nj.jpg
摆动位置Torus 上会有一点点变化。
xufangpang 2009-11-10
  • 打赏
  • 举报
回复
白色的是Torus。好奇怪
xufangpang 2009-11-10
  • 打赏
  • 举报
回复


不行。
fandh 2009-11-10
  • 打赏
  • 举报
回复
你将球的位置,换成茶壶,看看效果怎么样?
是不是你实际画图不同导致的?
xufangpang 2009-11-10
  • 打赏
  • 举报
回复
还是不行,其他的还是白色。就算是重叠了。也只有teapot有光照效果。把其他的绘制语句放在teapot绘制语句位置,也没什么变化
feilinhe 2009-11-10
  • 打赏
  • 举报
回复
你把当前显示茶壶的地方换成显示那个球,就知道是不是位置的关系了
xufangpang 2009-11-10
  • 打赏
  • 举报
回复
我感觉不一样的地方就是调用了不同的绘制函数,球和teapot有重叠的地方,关照效果差别却很大。好像不存在位置的问题。
feilinhe 2009-11-10
  • 打赏
  • 举报
回复
物体摆放的位置的关系吧,
也可能是你的 glViewport的设置问题,设置的观察距离太近了
fandh 2009-11-10
  • 打赏
  • 举报
回复
那么,两个不一样的地方是哪儿?材质?位置?楼主先都改成一样的看看!

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧