软件光栅化渲染器(九)
来源:互联网 发布:宁波行知小学总课表 编辑:程序博客网 时间:2024/04/19 10:46
光照计算
暂时只加入了点光源
//点光源class PointLight :public Light{public: //衰减系数 double kc; double kl; double kq; Color CalculateColor(const Vertex3D &vertex, const Material &material, const Point3D &objectPos) { //计算环境光 double r = material.ra.r; double g = material.ra.g; double b = material.ra.b; //计算散射光 Vector3D l = position- vertex.vertex; double d = CalculateVector3DLength(l); double dp = VectorDot(vertex.normal, l); if (dp > 0) { double atten = kc + kl * d + kq *d * d; r += material.rd.r * dp / atten; g += material.rd.g * dp / atten; b += material.rd.b * dp / atten; } //计算镜面高光 VectorNormalize(l); double x = l.x - 2 * VectorDot(l, vertex.normal) * vertex.normal.x; double y = l.y - 2 * VectorDot(l, vertex.normal) * vertex.normal.y; double z = l.z - 2 * VectorDot(l, vertex.normal) * vertex.normal.z; Vector3D rVector = { x,y,z,1 }; Vector3D v = objectPos - vertex.vertex; double is = pow(VectorDot(rVector, v), material.shininess); if (is > 0) { r += material.rs.r * is; g += material.rs.g * is; b += material.rs.b * is; } //判断是否溢出 r = r > 1.0 ? 1.0 : r; g = g > 1.0 ? 1.0 : g; b = b > 1.0 ? 1.0 : b; return Color(color.r *r, color.g *g, color.b *b); }};
Github地址
阅读全文
0 0
- 软件光栅化渲染器(九)
- 软件光栅化渲染器(一)
- 软件光栅化渲染器(二)
- 软件光栅化渲染器(三)
- 软件光栅化渲染器(四)
- 软件光栅化渲染器(五)
- 软件光栅化渲染器(六)
- 软件光栅化渲染器(七)
- 软件光栅化渲染器(八)
- 软件光栅化渲染器(十)
- 软件光栅化渲染器一
- 软件光栅化渲染器二
- 从零开始写光栅化渲染器3:三角形光栅化
- 光栅渲染器(三)光栅化2D三角形
- 光栅渲染器
- [软件渲染器入门]四,填充光栅化的三角形并使用深度缓冲
- 用C#实现一个简易的软件光栅化渲染器
- 从零开始写光栅化渲染器2:直线绘制光栅化算法
- C语言const:禁止修改变量的值
- 使用python进行数据分析介绍及部分教程
- Android 磁场传感器 地磁倾角计算 SensorManager.getInclination方法
- 为什么canvas绘制的线条会模糊、有锯齿?
- hdoj 1686 Oulipo
- 软件光栅化渲染器(九)
- Windows上部署Jenkins遇到的问题
- byte为何范围是-128~127
- 编程第五十六天
- 【Leetcode】389. Find the Difference
- 三维网格精简算法(Quadric Error Metrics)附源码(一)
- 双队列=>栈
- 记录一下这几天eclipse建立maven工程遇到的问题
- Tensorflow学习笔记--使用迁移学习做自己的图像分类器(Inception v3)