【计算机图形学】颜色模型多维填色——MATLAB实现

607 阅读2分钟

这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战

1 引言

计算机图形学的发展,从学科的建立,到光栅图形学,再发展为了近年来比较火热的真实感图形学

在真实感图形学中,可以通过计算机生成与现实世界相似度极高的模型,在大型3D游戏、虚拟仿真中得到了极其广泛的应用

而对于真实世界的模拟,特别是光照的模拟,Phong模型起到了十分重要的作用

本文将基于Phong模型在MATLAB中的实现,对多维图形进行颜色填充

2 思路

2.1 Phong模型

1975年,Phong提出图形学中第一个有影响的光照明模型,即:

I=IaKa+IpKd(LN)+IpKs(RV)n\mathrm{I}=\mathrm{I}_{\mathrm{a}} \mathrm{K}_{\mathrm{a}}+\mathrm{I}_{\mathrm{p}} \mathrm{K}_{\mathrm{d}}(\mathrm{L} \cdot \mathrm{N})+\mathrm{I}_{\mathrm{p}} \mathrm{K}_{\mathrm{s}}(\mathrm{R} \cdot \mathrm{V})^{\mathrm{n}}

Phong模型中综合考虑了环境光、镜面反射与漫反射的作用;单有其中一种光照的作用,是无法完美地模拟出真实光照效果的

而后进行了改进,得到Whitted光透射模型 = Phong模型 + 透射光强 + 反射光强

2.2 RGB模型

关于RGB模型,采用加色混合法

光的三原色:红,绿,蓝

  • 红 + 绿 = 黄
  • 红 + 蓝 = 品红
  • 绿 + 蓝 = 青
  • 红 + 绿 + 蓝 = 白
  • 三种颜色全无 = 黑

值得一提的是,计算机中均采用RGB颜色模型,而打印设备中则会采用HSV颜色模型

3 过程

MATLAB中实现Phong模型的函数有surfl,fill等

3.1 二维填充实现

  1. 首先绘制一个圆,并获取其坐标矩阵的大小
  2. 定义一个n行1列的随机数,其中n为坐标矩阵的长度
[~,n]=size(xx);
c=rand(n,1);
  1. 使用fill(xx,yy,c)绘制,即可得到填色后的二维图形

3.2 三维填充实现

  1. 首先构造二维曲线
  2. 再增加1个Z维度
[x,y]=meshgrid(-3:1/8:3);
z=peaks(x,y);
  1. 使用surfl(x,y,z)绘制,即可得到填色后的三维图形

除了光照,实际上还可以添加阴影、纹理等,使用函数warp可以给三维物体添加纹理或材质

基于OpenGL的颜色纹理,用于3D贴图中,其应用也是十分广泛的

完整代码请见RGB(gitee.com)

4 结果

4.1 二维填充

二维随机色填充圆,结果如下:

4.2 三维填充

三维随机色填充曲面,结果如下: