欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 从零开始写C++3D游戏引擎(开发环境VS2022+OpenGL)之十一 从打光到材质 细嚼慢咽逐条读代码系列

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

2025/3/16 21:25:49 来源:https://blog.csdn.net/u012648507/article/details/146280989  浏览:    关键词:从零开始写C++3D游戏引擎(开发环境VS2022+OpenGL)之十一 从打光到材质 细嚼慢咽逐条读代码系列

写在篇前的话

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

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

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

本片中所有的源码都可以在这个CSDN资源中找到:3D模型添加材质的源代码,代码解释参见金沙阳博客文章《从零开始写C++3D游戏引擎(开发环境VS2022+OpenGL)之十一从打光到材质细嚼慢咽逐条读代码系列》资源-CSDN文库

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

前情回顾

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

[!TIP]

从零开始写3D游戏引擎(开发环境VS2022+OpenGL)之八点五 细嚼慢咽3D引擎的代码实现_利用opengl来写渲染引擎-CSDN博客

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

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

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

学习目标

本篇的目标就是要给3D模型拥有质感,也就是有了材质属性,效果图如下:

在这里插入图片描述

源文件有哪些?它们的关系如何?

在本人给出的资源文件中,一共有11个文件,分别是:

  1. 着色器小程序(zprograms):3.1.light_cube.fs;3.1.light_cube.vs;3.1.light_cube.fs;3.1.light_cube.vs。其中,.fs文件是片段着色器小程序,.vs文件是顶点着色器小程序。在后文,我们会一个一个讲解它们内部的源码以及相互之间的关系。

  2. 头文件:camera.h;shader_m.h;stb_image.h。这三个头文件,我们将一个一个讲明他们的来历和作用。

  3. 源文件,程序主体文件:materials.cpp。该文件,将是本文描述的重点

  4. 程序配置文件:chapter11.vcxproj;chapter11.vcxproj.filters;chapter11.vcxproj.user。里面有本工程的配置信息,事实上,几乎所有的附文件包,链接库信息都可以在里面找到。本文的第一个目标就是要讲清楚这里面XML文件的作用,理解了这些,各位在使用VS2022开发配置文件的时候将节约大量时间。

工程文件的讲解

在本博客附属的资源中,工程配置文件一共有三个,分别是chapter11.vcxproj;chapter11.vcxproj.filters;chapter11.vcxproj.user,这三个文件都可以用记事本或者nodepad++打开并修改,不过我们更加要关心的是第一个文件chapter11.vcxproj,里面的内容如下:

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"><ItemGroup Label="ProjectConfigurations"><ProjectConfiguration Include="Debug|Win32"><Configuration>Debug</Configuration><Platform>Win32</Platform></ProjectConfiguration><ProjectConfiguration Include="Release|Win32"><Configuration>Release</Configuration><Platform>Win32</Platform></ProjectConfiguration><ProjectConfiguration Include="Debug|x64"><Configuration>Debug</Configuration><Platform>x64</Platform></ProjectConfiguration><ProjectConfiguration Include="Release|x64"><Configuration>Release</Configuration><Platform>x64</Platform></ProjectConfiguration></ItemGroup><PropertyGroup Label="Globals"><VCProjectVersion>17.0</VCProjectVersion><Keyword>Win32Proj</Keyword><ProjectGuid>{5c49ea2e-3d95-4766-ab3b-129387fbf142}</ProjectGuid><RootNamespace>ConsoleApplication1</RootNamespace><WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion><ProjectName>chapter11</ProjectName></PropertyGroup><Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /><PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"><ConfigurationType>Application</ConfigurationType><UseDebugLibraries>true</UseDebugLibraries><PlatformToolset>v143</PlatformToolset><CharacterSet>Unicode</CharacterSet></PropertyGroup><PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"><ConfigurationType>Application</ConfigurationType><UseDebugLibraries>false</UseDebugLibraries><PlatformToolset>v143</PlatformToolset><WholeProgramOptimization>true</WholeProgramOptimization><CharacterSet>Unicode</CharacterSet></PropertyGroup><PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"><ConfigurationType>Application</ConfigurationType><UseDebugLibraries>true</UseDebugLibraries><PlatformToolset>v143</PlatformToolset><CharacterSet>Unicode</CharacterSet></PropertyGroup><PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"><ConfigurationType>Application</ConfigurationType><UseDebugLibraries>false</UseDebugLibraries><PlatformToolset>v143</PlatformToolset><WholeProgramOptimization>true</WholeProgramOptimization><CharacterSet>Unicode</CharacterSet></PropertyGroup><Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /><ImportGroup Label="ExtensionSettings"></ImportGroup><ImportGroup Label="Shared"></ImportGroup><ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"><Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /></ImportGroup><ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"><Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com