真实感图形程序设计 建立球体模型,编程实现简单光照模型(环境光、漫反射、镜面反射光)对球体的光照影响效果;实现光源位置的改变,对球体的光照影响效果。

实验目的及要求:

  1. 建立球体模型,编程实现简单光照模型(环境光、漫反射、镜面反射光)对球体的光照影响效果;
  2. 实现光源位置的改变,对球体的光照影响效果。

软硬件环境:

  1. 硬件:戴尔笔记本一台
  2. 软件:MATLAB

算法或原理分析(实验内容):

1.Phong算法中影响光照的三个因素

环境光(Ambient):可以理解为现实中的白天的室内,白天在室内我们能看的见物体,但是并没有感知光线的方向,其实是因为太阳离我们太远了,导致我们周围的光线强度都是一样的。

漫反射(Diffuse):面向光源的表面更亮。

镜面反射(Specular):模拟光在抛光或金属表面的反射

其实最终我们就是要计算出一个影响颜色的因子,在执行片段着色器程序时用这个变量fragColor去乘以该因子,进而根据接收的光线将颜色设置得更亮或更暗。将场景中对其他光的影响因素环境光、漫反射、镜面反射分别叫做A、D、S,则计算那个影响颜色的因子可以用下面公式来表示。

如果模型没有纹理,将按照下面这个公式去算:

有纹理,将按照下面这个公式去算:

环境光(Ambient)对光线的影响

它只是一个常数因素,可以使我们所有的物体更亮或更暗。环境光是最容易计算一种影响因素。我们只需要传递一种颜色,用它乘以模型的基色,它只是调制基色。所以我们只需要一个矢量来调制环境光强度和颜色。

漫反射(Diffuse)对光的影响

以点光源为例:假设有一个光源照在一个物体上,面向光源的一面整体会比背向光源的一面更亮

对于漫反射的计算,首先在上图中的物体上取几个顶点位置P1、P2、P3,相应的顶点法向量为N1、N2、N3。顶点法向量是垂直于每个点的切平面的矢量。如下:

在上图中可以很明显的看出来,P1位置一定比P2更亮,P3基本不会受到该光源的影响。而P1位置比P2更亮是因为,P1受到的光照是从该顶点的正上方照射过来的,而P2受到的光线是比正上方稍微偏了一些。所以我们在计算每个顶点的漫反射影响因子时,顶点的法向量与该点受到光线的夹角是影响明暗的一个因素。

镜面反射对光的影响

当光线照射到表面时,它的某些部分被吸收而另一部分被反射,反射就是光线从物体上反射回来。镜面反射如下:

将空间中的观察点,比作相机(Camera)对于镜面反射,最重要的是要注意,只有当相机处于适当的位置时,反射光才会可见。

2.光源位置改变:

光源位置对光照方向的影响:光源的位置决定了光线的方向。当光源位于球体的左侧时,光线从左侧照射到球体,球体左侧会更加明亮。当光源位于球体的上方时,光线从上方照射到球体,球体上方会更加明亮。同理,当光源位于球体的下方或后方时,球体的下方或后方会更加明亮。

光源距离对光照强度的影响:光源距离球体的远近也会影响光照的强度。当光源距离球体较近时,球体上的光照强度会更强,反之则较弱。

光源颜色对光照颜色的影响:光源的颜色也会影响球体被照亮的颜色。例如,当使用红色光源时,球体被照亮的部分会呈现红色。

程序代码或实现过程:

1.[x, y, z] = sphere(50); % 创建一个球体模型 

figure

h = surf(x, y, z); % 设置光照属性

set(h, 'AmbientCoefficient', 500); % 环境光系数

set(h, 'DiffuseCoefficient', 5); % 漫反射系数

set(h, 'SpecularCoefficient', 500); % 镜面反射系数

set(h, 'SpecularPower', 200); % 镜面反射光的模糊程度

lighting gouraud;

camlight right;

colormap('gray'); % 调整光照方向和颜色

shading interp;

axis off;

view(3); % 显示图形

2.close all

[x,y,z] = sphere(40);

colormap(jet)

subplot(1,2,1);

surf(x,y,z),shading interp

light('position',[2,-2,2],'style','local')

lighting phong

title('phong')

subplot(1,2,2)

surf(x,y,z,-z),shading flat

lighting flat

light('position',[-1,0.5,1],'style','local','color','w')

title('flat')

% 更改光源位置 

camlight left; % 将光源移到左侧

camlight above; % 将光源移到上方

camlight below; % 将光源移到下方

camlight behind; % 将光源移到后方

结果分析:

简单光照模型

改变光源位置

  • 59
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
MATLAB模拟绘制 彩虹形成时 线 入射到水珠折射 -反射 -再折射的现象 目录 MATLAB模拟绘制彩虹形成时 线入射到水珠折射 -反射 -再折射的现象 1 前言 3 的 知识 4 的反射定律 4 反射定律 4 特殊情况 4 的折射 5 基本定义 5 折射定律 5 折射率 6 彩虹的形成 7 形成原理 7 为什么彩虹是弯的? 10 Baggins 572645517@qq.com MATLAB绘制路图思路绘制路图思路 ................................................................................................................................................................ 13 绘制基础模拟平面 绘制基础模拟平面............................................................................................................................................................................ 13 绘制初始垂直线 绘制初始垂直线............................................................................................................................................................................ 14 改变角度循环刷新绘图 改变角度循环刷新绘图............................................................................................................................................................ 15 完整代码 完整代码............................................................................................................................................................................................................................ 18 运行效果 运行效果............................................................................................................................................................................................................ 18 全部代码 全部代码............................................................................................................................................................................................................ 18

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

早日提码跑路!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值