3D程序设计中,物体在光照的影响下,有些部分显示的更亮,而有些部分则相对较暗,原理是什么???

lizhigang34 2009-02-11 03:22:56
现实中,一个物体在阳光照射下,有些面会反射光线强些,有些反射光线弱些..要模拟这样的效果,需要设置物体的材质??还是光照??

说说其中的原理,或给个介绍的比较详细的链接...谢谢
...全文
255 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
kissaxiao 2011-08-15
  • 打赏
  • 举报
回复
UP 学习
zzz822163 2009-02-20
  • 打赏
  • 举报
回复
DirectX 9 3D游戏设计入门,封面上有条龙,大家称为红龙书
精通directx 3D图形与动画程序设计,这本里有一些用hlsl的例子
lizhigang34 2009-02-20
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 zzz822163 的回复:]
http://blog.csdn.net/kesalin/archive/2008/03/23/2209963.aspx
也可以看下这里,建议还是买本书来看看吧
[/Quote]
我也很想系统的学习下3D程序设计,,3D程序设计中有什么经典的著作吗??就像我说,如果我想学VC,大家肯定会推荐我看《windows程序设计》..
zzz822163 2009-02-20
  • 打赏
  • 举报
回复
http://blog.csdn.net/kesalin/archive/2008/03/23/2209963.aspx
也可以看下这里,建议还是买本书来看看吧
zzz822163 2009-02-20
  • 打赏
  • 举报
回复
http://www.cppblog.com/lai3d/archive/2008/03/28/45572.html
多重纹理中的黑暗纹理可以实现
roadblossom 2009-02-19
  • 打赏
  • 举报
回复
up
BORLANDSUN 2009-02-19
  • 打赏
  • 举报
回复
可参考光照公式.
lizhigang34 2009-02-12
  • 打赏
  • 举报
回复
我把光源的属性设置如下:
DiffuseColor = (255,255,255) //漫射光
AmbientColor = (255,255,255) //环境光
SpecularColor = (255,255,255) //镜面光
再设置材质的属性如下:
mtrl.Ambient = (0,0,0);
mtrl.Diffuse = (255,255,255);
mtrl.Specular = (255,255,255);
mtrl.Emissive = (0,0,0);

我再移动光源,物体的向光部分会被照亮,而其他背光部分就是黑的..
我现在就是想让效果更逼真点,被照亮的部分会因为物体表面的不同,而有些地方显示的更亮,有些地方相对更暗,这样该怎么做??

rikpan 2009-02-12
  • 打赏
  • 举报
回复
分子网格,不同的子网格使用不同的材质
antimatterworld 2009-02-12
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 lizhigang34 的回复:]
我就是这样设置的啊,,材质的Specular属性设置成(255,255,255),然后光源颜色设置成(255,255,255)..
这样是整个物体的属性,…
[/Quote]
参考阴影映射图(ShadowMap)和阴影体(ShadowVolume)算法。
把阴影换成光柱。
然后单独渲染阴影部分。
lizhigang34 2009-02-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 antimatterworld 的回复:]
C/C++ codeD3DMATERIAL9.Specular = D3DCOLORVALUE(1.0,1.0,1.0,1.0);


对所有的光线的镜面反射参数为满值。

C/C++ code然后设置光源的颜色是(1.0,1.0,1.0,1.0);


在某一特定角度,就会出现很明亮的绚丽效果。
主要是物体镜面反射和漫反射的物理特性。
[/Quote]
我就是这样设置的啊,,材质的Specular属性设置成(255,255,255),然后光源颜色设置成(255,255,255)..
这样是整个物体的属性,我现在是想让这个物体上某部分的亮度比其他部分高.
IONPhantom 2009-02-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lizhigang34 的回复:]
我把光源的属性设置如下:
DiffuseColor = (255,255,255) //漫射光
AmbientColor = (255,255,255) //环境光
SpecularColor = (255,255,255) //镜面光
再设置材质的属性如下:
mtrl.Ambient = (0,0,0);
mtrl.Diffuse = (255,255,255);
mtrl.Specular = (255,255,255);
mtrl.Emissive = (0,0,0);

我再移动光源,物体的向光部分会被照亮,而其他背光部分就是黑的..
我现在就是想让效果更逼真点,被照亮的部分会因…
[/Quote]
你要做的是调整环境光也就是AmbientColor 和mtrl.Ambient 才可以,使用这样的环境光只是简单的光照模型,光照不到的地方显示环境光和环境材质的作用结果,如果想要更真实地,就需要更换一套光照模型了
antimatterworld 2009-02-12
  • 打赏
  • 举报
回复
补充说明一下:
一个物体即有镜面反射特性,又有漫反射特性。
不同物体这两种特性的强弱是不同的,比如金属的镜面反射特性就比较明显,而漫反射特性就不明显。
一块粗糙的纸,漫发射就比较明显,镜面反射就不明显。
光源也要正确,光的强度和颜色值也影响最终的效果。
antimatterworld 2009-02-12
  • 打赏
  • 举报
回复
D3DMATERIAL9.Specular = D3DCOLORVALUE(1.0,1.0,1.0,1.0);

对所有的光线的镜面反射参数为满值。
然后设置光源的颜色是(1.0,1.0,1.0,1.0);

在某一特定角度,就会出现很明亮的绚丽效果。
主要是物体镜面反射和漫反射的物理特性。
lizhigang34 2009-02-12
  • 打赏
  • 举报
回复
高手们都在忙吗??? 或者有别的什么办法能实现这种特效吗??
IONPhantom 2009-02-12
  • 打赏
  • 举报
回复
一般的光照模型是 LightFinal=环境光+普通光照+高光
普通光照一般就是 Light dot Normal
高光一般是 Eye dot Half
你说的特别亮的地方应该是高光
zzz822163 2009-02-11
  • 打赏
  • 举报
回复
好象材质和光照都会有影响,这个应该是属于GPU编程的范围了,固定管道恐怕没那么强大吧
netlib 2009-02-11
  • 打赏
  • 举报
回复
对静态物体,如房屋可事先渲染好融入Terrain LightMap。
对动态物体,可用Projection Shadow,简单说就是从光源方向把物体影子渲染到一张纹理,然后通过使用纹理坐标生成(TexCoordGen)和修改相应Texture Coordinates Matrix,把这张图贴到地面渲染。
chiwa737 2009-02-11
  • 打赏
  • 举报
回复
是物体的性质, 可以看看phong lighting当例子作为参考, opengl red book 里有phong lighting的说明,是免费的官方网上有下载

http://www.opengl.org/documentation/red_book/
lizhigang34 2009-02-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wwwxxb40000 的回复:]

是设置光照,看图形学书吧
[/Quote]
Would you mind introducing more details??
加载更多回复(1)

19,464

社区成员

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

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