光源:
1):环境光:环境光是一种低强度的光,由光线经过周围环境表面多次反射后形成的,利用环境光可以描述一块区域的亮度,通常在场 景中,环境光的颜色是一个常量.
2):太阳光:即定向光源,特点是从无穷远出发射光线,光线是平行的,光线强度不会随着距离衰减.
3):点光源:在有限空间内某个点上发出的光线,光线强度会随着距离衰减.衰减系数一般是距离的二次多项式倒数.
4):聚光灯:特点是有主照射方向,强度随着距离衰减,并且光线延着中心向外衰减.
漫反射
理想的漫反射表面把光线向所有方向均匀的散射,因此,这样的表面在所有观察者看来亮度都一样,理想的慢反射表面是如此粗糙,以至于向各个方向反射的光线强度都相等.这样的表面被成为Lambert表面(兰博特),OpenGL固定管线,或者Shader基于这个定律来建模.
环境光也就被建模为一个没有光源、没有方向并且对场景中的所有物体产生相同的点亮效果的一种光。
漫反射光强调的是光照射到物体表面的角度对物体亮度效果的影响.
漫反射光最重要的特性就是光的方向
镜面反射光与其说是光本身的特性不如说是物体的一种属性,
这种属性 是在入射光和观察者的视角都在某个特定的角度时会使物体高度发光,比如在晴天会看到小汽车的某个边缘会格外的发光耀眼。
计算镜面反射光既要考虑光的入射角度又要考虑观察者的视角位置。
通过同时增大或者缩小各通道的值,可以在保持颜色不变的情况下使其变量或者变暗。
光照与阴影
通过vtkVolumeProperty可以设置体绘制的阴影效果,阴影效果主要受环境光系数、散射光系数、反射光系数和高光强度4个参数影响。
SetDiffuse() //设置散射光系数(使具有立体感)
SetAmbient() //设置环境光系数(光的强度)
SetSpecular() //设置反射光系数(光滑度,明暗)
一般情况下,着三个系数之和为1.
高光强度系数用于控制体绘制外观平滑程度,使用SetSpecularPower()函数设置。
vtkVolumeProperty中默认是关闭阴影效果,因此需要显示调用ShadeOn()函数来打开阴影效果。
光线投射中,投射光线上的采样步长是一个很重的参数,设置函数:SetSampleDistance(float),步长越小,采样点越多,效果越好。但计算量变大。当数据变化剧烈时,应该减少采样步长以获得更好的效果。
Ambient demo:https://lorensen.github.io/VTKExamples/site/Cxx/Rendering/AmbientSpheres/
Diffuse demo:https://lorensen.github.io/VTKExamples/site/Cxx/Rendering/DiffuseSpheres/
Ambient demo:https://lorensen.github.io/VTKExamples/site/Cxx/Rendering/SpecularSpheres/