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

从零开始写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.dtcms.com/a/79266.html

相关文章:

  • nacos安装,服务注册,服务发现,远程调用3个方法
  • 理一理Mysql日期
  • [原创](Modern C++)现代C++的关键性概念: std::mem_fn是std::bind的轻量级版本, 它们的区别是什么?
  • 蓝桥杯嵌入式赛道复习笔记4(TIM输出PWM,TIM输入捕获)
  • Android compose中的附带效应-人话
  • 学习C2CRS Ⅳ (Conversational Recommender Model)
  • IDEA的常用设置与工具集成
  • 玩转python:通俗易懂掌握高级数据结构-collections模块之UserDict
  • 第三:go 操作mysql
  • 在 Visual Studio Code 中高效使用 Pylance:配置、技巧与插件对比
  • 25.3.19(java 数据类型 及数据之间的转换)
  • MySQL 面试题
  • Linux 系统性能调优
  • 【leetcode hot 100 994】腐烂的橘子
  • MongoDB 更新集合名
  • UML(统一建模语言)中总共有哪些图
  • VLLM专题(三十六)—自动前缀缓存
  • 当Anaconda的安装路径与我想创建的conda虚拟环境路径不一致时,应该怎么操作?
  • STM32-汇编
  • 【漫话机器学习系列】143.轮廓系数(Silhouette Coefficient)
  • QT 磁盘文件 教程03-创建、删除、复制文件
  • numpy学习笔记2:ones = np.ones((2, 4)) 的详解
  • PostgreSQL中array_to_string函数来将数组转换成逗号分隔的字符串
  • C#:深入理解Thread.Sleep与Task.Delay
  • 类和对象C++
  • 鸿蒙数据持久化之首选项
  • WebGL学习2
  • Echarts 折线图
  • 【Linux笔记】动态库与静态库的理解与加载
  • 《数字图像处理》第三章 灰度变换与空间滤波学习笔记(3.1-3.2)反转、对数、幂律、分段线性等变换