我正在尝试实现一个简单的物理精确的射线纹理器。我在灰度上工作(因此使用光强度),但我正在挣扎着颜色。
我如何计算有色(非白色)光与表面之间的关系。假设浅色是RGB(1.0,0.9,0.8),表面为RGB(0.8,0.9,1.0)?
以非常基本的方式
让我们假设您选择了phong阴影模型,或者选择不做任何特定的阴影。
- 您需要场景的环境系数(描述场景中颜色总体增强的系数),假设它是0.3;然后将对象的颜色乘以系数。
- 然后,您需要计算phong阴影模型,或者只需要对象的颜色,o任何特殊的阴影模型。
- 然后,如果您的反射矢量击中了任何一个,则需要计算下一个对象的颜色,再次从步骤1开始(递归)
- 总和所有结果
代码:
Color3 trace(..)
{
...
Color3 ambient = object.color * 0.3;
Color3 phong = phongModel(..) or object.color;
Color3 reflection = trace(..);
return ambient + phong + reflection;
}