这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战
1 引言
计算机图形学的发展,从学科的建立,到光栅图形学,再发展为了近年来比较火热的真实感图形学
在真实感图形学中,可以通过计算机生成与现实世界相似度极高的模型,在大型3D游戏、虚拟仿真中得到了极其广泛的应用
而对于真实世界的模拟,特别是光照的模拟,Phong模型起到了十分重要的作用
本文将基于Phong模型在MATLAB中的实现,对多维图形进行颜色填充
2 思路
2.1 Phong模型
1975年,Phong提出图形学中第一个有影响的光照明模型,即:
Phong模型中综合考虑了环境光、镜面反射与漫反射的作用;单有其中一种光照的作用,是无法完美地模拟出真实光照效果的
而后进行了改进,得到Whitted光透射模型 = Phong模型 + 透射光强 + 反射光强
2.2 RGB模型
关于RGB模型,采用加色混合法
光的三原色:红,绿,蓝
扫描二维码关注公众号,回复: 13470502 查看本文章![]()
- 红 + 绿 = 黄
- 红 + 蓝 = 品红
- 绿 + 蓝 = 青
- 红 + 绿 + 蓝 = 白
- 三种颜色全无 = 黑
值得一提的是,计算机中均采用RGB颜色模型,而打印设备中则会采用HSV颜色模型
3 过程
MATLAB中实现Phong模型的函数有surfl,fill等
3.1 二维填充实现
- 首先绘制一个圆,并获取其坐标矩阵的大小
- 定义一个n行1列的随机数,其中n为坐标矩阵的长度
[~,n]=size(xx);
c=rand(n,1);
复制代码
- 使用
fill(xx,yy,c)
绘制,即可得到填色后的二维图形
3.2 三维填充实现
- 首先构造二维曲线
- 再增加1个Z维度
[x,y]=meshgrid(-3:1/8:3);
z=peaks(x,y);
复制代码
- 使用
surfl(x,y,z)
绘制,即可得到填色后的三维图形
除了光照,实际上还可以添加阴影、纹理等,使用函数warp可以给三维物体添加纹理或材质
基于OpenGL的颜色纹理,用于3D贴图中,其应用也是十分广泛的
完整代码请见RGB(gitee.com)
4 结果
4.1 二维填充
二维随机色填充圆,结果如下:
4.2 三维填充
三维随机色填充曲面,结果如下: