游戏开发论坛

 找回密码
 立即注册
搜索
查看: 7228|回复: 6

请问为什么光源需要环境光、漫射光和镜面光这三个属性?

[复制链接]

50

主题

236

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
发表于 2012-10-29 16:33:00 | 显示全部楼层 |阅读模式
在现实世界,光源不就是一种颜色么?

这是D3D里定义一个方向光的代码:

  1. D3DLIGHT9 InitDirectionalLight(D3DXVECTOR3* direction, D3DXCOLOR* color)
  2. {
  3.         D3DLIGHT9 light;
  4.         ::ZeroMemory(&light, sizeof(light));

  5.         light.Type      = D3DLIGHT_DIRECTIONAL;
  6.         light.Ambient   = *color * 0.6f;
  7.         light.Diffuse   = *color;
  8.         light.Specular  = *color * 0.6f;
  9.         light.Direction = *direction;

  10.         return light;
  11. }
复制代码


我觉得设置一个Diffuse就够了嘛,为什么还要设置环境光和镜面光呢?

34

主题

844

帖子

1755

积分

金牌会员

Rank: 6Rank: 6

积分
1755
发表于 2012-10-30 16:13:00 | 显示全部楼层

Re:请问为什么光源需要环境光、漫射光和镜面光这三个属

环境光的存在意义:
当人站在街上,人所受到的光不只是来自太阳的直射光。
比如说,人把脚抬高时,太阳光是无法照射脚底的。但是我们却可以看到脚底并不是纯黑色。
我们能看到此人的脚底是什么图案。因为地面上的反射光照到脚底了。
对吧?
如果没有环境光,那么画面看上去会很“假”。

镜面光的存在意义:
就是为了“闪闪发光”的“反射效果”。
特点是:正好处于反射角度时才100%闪亮。只要有一点点角度偏差就干脆不亮。

但愿我讲明白了。

还有,感谢楼主提供给我的 DirectDraw 的代码样本。

4

主题

1111

帖子

1498

积分

金牌会员

Rank: 6Rank: 6

积分
1498
发表于 2012-10-30 19:08:00 | 显示全部楼层

Re:请问为什么光源需要环境光、漫射光和镜面光这三个属

你所谓的只有一个漫反射的意思,无非就是
环境光是纯黑
镜面是纯白

50

主题

236

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
 楼主| 发表于 2012-11-1 11:25:00 | 显示全部楼层

Re: Re:请问为什么光源需要环境光、漫射光和镜面光这三

snghun: Re:请问为什么光源需要环境光、漫射光和镜面光这三个属性?

环境光的存在意义:
当人站在街上,人所受到的光不只是来自太阳的直射光。
比如说,人把脚抬高时,太阳光...


我的意思是说,环境光应该也是一种光源,他们是和点光源,方向光和聚光灯是同类型的,就是他是可以独立存在的,
像这样子:

// 环境光
light.type = LIGHT_EMBIENT;
light.color = 0xC8C8C8;

// 点光源
light.type = LIGHT_POINT;
light.color = 0xC8C8C8;

// 方向光
light.type = LIGHT_DIRECTIONAL;
light.color = 0xC8C8C8;

至于是不是镜面光,这个就要看他照的方向,和材质属性了,
也就是说,点光源,方向光和聚光灯,都有可能产生镜面光。

还有,我认为点光源,方向光和聚光灯的color就是漫射光,因为他们都是直射光,但如果材质是光滑的,将变为镜面光效果.

这是我的看法,
所以,我才疑惑,为什么一个光源属性,要把不同类型的东西放到一个结构体里。
所谓的不同,就是环境光他和点光源一样,是一个独立的光源类型,而镜面光和漫射光这两个完全是一个光源,只是因为材质(物体表面是否光滑)的不同,所产生的效果不同罢了。


PS:《3D游戏编程大师技巧》就是用这个思路来计算光照的

PS: 可能需要说明下我所理解的环境光,漫射光和镜面光:
环境光:经过无数个物体所反射出来的光,间接把一个物体照亮
漫射光:光线直接照射在物体上,但由于物体表面很粗糙,导致你从各个角度看起来都一样,即没有高光点
镜面光:光线直接照射在物体上,但由于物体表面很光滑,并且你的观察角度正好使得光线反射到了你的眼睛里,产生了高光点.

10

主题

149

帖子

149

积分

注册会员

Rank: 2

积分
149
QQ
发表于 2012-11-1 11:57:00 | 显示全部楼层

Re:请问为什么光源需要环境光、漫射光和镜面光这三个属

轩辕教主不搞2D RPG了?

50

主题

236

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
 楼主| 发表于 2012-11-1 12:25:00 | 显示全部楼层

Re: Re:请问为什么光源需要环境光、漫射光和镜面光这三

笨笨雁: Re:请问为什么光源需要环境光、漫射光和镜面光这三个属性?

轩辕教主不搞2D RPG了?


哈哈,雁大侠,幸会,幸会.

1

主题

6

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2012-11-2 21:19:00 | 显示全部楼层

Re: 请问为什么光源需要环境光、漫射光和镜面光这三个属

LZ貌似对这个光照模型的概念没有理解,这只是一种实现上对现实情形的一种近似的模型而已,没有一定说要用这三个属性。其实也可以想其他的模型,但是要在实现上可行。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-27 13:06

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表