OpenGL中设置光照的镜面反射效果

webgl通过shader实现逼真水面 webgl水面的实现,最简单的方法就是通过贴图置换,顶点的计算可通过简单的正弦曲线公式计算,但效果不是狠逼真,于是有了另一种的实现方法:基于opengl着色器语言,编写shader程序,使用frameBuffer离屏不停的切换多个program,最终绘制出一张纹理图,使用该纹理图进行屏幕绘制,对于光在水面的折射和反射利用texture进行map映射,r通道的值的大小用于计算法向量和波的高度,方便计... 阅读详情
      OpenGL中设置光照的镜面反射效果

     在上一篇笔记中,我们记述了光线的方向与多边形表面的角度计算关系,除此之外,我们还有光源的位置需要指定。我们在ChangeSize函数的内部指定光源的位置:

     // 指定光源的位置
     GLfloat lightPos[] = {-50.0f, 50.0f, 100.0f, 1.0f};
     glLightfv(GL_LIGHT0, GL_POSITION, lightPos);

     在此,lightPos数组包含了光源的坐标位置。这个数组的最后一个值是1.0,表示指定的坐标是光源的位置;如果这个数组的最后一个值是0.0,则表示光是从无限远处沿这个数组所指定的方向向量照射过来的。同样地,光就像几何物体一样,它们也可以根据模型视图矩阵进行移动。
     接下来,我们设置光照的镜面亮点效果。

     镜面亮点
     镜面光和材料的镜面反射属性可以为物体的表面添加必要的光泽。光泽对物体的颜色具有变白的作用,它可以产生镜面加亮的效果。所谓镜面加亮,就是几乎所有光线都照射在一个物体的表面并反射下来。像我们平时看到的日光照射下的金属球,就是一个镜面加亮的例子,如下图所示:

    

     首先,在光照中添加镜面光成分:

     // 指定镜面光强度(RGBA)
     GLfloat specular[] = {1.0f, 1.0f, 1.0f, 1.0f};
     glLightfv(GL_LIGHT0, GL_SPECULAR, specular);
     // 启用光照计算
     glEnable(GL_LIGHTING);
     // 启用光源0
     glEnable(GL_LIGHT0);

     在上述代码中,specular数组为光照的镜面光成分指定了一种非常亮的白色光源。但是现在,如果只是设置了光源部分,我们将无法看到物体的外观有何不同,因为我们还没有定义任何材料的镜面反射属性。
     
     指定材料的镜面反射
     为材料添加镜面反射属性,类似于为光源添加镜面光成分,代码如下所示:

     // 指定材料的镜面反射属性
     GLfloat specref[] = {1.0f, 1.0f, 1.0f, 1.0f};
     // 设置多边形正面的镜面反射属性
     glMaterialfv(GL_FRONT, GL_SPECULAR, specref);
     // 指定镜面指数
     glMateriali(GL_FRONT, GL_SHININESS, 128);

     在这里,我们单独指定了镜面反射属性,specref数组包含了镜面反射的RGBA强度值。如果这个数组的所有值均为1,那么它所产生的表面将会反射几乎所有的入射光。

     指定镜面指数
     强度大的镜面光和反射属性能够加强物体的颜色。不过,极端强烈的镜面光(完全强度)和镜面反射(完全反射)会导致我们的物体几乎呈现纯白色或纯灰色,只有远离光源的那些表面除外。为了抑制这种效果,我们在指定了镜面反射属性之后,需要继续设置一下材料的镜面指数:

     // 指定镜面指数
     glMateriali(GL_FRONT, GL_SHININESS, 128);

     GL_SHININESS属性设置材料的镜面指数。镜面指数指定了镜面加亮的大小范围和集中性。如果它的值是0,表示未聚焦的镜面加亮,实际上就是整个多边形的颜色均匀加亮。如果这个值大于0,就可以缩小镜面加亮的范围,同时增加镜面加亮的集中程度,从而出现亮点的效果。它的值越大,亮点就越明显。在所有的OpenGL实现中,这个参数的范围是1至128.

      
           镜面指数为0,均匀加亮                         镜面指数为128,局部加亮

     这一部分的示例程序完整代码已经放到了GitHub上,有需要的朋友可以参考一下(https://github.com/dxm3dp/OpenGL-05-LITJET点击打开链接)。


     
     本文出自杜晓萌的博客,请勿用于任何商业用途,转载请保持完整性并标明出处:http://blog.youkuaiyun.com/haohan_meng
使用OpenGL实现镜面反射和基于图像的照明(IBL)技术 在计算机图形学中,镜面反射是一种常用的技术,它可以创建逼真的反射效果,使物体看起来更加真实。而基于图像的照明技术(IBL)则是一种加速光照计算的方法,通过将真实环境的光照信息存储为纹理图像,从而减少计算负担。具体来说,我们需要将HDR环境贴图和BRDF积分纹理分别传递给着色器,并使用反射向量计算漫反射和镜面反射的贡献。这里的源代码只是一个简单的示例,完整的实现需要考虑更多的细节和优化,例如使用较小的立方体贴图来减少计算量,或者使用预过滤技术来加速纹理采样。 阅读详情

相关推荐

OpenGL 高级光照:实现高级光照效果的编程详解

通过以上的代码修改,我们可以实现基本的环境光照、漫反射光照和镜面反射光照效果。镜面反射光照是指光线照射到物体表面后,按照光线的方向和物体表面法线的方向,以镜面反射的方式来产生的光照效果。为了实现镜面反射光照效果,我们需要设置光源的镜面反射参数和物体的高光参数。漫反射光照是指光线照射到物体表面后,按照物体表面法线的方向,以一定程度的散射来产生的光照效果。环境光照是指物体表面在没有直接光照的情况下,由于环境中的间接光照而产生的一种均匀的光照效果。这个简单的程序将使用一个光源和一个材质参数来实现基本的光照效果。

ByteKnight的博客 232

OpenGL学习之路17---- 镜面反射光

代码放在github上 根据教程:ogldev一步步开始,记录学习历程 之前完成环境光和漫射光的学习。环境光的计算只由光强来决定,场景中所有位置是同一亮度;漫射光的计算由光强和光的方向一同决定,相关博文如下: OpenGL学习之路15—-环境光 OpenGL学习之路16—- 漫射光 镜面反射光 镜面反射光是当光线以一定的角度照射到物体表面后,从法线的另一侧堆成的角度反射出去的光线 所...

Zach_z的博客 4264

CG5-v1.0-简单光照效果

为了完成本关任务,你需要掌握:了解掌握OpenGL程序的光照与材质,能正确使用光源与材质函数设置所需的绘制效果。为了完成本关任务,你需要掌握:了解掌握OpenGL程序的光照与材质,能正确使用光源与材质函数设置所需的绘制效果。为了完成本关任务,你需要掌握:了解掌握OpenGL程序的光照与材质,能正确使用光源与材质函数设置所需的绘制效果。(2).在合适的地方修改代码,使茶壶进行着色,每个茶壶材质参数和光照的参数已给出;(5).右边的茶壶有环境光、漫反射光、镜面反射光和自身的发射光RGBA强度;

Junds0的博客 1328

深度沉浸:实时水面反射与折射模拟项目推荐

深度沉浸:实时水面反射与折射模拟项目推荐 项目介绍 该项目是一个完整的水体模拟解决方案,由一系列从小到大的子项目构成,全部从零开始实现。无需任何额外的库或依赖(除了基础的OpenGL)。模拟结果呈现的画面如下面的截图所示: 主要包括水体模拟、屏幕空间反射和折射计算以及地形建模等核心功能。 项目技术分析 水体模拟 采用了压力为基础的高度场方法。将水面划分为一个小型网格点,每个高度表示该点的压力。在...

gitblog_00017的博客 961

水面的反射与折射 有倒影 波光粼粼的水面

模拟了水面水波的反射与折射,有倒影 波光粼粼的水面

OpenGL水面的模拟

采用OpenGL开发的水面波纹的模拟,能很好的实现风吹动时水面的模拟效果。

11——qt opengl 镜面反射 光照贴图

qmyopenglwidget.h #ifndef QMYOPENGLWIDGET_H #define QMYOPENGLWIDGET_H #include <QWidget> #include <QOpenGLWidget> #include <QOpenGLFunctions_3_3_Core> #include <QOpenGLShaderProgram> #include <QMouseEvent> #include <Q...

wqs880527的博客 706

OpenGL水面渲染

包含一个文档:3D海浪动画模拟技术研究.pdf OpenGL波浪 VC工程 Android水面工程

OpenGL快速入门示例-OpenGL光照和材质

OpenGL光照和材质 当光照射到一个物体表面上时,会出现三种情形。首先,光可以通过物体表面向空间反射,产生反射光。其次,对于透明体,光可以穿透该物体并从另一端射出,产生透射光。最后,部分光将被物体表面吸收而转换成热。在上述三部分光中,仅仅是透射光和反射光能够进入人眼产生视觉效果。这里介绍的简单光照模型只考虑被照明物体表面的反射光影响,假定物体表面光滑不透明且由理想材料构成,环境...

qq_41685265的博客 3749

家用电器维修必备:手把手教你用双向可控硅改造单相电机调速(附电路图)

本文提供了一份详细的家用电器维修指南,手把手教你如何利用双向可控硅为核心元件,为单相交流电机(如风扇、排气扇)实现平滑的无级调速改造。内容涵盖核心原理、安全须知、元件选型(如BT136、DB3)、电路图解析、分步搭建教程以及常见故障排查方法,旨在帮助维修爱好者和DIY用户安全、成功地完成这一实用且富有成就感的项目。

read5的博客 836

GMSL Strapping Pins CFG0/CFG1 应用

如果 0x13.bit3 = 0, 则是链路没有 Locked,需要去排查下具体问题(通常是工作模式配置问题)如果遇到 Link 无法建立(Locked),电源没有问题的情况下,多半是加串器和解串器的工作模式不匹配。芯片在上电时,会检测这两个管脚的电压,根据不同的电压值,芯片进入到不同的工作模式。一对加串器和解串器,只要工作模式匹配得当,Link Locked,便能够正常工作。ADI 已经充分考虑了用户的需求,尽可能的降低的芯片的使用和配置复杂度。GMSL 的解串器也是类似的配置,具体请参考对应的规格书。

iStoneWalker的博客 1271

浅析OpenGL光照

浅谈OpenGL的光照          之前从来都没有涉及光照的内容,心想只要能通过常规的方法渲染出几何体甚至是模型就可以了,然而没有光照的日子注定是苦涩的,因为仅凭几何体和模型的颜色无法达到真是渲染的效果,在实际中有各种各样的光影响着我们的视觉效果,而OpenGL能够为我们还原现实生活中的光照现象。所以,我还是下决心研究OpenGL的光照了!          为了研究固定管线渲染

开发游戏,辉煌全中国 7255

文华指标源码—区间彩带

这就是当年东方财富软件终端里主打经典的指标、主要揭示主力成本区域。

qq2054129753的博客 888

OpenGL学习笔记:光照

人眼看见物体,是因为光线直接或间接的从那里到达了眼睛。人眼对光线强弱变化很敏感,胜过于颜色变化。现实生活中,有些物体本身就可以发光,比如太阳,而有的,只会反射光,如木头。OpenGL光照系统:OpenGL对光线的模拟如下:在光照系统中,分为三部分,光源(light)(发光的东西)

lcphoenix的专栏 2126

Verilog除法器(32位无符号+带符号)

32位无符号除法器设计 恢复余数法: 恢复余数除法的基本思路是从“部分余数”中减去除数,如果结果为负(不够减),则恢复原来的部分余数,商0. 寄存器使用: reg_r 存放被除数a reg_b 存放除数b reg_r 存放余数(初始清零) 具体做法: 做减法时,减数是reg_b中的除数,被减数是reg_r中的余数左移一位,最低位由reg_q(被除数)的最高位补充。为了能够判断相减结果的正...

qq_38600065的博客 1万+

天龙八部源码深度解析:从宠物系统到副本机制(C++游戏开发实战)

本文深度解析《天龙八部》源码架构,重点剖析宠物系统状态机实现与副本动态加载机制等核心模块。通过C++代码示例展示宠物AI状态迁移逻辑和副本场景管理技术,为现代游戏开发提供兼容性改造方案与设计启示。适合游戏开发者学习经典MMORPG的工程化实现路径。

weixin_29011239的博客 386

OpenGL光照设置

光照模型 OpenGL光照模型分为三种光:Ambient Light 环境光, Diffuse Light漫反射光, Specular Light镜面反射光. 一、创建光源 void glLightfv (GLenum light, GLenum pname, const GLfloat *params) light: OpenGL提供8个光源 GL_LIGHT0 ~ GL_LIGHT7 pname: 光源属性 GL_AMBIENT 环境光 默认 (0.0, 0...

cfz751740465的博客 6835

SPSS篇—卡方检验

今天依旧跟大家分享一个在SPSS中使用率比较高的分析方法:卡方检验。 在开始做分析之前,我们需要明白两件事情:卡方检验是什么?一般用来干什么?我们只有充分了解分析方法以后才能够正确的使用它。 卡方检验在百科中的解释是:卡方检验是用途非常广的一种假设检验方法,它在分类资料统计推断中的应用,包括:两个率或两个构成比比较的卡方检验;多个率或多个构成比比较的卡方检验以及分类资料的相关分析等。它的原理是...

小白数据营的博客 20万+

实验6 OpenGL光照

 Maya, CG,OpenGL 实验6 OpenGL光照 一.实验目的: 了解掌握OpenGL程序的光照与材质,能正确使用光源与材质函数设置所需的绘制效果。 二.实验内容: (1)下载并运行Nate Robin教学程序包中的lightmaterial程序,试验不同的光照与材质系数; (2)运行示范代码1,了解光照与材质函数使用; (3)在示范代码2

ss19890125的专栏 1657

软考备考:《系统规划与管理师教程》(第2版)第2章——数字ZG与数智化发展

🔴数字化转型的定义:数字化转型是建立在数字化转换、数字化升级基础上,进一步触及组织核心业务,以新建一种业务模式为目标的高层次转型。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 960

华为校招&实习&留学生机试真题目录+算法分类+在线OJ+通过率+视频讲解

全网最新最全华为校招&实习&留学生机试真题题库

m0_73659489的博客 6868

OPENGL光照处理、明暗处理、光源(转)

这里会介绍光照处理、明暗处理、光源 设置、材质定义以及相关计算机图形学的概念。 一般来说产生3D图象的步骤: 1 建模 2 将几何模型经变换投影到2D透视图 3 确定场景所有可见面,进行消隐 4 计算场景颜色 我们已经再前面介绍乐1 2 两步消隐是OPENGL的工作,我们不必关心所以4就是这里的重点。 (一)光照 分为:反射、透射光 1 简单光照模型 简单光照模型只考虑物体表面反射光的视觉影响

OpenGL 技术 7170

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

计算机图形学头歌实训平台作业OpenGL简单光照效果

简单光照效果第1关 OpenGL球体漫反射第2关 OpenGL球体镜面反射第3关 OpenGL茶壶光照 第1关 OpenGL球体漫反射 // 提示:在合适的地方修改或添加代码 #include <GL/freeglut.h> #include<stdlib.h> // 评测代码所用头文件-开始 #include<opencv2/core/core.hpp> #include<opencv2/highgui/highgui.hpp> #include<op

qq_52497285的博客 3710

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

OpenGL 光照常识

1. 几个概念 环境光——经过多次反射而来的光称为环境光,无法确定其最初的方向,但当特定的光源关闭后,它们将消失. 全局环境光——它们并非来自特定的光源,这些光经过了多次散射,已经无法确定其光源位于何处. 散射光——来自同一方向,照射到物体表面后,将沿各个方向均匀反射,因此,无论从哪个方向观察,表面的亮度都相同. 镜面反射光——来自特定方向,也被反

OpenGL 技术 9267

Statistics and Machine Learning Toolbox

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

OpenGL笔记7 光线空间

转载自:http://www.cnblogs.com/mattins/p/4081933.html OpenGL笔记7 光线空间   今天要讲的是OpenGL光照的基本知识。虽然内容显得有点多,但条理还算比较清晰,理解起来应该没有困难。即使对于一些内容没有记住,问题也不大——光照部分是一个比较独立的内容,它的学习与其它方面的学习可以分开,不像视图变换那样,影响到

爱不释手lc 508

OpenGL光照

<br />这部分是最重要的部分,前面只是基础。这里会介绍光照处理、明暗处理、光源设置、材质定义以及相关计算机图形学的概念。 一般来说产生3D图象的步骤: 1 建模 2 将几何模型经变换投影到2D透视图 3 确定场景所有可见面,进行消隐 4 计算场景颜色 我们已经再前面介绍乐1 2 两步消隐是OPENGL的工作,我们不必关心所以4就是这里的重点。 (一)光照 分为:反射、透射光 1 简单光照模型 简单光照模型只考虑物体表面反射光的视觉影响。假定物体表面光滑不透明而且由理想材料构成

Augusdi的专栏 2603
上一篇: OpenGL中启用光照前的准备——指定法线
下一篇: OpenGL中创建聚光灯的效果
杜晓萌
博客等级 码龄16年 221粉丝 70原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值