OpenGL之Phong光照模型和Blinn-Phong光照模型的局限性、OpenGL光照参数设置与光照模式

一、相关概念

1.1 Phong、Blinn-Phong光照模型是一种简单光照模型,它仅考虑了光源直接照射的效果,没有考虑非直接光照的效果。如下直接光照与间接光照。
在这里插入图片描述

1.2 上述模型在考虑间接光照(环境光)时,采用的是一个常数来表示,因此存在一定的局限性。全局光照模拟(Global illumination,GI)= 直接光照 + 间接光照。为了实时计算光照,引入了很多间接光照的计算方法,光线跟踪算法,考虑了光滑表面对环境光的反射和折射。
在这里插入图片描述
辐射度法能够模拟漫射表面的颜色辉映的效果。
在这里插入图片描述
光子映射算法可以有效表达这种焦散半透明的效果。
在这里插入图片描述

1.3 相关书籍

  • 《Advanced Global illumination》
  • 《Real-time Rendering》
  • 《Physically Based Rendering :From Theroy to Implementation》
  • 《全局光照技术:从离线到实时渲染》

二、OpenGL光照参数的设置

2.1 OpenGL中进行光照计算,需要设置相应的参数,主要分为:

  • 设置物体的法向:glNormal3f(Nx,Ny,Nz);
    在这里插入图片描述

    • 面片的法向:通过面上两条边的单位向量叉乘即可得到面片的法向;
    • 顶点的法向:把它周围三角面片的法向计算出来,在相加计算各平均值即可得到顶点的法向;
      在这里插入图片描述
  • 打开光照:glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);

    • OpenGL中,可以用八盏灯,为GL_LIGHT0 - GL_LIGHT7;
  • 设置关照参数:Ambient为公式中的IaI_aIa,公式里面的IlI_lIl为diffuse和Specular;OpenGL里实际为IdI_dIdIsI_sIs;

glLightfv(GL_LIGHT0,GL_AMBIENT,vLitAmbient);
glLightfv(GL_LIGHT0,GL_DIFFUSE,vLitDiffuse);
glLightfv(GL_LIGHT0,GL_SPECULAR,vLitSpecular);glLightfv(GL_LIGHT0,GL_POSITION,vLitPosition);
  • 设置材质参数:

    • GL_FRONT/GL_BACK/GL_FRONT_AND_BACK参数:指定设置前向面或者后向面,物体的法向的面为前向面,相反的面为后向面;
//设置前向面的Ka、kd、ks,高光指数,自发光
glMaterialfv(GL_FRONT,GL_AMBIENT,vMatAmb);
glMaterialfv(GL_FRONT,GL_DIFFUSE,vMatDif);
glMaterialfv(GL_FRONT,GL_SPECULAR,vMatSpe);
glMaterialfv(GL_FRONT,GL_SHININESS,vShininess);
glMaterialfv(GL_FRONT,GL_EMISSION,vEmission);

在这里插入图片描述

2.2 聚光灯参数设置
设置聚光灯的方向,设置光线角度,衰减系数(不是距离衰减而是偏离的角度的光线衰减)等。

glLightfv(GL_LIGHT0,GL_SPOT_DIRECTION,vSpotDir);
glLightfv(GL_LIGHT0,GL_SPOT_CUTOFF,vLitCutoff);
glLightfv(GL_LIGHT0,GL_SPOT_EXPONENT,vSpotExp);

在这里插入图片描述

2.3 光照的衰减参数
OpenGL里面可以设置光照的衰减参数,衰减公式如下,设置了随距离的衰减情况。
在这里插入图片描述

glLightfv(GL_LIGHT0,GL_CONSTANT_ATTENUATION,kc);
glLightfv(GL_LIGHT0,GL_LINEAR_ATTENUATION,kl);
glLightfv(GL_LIGHT0,GL_QUADRATIC_ATTENUATION,kq);

OpenGL中所有状态参数都有一个默认值,不设置OpenGL也能正常进行,此处,kc默认值为1,kl和kq默认值为0。

三、光照模式

3.1 方向性光源与位置性光源
在这里插入图片描述
光照的方向直接影响公式中的L以及R,计算每一点的L,光源与点的连线所在的方向为L。方向性光源,即平行光,类似于太阳光,L的计算相对简单,都是一个值,而位置性光源,每个点的L不同,需要单独计算。

Glfloat vLitPosition[] = {1,0,1.0,1.0,0.0};
//若vLitPosition中的w为0.0,则为方向性光源,否则为位置性光源。
glLightfv(GL_LIGHT0,GL_POSITION,vLitPosition);

3.2 本地视点于无限远视点

视点主要影响V的计算,在Blinn中,影响H的计算,无限远视点,可以认为每个点的V都相同,即平行,为本地视点,每个点的视线方向不同,都需要单独计算。
在这里插入图片描述

//GL_TRUE,则设置为本地视点
glLightModelf(GL_LIGHT_MODEL_LOCAL_VIEWER,GL_TRUE);

3.3 双面光照

//是否设置双面光照,0.0,否;
glLightModelf(GL_LIGHT_MODEL_TWO_SIDE,0.0);

双面光照,主要影响背向面的计算,在计算背向面时,计算公式中的N将被OpenGL变换为负N;当背向面能被看得到时,需要计算背向面的光照情况,否则无需计算。
在这里插入图片描述

3.4 光源的运动

主要有两种方式来改变光源的位置。

  • 通过如下方式改变光源的位置;
glLightfv(GL_LIGHT0,GL_POSITION,vLitPosition);
  • 比较常用的方式是:光源可以认为是一个几何物体,将受到几何变换矩阵的影响;
gluLookAt()函数可以实现这种效果;

3.5 光照下物体的颜色的决定因素

  • 主要由光源的颜色和材质来决定,通过影响光照明方程的计算,最终影响物体的颜色。

    • 光源:glLightfv;
    • 材质:glMaterialfv;
  • 当对物体开启了光照,光源和材质影响了物体的颜色,而此时glColor()函数将不再生效,但是可以通过如下方式发生作用;

    • 采用Color值作为Material的值;
//指定了color作为前向面和后向面的ambient的值
glEnable(GL_COLOR_MATERIAL);
glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/483949.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenGL之图形流水线中的光照计算、明暗处理

1.1 光照计算发生在图形流水线的Vertex Operations中,只计算每个顶点的颜色,而三角形内部的点的颜色在Fragment Operations阶段通计算,这样效率高,因为像素的数量远远大于顶点的数量。 1.2 计算三角形内每个像素的颜色的过程&am…

教学5层网络体系结构——分层之后数据的发送和接收

协议分层后数据发送过程 发送方层层封装 接收方层层解封装 唯一加尾部的是数据链路层 思考 发送方某层封装完如何知道该交给哪个下层封装? 应用层选择传输层由应用程序决定,传输层选择网络层由固定的搭配,例如因特网只有IP协议&#x…

从视觉系统的原理入手 破解VR眩晕症

来源:EETimes编译:科技行者虚拟现实技术近年来迎来一波快速发展,适用范围也扩展到更多领域,引得众多老牌巨头纷纷参与。然而,VR技术自身仍存在一些极难解决的缺陷,如果无法攻克,技术的进一步普及…

小组会谈(2019.3.14)

一:会议主题 1.确定项目的立题 2.讨论需要实现的功能 3.确定小组成员之间的分工和完成各自任务的期限 二:会议地点 逸夫楼C座一楼 三:会议时间 2018年3月14日10:00--11:20 四:会议内容 1.项目的立题&#x…

应用层相关概念

一、应用层概述 1、应用层协议基本概念 应用层的功能 应用层协议定义了应用程序需交换的报文、所需采取的动作和最终通信数据的应用应用层位于协议栈的最高层次应用层协议提供不同主机之间进程与进程之间的通信用户代理实现应用层协议 套接字 IP端口号,唯一确定…

迎来智能数据分析的新时代

来源:知乎(ID:熊墨淼)最近两星期(7月15日,7月22日),《自然》杂志连续发表两篇DeepMind写的用人工智能的方法预测蛋白质三维结构的文章和NIH Director Francis Collins 写的博客 "Artificial Intelligence Accurately P…

2019春季第三周作业

2019年春季学期第三周作业基础作业 本周没上课,但是请大家不要忘记学习。 本周请大家完成上周挑战作业的第一部分:给定一个整数数组(包含正负数),找到一个具有最大和的子数组,返回其最大的子数组的和。 例如:[1, -2, 3…

DNS域名系统详解

一、分层次的域名结构 顶级域名、 二级域名、 三级域名、 四级域名 二、因特网的域名结构 因特网采用了层次树状结构的命名方法,称为域名,如:www.jxnu.edu.cn 三级域名:如www表示万维网 二级域名:如jxnu表示江西师…

侯世达:让机器学习思考的人

图源:GREG RUFFING来源:利维坦文:James Somers原文:www.theatlantic.com/magazine/archive/2013/11/the-man-who-would-teach-machines-to-think/309529/译文原载:《新知》杂志侯世达(Douglas Hofstadter&a…

日记——2019-03-12

感遇(其一) 张九龄 兰叶春葳蕤,桂华秋皎洁。 欣欣此生意,自尔为佳节。 谁知林栖者,闻风坐相悦。 草木有本心,何求美人折? 我的爱人快乐而且善良,但是不容易,遇见——庞德…

www万维网和HTTP协议

万维网的相关概念 万维网的客户端程序 浏览器:IE、firefox、chrome 万维网的服务器端软件 IIS,Tomcat、Apache 万维网的模式 采用C/S模式 Web页面 由文字、图片、声音、视频等多种对象组成 HTTP协议 Web页面传输方式 如何标志分布在因特网上的…

游戏中应用强化学习技术,目的就是要打败人类玩家?

来源:AI前线作者:凌敏采访嘉宾:黄鸿波2016 年,DeepMind 公司开发的 AlphaGo 4:1 大胜韩国著名棋手李世石,成为第一个战胜围棋世界冠军的人工智能机器人,一时风头无两。AlphaGo 的巨大成功开启了“人工智能元…

HTTP报文的格式

一、HTTP请求报文的格式 两个回车换行表示首部的结尾注意:HTTP协议首部使用ASCII码作为编码方式HTTP请求报文提交表单时会包含数据 二、HTTP响应报文格式

Transformer走下神坛?南加州大学教授:想解决常识问题,神经网络不是答案

来源:nextgov转自:新智元编辑:LRS如果说人工智能和真正的人脑之间的差距,那最重要的就是机器缺乏生活中的常识。一切貌似合理、理所当然的事物在计算机眼中都是不可理解的。计算机不知道「柠檬是酸的」,「只有成熟的香…

FTP协议、电子邮件系统与Telnet远程控制

一、FTP协议概述 FTP定义 文件传输协议用于因特网文件传输 FTP特性 使用客户端/服务器模式使用TCP提供可靠的传输FTP属于维护状态的协议FTP使用两条TCP连接完成数据传输 FTP的两条连接 数据连接问题 当有具体文件或目录内容传输时,临时建立数据连接主动模式下…

吴志强院士:CIM与城市未来

▲吴志强:博士,教授,中国工程院院士,德国工程科学院院士,瑞典皇家工程科学院院士,同济大学原副校长,中国城市规划学会副理事长,中国2010年上海世博会园区总规划师,北京城…

传输层协议详解

一、传输层的概念和服务 1、传输层的基本概念 传输层负责端到端之间的数据传输控制传输层依赖于网络层的服务,对应用层提供传输服务 2、传输层的功能 跟踪会话 跟踪源主机和目的主机上应用程序间的每次通信 数据分段 将数据分段,并管理每个分段 …

在后SCI时代需要什么样的人才?

来源:秦四清科学网博客。链接地址:http://blog.sciencenet.cn/blog-575926-1302503.html近些年,国家陆续出台了一系列破“五唯”举措,这标志着后SCI 时代的到来。大家知道,创新是引领发展的第一驱动力,而创…

OpenGL之纹理过滤(Texture Filtering)、MipMap方法、纹理坐标

1.1 纹理过滤 像素、片元都是具有面积的,一个像素可能对应物体上的一小块区域,而物体上这个小区域对应于纹理图像上的一个小区域,因此一个像素的颜色可能来自于纹理中的一小个不规则区域,如果纹理的分辨率比较高,则这…

OpenGL之环境映射

1.1 环境映射(Environment Mapping) 具有光滑表面的物体会反射形成周围环境的影响,是一种环境光效果。 光线跟踪等(全局光照)可以实现这种效果,但是效率太低,可以采用环境映射技术就能快速实现。 1.2 环境映射技术 …