c++ - 在光线追踪中为对象着色
问题描述
我正在尝试渲染屏幕。到目前为止,我已经将我的光线与场景中的对象相交,如果有交叉点,我会为该交叉点设置随机颜色。
接下来我需要做的是根据像素值对像素进行着色。我看过 10 多个教程,阅读了几个关于像素着色的网站。但是,我正在阅读的文件没有对象的颜色。相反,它具有以下内容:
- 环境光,具有 rgb 颜色
- 点光源,具有 rgb 颜色和位置
- 对象具有环境、漫反射、镜面反射、镜面反射(以 rgb 为单位)和 phong 指数(一个值)。
另外,我知道发出的光的强度与距离的平方成正比(随着距离变大,物体上的光越少)。
如果我有对象的颜色,我可以使用下面的算法:
Color3 trace(..)
{
...
Color3 ambient = object.color * 0.3;
Color3 phong = phongModel(..) or object.color;
Color3 reflection = trace(..);
return ambient + phong + reflection;
}
如中所述:如何计算反射颜色?
我没有物体的颜色,只有反射值。如何计算对象的颜色?
解决方案
但是,我正在阅读的文件没有对象的颜色。相反,它具有以下内容:
...
- 对象具有环境、漫反射、镜面反射、镜面反射(以 rgb 为单位)和 phong 指数(一个值)。
如果你有 RGB 所有这些,那就是对象的颜色。
将入射光与物体以给定角度反射它的方式相乘,结果就是感知它的颜色。
推荐阅读
- python - 使用函数和for循环将文本与多个文件的列表进行比较
- php - 包含 database.php 不起作用 - 白屏
- java - 隐藏案例,直到满足参数
- excel - 使用 VBA 和 WinSCP 同步本地和远程文件
- node.js - Cookie 未显示在来自跨源 api 获取请求的响应中
- c++ - 打印二维数组时内存泄漏
- javascript - 错误:找不到模块'/app/index.js' - heroku
- angular - Angular:从资产文件夹中读取所有文件
- javascript - 如何在Angular中清除组合框选定的值
- python - Pygame:添加主菜单功能时无法移动播放器