计算机图形学 | 实验八:Phong模型

计算机图形学作业( 五):画一个立方体并实现 Phong Shading 和 Gouraud Shading 两种阴影 计算机图形学作业( 五):画一个立方体并实现 Phong Shading 和 Gouraud Shading 两种阴影颜色和光照场景Phong Shading环境光照漫反射光照镜面光照着色器代码结果Gouraud Shading 颜色和光照场景 我们在现实生活中看到某一物体的颜色并不是这个物体真正拥有的颜色,而是它所反射的颜色。换句话说,那些不能被物体所吸收的颜色(被拒绝的颜色)就是我们能够感知到... 阅读详情

华中科技大学《计算机图形学》课程

MOOC地址:计算机图形学(HUST)

计算机图形学 | 实验八:Phong模型

Phong模型

接下来,我们来介绍一下Phong模型。

绘制效果如下,我们可以看到,中间的立方体是被照射的对象,有一个定向光源,六个点光源和一个聚光的光源。

在这里插入图片描述

我们的程序流程主体还是跟前面的课程相同。因此我们这节的重点部分就是主要在这两个方面,一个是光源的设置,一个是光照计算。

光源设置

首先是光源的设置,我们这里的光源种类主要有三种,定向光,点光源和聚光,三种光源的效果叠加形成了我们刚才看到的效果。

那么我们在代码中是如何实现的呢?首先我们来看定向光,定向光就是类似太阳这种,它的属性包括定向光的方向,以及环境光,漫反射光,镜面反射光的强度参数。由于定向光是光源处于无限远处的平行光,因此我们无需指定出定向光光源具体的位置,只需指定其指向的方向即可。

接下来是点光源,我们定义了六个点光源,点光源就是类似灯泡这种,每一个点光源的属性都包括点光源的位置,环境光,漫反射光,和镜面反射光的强度参数,这里每一个分量都要乘一个点光源的颜色。那么除此之外点光源与定向光有哪些不同呢?它与定向光不同的是它多了三个属性参数,这三个参数是用来计算衰减公式的三个系数,分别是constant常数项,linear一次项和quadratic二次项,它会使得光线强度随距离的增加不断减小并且衰减的幅度也逐渐减小,这样更接近现实生活中点光源的效果。

我们的第三种光源是聚光,聚光就是类似手电筒的这种效果,聚光的属性也包括聚光光源的位置,方向,这里我们是用摄像机的位置和朝向来指定的,还有环境光,漫反射光,和镜面反射光的强度参数以及三个衰减系数,那么除此之外聚光光源与点光源又有哪些不同呢?这里我们又多了两个参数分别表示我们聚光内外圆锥的内外切光角。聚光的效果就相当于是一个圆锥的光效,我们这里通过使用两个圆锥来使我们的聚光效果看起来更加平滑。

当我们已经知道了我们是如何设置光源的,并且已经了解了三种光源的属性时,接下来我们要做的就是计算光源的光照,这里我们使用的是Phong模型来计算光照。

光照计算

具体计算光照的过程,我们是在立方体的片段着色器中进行的。由于我们在考虑物体颜色时才会考虑光照到物体产生的颜色影响,因此我们在立方体的片段着色器中计算光照。

定向光

接下来就是具体的计算过程,首先是计算定向光源,根据之前Phong模型的公式,我们分别计算环境光、漫反射光和镜面光。

我们在计算环境光的时候用的是漫反射光下的物体颜色而非环境光下的,是因为通常情况下漫反射光和环境光下的物体效果几近相同,因此我们无需存取两遍。

计算漫反射时我们对法向量和光线方向向量进行点乘,计算光源对当前片段实际的漫发射影响,即L·N,结果值再乘以物体的材质颜色Kd和漫反射光因子Ip。

// 漫反射
vec3 lightDir = normalize(-light.direction); 
float diff = max(dot(normal, lightDir), 0.0);

计算镜面反射时我们对视线方向与反射方向的点乘(R·V)(并确保它不是负值),然后取它的n次幂。这个n是高光的反光度(Shininess) ,结果值再乘以物体的材质颜色Ks和镜面光因子Ip。

// 镜面反射 
vec3 reflectDir = reflect(-lightDir, normal); 
float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess);

这里的高光的反光度n(shininess)我们程序中取值为32,那么为什么我们取32而不取其他的值呢?之所以选取这个值是因为我们不希望镜面光过于显眼,我们可以看到图中n取值不同时我们得出的光源效果,也可以自己尝试一下。

点光源

第二种光源效果是点光源,这里我们对于点光源的环境光、漫反射光和镜面光的计算同定向光相同,依然是根据Phong模型来计算,只不过我们引入了衰减这一属性。衰减与光源和物体的距离有关,它会使得光线强度随距离的增加不断减小并且衰减的幅度也逐渐减小。这里我们保留环境光,只考虑漫反射光和镜面光受到衰减的影响。

// 距离和衰减 
float d = length(light.position - fragPos); 
float attenuation = 1.0 / (light.c + light.l * d + light.q * d * d);

聚光

第三种光源效果是聚光光源,这里对于环境光、漫反射光和镜面光以及衰减的计算同点光源相同,不同点在于这里增加了聚光强度这一属性。

theta就是光线方向同光源方向的夹角。

Epsilon是内外圆锥之间的余弦差值,这里我们给出两个切光角,分别形成内外圆锥。

Intensity则是我们最终得到的聚光强度,它通过clamp()函数将theta值做了限制,在内圆锥内,强度大于1.0,在内外圆锥之间,强度在0.0-1.0之间,在外圆锥外,强度为负值。

// 聚光强度 
float theta = dot(lightDir, normalize(-light.direction)); 
float epsilon = light.cutOff - light.outerCutOff;
float intensity = clamp((theta - light.outerCutOff) / epsilon, 0.0, 1.0);

我们同样保留环境光,对漫反射光和镜面反射增加聚光强度,就可以得到平滑的聚光效果。

最后我们对程序进行一个演示,我们这里设置了键盘响应事件,按1开启定向光,2~7开启点光源,8开启聚光效果。

在这里插入图片描述

计算机图形学——MFC和OpenGL两种方法实现光照模型 计算机图形学——MFC和OpenGL两种方法实现光照模型 1、OpenGL实现Phong光照: 见上一个实验 实现效果: 2、C++实现Phong光照:            参考资料:https://wenku.baidu.com/view/c8cb630bf78a6529647d5335.html               实现效果: 阅读详情

相关推荐

图形学基础 | Blinn-Phong反射模型与着色方法

Blinnn-Phong反射模型,Gouraud Shading和Phong Shading着色方法

油炸汽水的博客 1278

计算机图形学(八)——添加一个光源照射立方体

在第(七)节的基础上给正方体添加一个旋转的照射光源 现实世界的光照是极其复杂的,而且会受到诸多因素的影响,这是我们有限的计算能力所无法模拟的。因此OpenGL的光照使用的是简化的模型,对现实的情况进行近似,这样处理起来会更容易一些,而且看起来也差不多一样。这些光照模型都是基于我们对光的物理特性的理解。其中一个模型被称为冯氏光照模型(Phong Lighting Model)。冯氏光照模型的主要结构由3个分量组成:环境(Ambient)、漫反射(Diffuse)和镜面(Specular)光照。下面这张图展示了

qq_44018760的博客 1676

计算机图形学实践指南:从Bresenham算法到Phong光照模型

计算机图形学是研究如何在计算机中生成、处理和显示视觉内容的技术领域,其核心原理涉及从数学描述到屏幕像素的转换过程。通过算法实现几何图元的绘制、坐标变换与投影,图形学技术能够创建逼真的二维与三维图像,在游戏开发、影视特效、虚拟现实和科学可视化等领域具有重要价值。Bresenham画线算法作为经典的光栅化基础,仅用整数运算高效确定像素序列;而Phong光照模型则通过模拟环境光、漫反射和镜面反射分量,为三维物体赋予真实感材质外观。掌握这些核心算法与模型,是深入理解现代图形渲染管线、进行图形编程实践的关键步骤。

weixin_33937778的博客 744

计算机图形学——光照模型

 光线照到物体表面发生三种情况:反射、投射、吸收转换为热能。只有反射光和投射光能够刺激眼睛产生颜色,因而物体表面的反射光和投射光决定了物体呈现的颜色。一、光照明模型    目的:产生明暗过度自然的真实感图形。    概念:描述了物体表面的颜色与其空间位置、朝向、物理属性(反射率、折射率)及光源之间的关系。二、发展历程    1.早期光照明模型基于经验,只能反映光源直接照射的情况。    2.比较精...

szk972092933的博客 9332

计算机图形学实验:从零实现光线追踪与Phong光照模型

在计算机图形学中,真实感绘制旨在让计算机生成的图像达到照片级的视觉效果,其核心在于对光线物理行为的模拟。这一过程主要依赖于光照模型与渲染算法两大技术支柱。光照模型,如经典的Phong模型,通过分解环境光、漫反射和镜面反射分量,来数学描述光线与物体表面材质交互后呈现的颜色与明暗,是局部光照计算的基础。而渲染算法则负责将这一计算落实到每个像素,其中光线追踪通过从相机逆向追踪光线路径,能物理准确地模拟反射、折射等全局光照效果,是理解真实感绘制的关键路径。掌握这些原理,对于开发游戏引擎、三维仿真及影视特效等需要高质

weixin_29959121的博客 318

OpenStack 8 节点生产级高可用(HA)集群实施文档

本文详细介绍了生产级高可用OpenStack集群的架构设计与实施方案。通过采用3节点控制集群(HAProxy+Keepalived)、2节点计算资源池和3节点Ceph分布式存储,实现了控制平面、计算资源和存储系统三个层面的高可用。方案重点阐述了VIP漂移、MariaDB Galera集群、RabbitMQ镜像队列等关键组件的配置方法,并提供了完整的部署流程和故障验证方案。该架构确保任意单节点故障不会影响平台整体可用性,满足生产环境对稳定性、扩展性和可维护性的要求,为构建无单点故障的OpenStack生产环境

彭大帅的博客 783

【亲测免费】 计算机图形学实验8:球面Gouraud光照模型

计算机图形学实验8:球面Gouraud光照模型 【下载地址】计算机图形学实验8球面Gouraud光照模型 本仓库提供了一个关于计算机图形学实验8的资源文件,主要内容为球面Gouraud光照模型的实现。该实验旨在帮助学生理解和掌握Gouraud光照模型的基本原理及其在球面上的应用 ...

gitblog_09814的博客 513

iTunes登录协议抓包避坑指南:解决HTTPDebugger被检测问题(附临时方案)

本文详细解析了iTunes客户端登录协议抓包时遇到的HTTPDebugger等工具被检测的问题,并提供了实战解决方案。通过逆向分析iTunes的反调试与反检测机制,文章指导读者如何定位并绕过关键检测点,成功捕获登录流量,并深度解析了包括证书获取、签名缓冲区和最终认证在内的核心协议流程。

qsc901234的博客 809

5、计算机图形学——着色与光照模型

一、着色(shading)的概念 着色,顾名思义就是给物体上色。在计算机图形学中,着色就是确定物体上或者图形上的每个像素的颜色。 像素或者物体表面的颜色受光照和材质的影响,光照中光线的颜色一定程度上决定物体表面的颜色。而物体的材质决定物体对光线中不同颜色分量的反射率。反射率越高,相应的颜色分量占比越大。 就拿头发染色来说,如果头发没有进行任何染色,那么头发的材质就不会反射任何光线,所以,看到的颜色就是黑色的。如果对头发进行染色后,头发的材质发生了变换,导致头发会反射阳光中一定的颜色分量,最终合成出来棕

Master Cui的博客 3408

华东师范大学2020机试题解

1.统计卡牌的值 #include<iostream> #include<string> #include<vector> //#include<algorithm> using namespace std; int main() { int n; cin>>n; int answer=0; for(int i=0;i<n;++i) { string str; ci

qq_42254342的博客 1903

neruolib全脑建模计算框架

neurolib 是一个用python编写的全脑建模计算框架,也是可扩展的、允许轻松实现自定义神经质量模型,能够在介观尺度上表示脑区平均活动。

Rootfyx的博客 1149

计算机图形学五:局部光照模型(Blinn-Phong 反射模型)与着色方法(Phong Shading)

光照模型1 我们为何能够看到物体?2 泛光模型3 Lambert漫反射模型3 Phong反射模型4 Blinn-Phong反射模型5 Reference 到了这一部分,我们就开始进入到着色(shading)的环节了,简单来说shading就是计算出每个采样点的颜色是多少,特别来说,本文所介绍的是从经验总结而来的局部光照模型,并不是真正准确的模型,但是优点是计算快,效果可以接受,至今依然广泛的运用在...

吃人的博客 1万+

NVIDIA Jetson Xavier NX刷机教程

NVIDIA Jetson Xavier NX刷机教程,分别安装OS和SDK的经验分享

qq_68271367的博客 6959

计算机图形学(七)——Phong光照模型

计算机图形学(七)——Phong光照模型Phong光照反射模型点光源环境光漫反射镜面反射 Phong光照反射模型 Phong反射模型认为来自一个表面的反射由下面三个线性叠加的分量组成: 反射光=环境光+漫反射光+镜面反射光 某一点的光照强度 I=Ia+Id+Is=La∗Ra+Ld∗Rd+Ls∗Rs .I = I_{a}+I_{d}+I_{s} = L_{a}*R_{a}+L_{d}*R_{d}+L_{s} *R_{s}\,.I=Ia​+Id​+Is​=La​∗Ra​+Ld​∗Rd​+Ls​∗Rs​. 点光源

cgsmalcloud的博客 9105

使用手机录制rosbag包

使用手机作为便携式数据采集设备来录制rosbag。

weixin_38582851的博客 616

AI工具 | 每个打工人必备的15款人工智能超级工具

不过,还是有一些靠谱的人工智能平台,它们可不只是营销噱头。有些AI公司正试图改变游戏规则。人工智能工具让人们能够更聪明地工作,而不是更辛苦地劳作。如果你想知道未来有什么,那就来看看这10款人工智能工具吧,它们将彻底改变我们的工作方式。

Vampire_2017的博客 5万+

计算机图形学 1 —— 颜色模型图像基本知识,Phong光照模型

颜色模型图像基本知识,Phong光照模型

wdw18668109050的博客 2953

[cshell]个性化配置你的cshrc/tcshrc

本文介绍了csh/tcsh shell的配置优化方法,主要包括:1. 配置文件管理(全局和个人配置);2. 按键绑定设置(解决远程登录按键问题);3. 提示符个性化(包含颜色配置方案);4. 环境变量设置(如LSCOLORS、CLICOLOR等);5. 安全防护措施(防误删、防覆盖等);6. 实用alias命令集(简化操作、提高效率)。文章提供了详细的配置示例,并建议通过man tcsh获取更多帮助信息。这些配置能显著提升shell使用体验和工作效率。

元直的博客 6118

计算机图形学·17 明暗处理(Shading)1 Phong Model

Phong模型假设点光的三原色都有各自的的环境光、漫反射光和镜面反射光,用局部光照模型去模拟本质上全局的光照效果,因此需要9个系数来描述光源在材料表面上点p处的光照属性——即入射光属性:Lar, Lag, Lab, Ldr, Ldg, Ldb, Lsr, Lsg, Lsb。当然,还存在其它增加真实感的方法,比如光线跟踪(计算量大且复杂,容易实现生成的图形中正确地反映阴影、镜面反射以及透明的效果)以及辐射度方法(1988,浙大,中国第一篇 Siggraph论文)。每种情形所占的比例,由对象表面的性态确定。

2303_79624041的博客 883

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

计算机图形学实验报告百度云盘,计算机图形学实验报告-实验5Phong光照模型

point = viewStart.multiplyk(1.0 - t1).add(viewEnd.multiplyk(t1)); point = viewStart.multiplyk(1.0 - t2).add(viewEnd.multiplyk(t2)); elsenormal = Vec3.normalize(point.minus(_position)); return true;pub...

weixin_35245427的博客 382

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

计算机图形学 Phong光照模型实验(OpenGL的基本使用)

计算机图形学 Phong光照模型实验(OpenGL的基本使用)

ylazzy的博客 1776

Phong模型

Cg lighting(Phong model) 这个链接讲的很清楚了,直接看就行了。 http://http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter05.html 太久没写程序了,好多东西记不住了。只记得diffuse要根据入射角和法线来计算强度。specular要还要根据摄像机观察角度来计算。 光照模型 看不懂的此段忽略

5497

布林冯反射模型 Blinn-Phong Reflection Model

漫反射是指当有一根光线打到到物体表面后向各个方向均匀反射的现像。这种向四面八方的反射使得物体表面看起来不光滑,从而产生了物体的哑光外观。那么我们要如何用程序将漫反射的现像模拟出来呢?生活中当光线照射到一个单色立方体的各个面上,每个面面呈现出来的明暗是不一样的。这是为什么呢?我们一起看下图中的例子,假如说光线是离散的,比如图中的光是由六根光线组成的。每根光线带有固定的能量。那么我们发现,当表面跟光线的入射方向是垂直的,那么这个面可以接受到这束光的所有能量。

qq_40765480的博客 1942

计算机图形学基础:颜色模型、图像基本知识、Phong光照模型

主要内容: 图形学中的一些重要概念 色彩视觉 图像和像素 三角网格模型 光照模型与明暗处理 视点变换和视点方向 色彩视觉 什么是色彩? 色彩是对不同波长的光的能量的感知: 不同波长的电磁波(electromagnetic waves)对应不同的色彩; 对于人眼能感知的光(可见光),其波长范围为380nm到760nm之间。 光的光谱分布 ”光“是由不同波长的电磁波按照某种能量分布混合叠加而成。例如,”白光“是由所有可见波长的电磁波以相等的强度混合得到。而紫光的合成示意如下: 谱分布:光在各个可见

weixin_40064300的博客 1942

Python实现Phong着色模型算法

通过本文的介绍,我们详细阐述了Phong着色模型的基本原理,并使用Python实现了相关的算法。通过定义向量、光源、材质和着色器等类,我们可以灵活地计算光照和着色效果,为更复杂的三维图形渲染打下基础。Phong着色模型是计算机图形学中的经典光照模型,尽管随着技术的发展,出现了更复杂的光照模型(如Blinn-Phong、物理基础渲染等),但其简洁明了的特点仍然使其在许多应用中得以广泛使用。希望通过本次学习,读者能够深入理解Phong着色模型,并能够在实际项目中应用该算法。

闲人编程的博客 1857

计算机图形学六局部光照模型(blinn-phong反射模型)与shading

计算机图形学基础

weixin_44683202的博客 919
上一篇: Leetcode50. Pow(x, n)
下一篇: 计算机图形学 | 实验九:纹理贴图和天空盒
UestcXiye
博客等级 码龄8年 9032粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

UestcXiye

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

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

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

打赏作者

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

抵扣说明:

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

余额充值