当前位置: 首页 > article >正文

从零开始写C++3D游戏引擎(开发环境VS2022+OpenGL)之十一点二五 光照贴图(lighting maps)的实现 细嚼慢咽逐条读代码系列

写在篇前的话

作为一个曾经在代码堆里面苦苦挣扎的萌新,困惑的事情在于库,各种依赖,包换文件,链接库,纠结于代码的作用意义。尤其在3D引擎开发的问题上,很多人都被各种困难给阻拦,放弃了在3D渲染,3D游戏引擎上大涨鸿图的机会。

当然关于3D游戏引擎的教程已经汗牛充栋,但是大部分的教程都是由过来人写的,代码中的逻辑与实现,在过来人眼中自然且简单,在初学者眼里却是晦涩繁杂,因此从一个初学者的角度来写一篇关于如果利用OpenGL库开发3D游戏引擎的文章,尤其着重于一行行代码的实现,对于初学者将是莫大的帮助!

有感于此,本人准备以自己的方式以飨读者,节省大家的时间。

本片中所有的源码都可以在这个CSDN资源中找到:从零开始实现光照贴图3D图形渲染的C++源代码资源-CSDN文库

希望大家多多点赞支持,大家的支持就是我努力更新的动力!

前情回顾

按照惯例,先回顾一下之前的内容,在之前的博文里面,已经介绍了如何使用OpenGL在VS2022开发环境里面,如何使用光线达到漫反射镜面反射的效果,如何实现目标的材质,这些内容都可以访问我的博客文章进行回顾。

[!TIP]

从零开始写C++3D游戏引擎(开发环境VS2022+OpenGL)之十一 从打光到材质 细嚼慢咽逐条读代码系列-CSDN博客

从零开始写3D引擎(开发环境VS2022+OpenGL)之十 如何给3D图形添加光源设置漫发射镜面放射 保姆包教会系列-CSDN博客

从零开始写3D游戏引擎(开发环境VS2022+OpenGL)之九点五 编写运动摄像机镜头的源代码 细嚼慢咽逐条读代码系列_camera.fs.vs文件-CSDN博客

从零开始写3D游戏引擎(开发环境VS2022+OpenGL)之九 如何编写摄像机操纵镜头 慢条斯理的保姆包教会系列_vs 2022驱动程序开发指南-CSDN博客

学习目标

现实世界中的物体通常并不只包含有一种材质,而是由多种材质所组成。想想一辆汽车:它的外壳非常有光泽,车窗会部分反射周围的环境,轮胎不会那么有光泽,所以它没有镜面高光,轮毂非常闪亮(如果你洗车了的话)。汽车同样会有漫反射和环境光颜色,它们在整个物体上也不会是一样的,汽车有着许多种不同的环境光/漫反射颜色。总之,这样的物体在不同的部件上都有不同的材质属性。

比如,一个箱子,之前的箱子通体都是木材的,但是现在,如果箱子的边缘是个金属条,金属条和木材在光源下面的效果就是完全不一样的,那么我们要怎么做呢?

这就是我们今天要学习的目标,如下图:

在这里插入图片描述

在这里,我们需要拓展之前的系统,引入漫反射镜面光贴图(Map)。这允许我们对物体的漫反射分量(以及间接地对环境光分量,它们几乎总是一样的)和镜面光分量有着更精确的控制,从而实现上面的效果。

资源的使用

在文章开头的,我们已经给出了资源的地址,其中工程文件的使用可以参考我们之前的博文从零开始写C++3D游戏引擎(开发环境VS2022+OpenGL)之十一 从打光到材质 细嚼慢咽逐条读代码系列-CSDN博客这里就不赘述了。

今天这篇博文的内容比较多,所以,我们将按照我们要实现的功能,来逐一讲解我们的代码。

另外,顶点着色器和片段着色器的内容,也在具体遇到需要实现的功能的时候,我们再去讲解。

好了,现在我们正式开始正文了。

第一步,漫反射贴图功能的实现


http://www.kler.cn/a/592847.html

相关文章:

  • 实现鼠标键盘动作录制与重复播放的工具
  • SQL Server数据库慢SQL调优
  • 从 Snowflake 到 Databend Cloud:全球游戏平台借助 Databend 实现实时数据处理
  • 【K8S】ImagePullBackOff状态问题排查。
  • 网络安全——SpringBoot配置文件明文加密
  • 如何把视频转成动态图?
  • 计算机网络-IPv6
  • 2025/03/19 Cursor使用方法(Java方向,适合Java后端把家从idea搬家到cursor)
  • DeepSORT 目标追踪算法详解
  • 数据结构-------栈
  • Java学习打卡-Day19-Set、HashSet、LinkedHashSet
  • C++学习之QT实现取证小软件首页
  • 施耐德PLC仿真软件Modbus tcp通讯测试
  • Python实现爬虫:天气数据抓取(+折线图)
  • 【软件工程】02_软件生命周期模型
  • 【C++入门】数组:从基础到实践
  • 深入刨析C++ stl::stack 、stl::queue 及 priority_queue
  • Redis解决缓存击穿问题——两种方法
  • python pytorch tensorflow transforms 模型培训脚本
  • Excel处理控件Spire.XLS系列教程:C# 在 Excel 中添加、修改和删除切片器