从零开始写C++3D游戏引擎(开发情况VS2022+OpenGL)之十一 从打光到材质 细 ...

打印 上一主题 下一主题

主题 949|帖子 949|积分 2847

写在篇前的话

作为一个曾经在代码堆里面苦苦挣扎的萌新,困惑的事情在于库,各种依赖,包换文件,链接库,纠结于代码的作用意义。尤其在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个文件,分别是:

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

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

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

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

在本博客附属的资源中,工程设置文件一共有三个,分别是chapter11.vcxproj;chapter11.vcxproj.filters;chapter11.vcxproj.user,这三个文件都可以用记事本或者nodepad++打开并修改,不外我们更加要关心的是第一个文件chapter11.vcxproj,里面的内容如下:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  3.   <ItemGroup Label="ProjectConfigurations">
  4.     <ProjectConfiguration Include="Debug|Win32">
  5.       <Configuration>Debug</Configuration>
  6.       <Platform>Win32</Platform>
  7.     </ProjectConfiguration>
  8.     <ProjectConfiguration Include="Release|Win32">
  9.       <Configuration>Release</Configuration>
  10.       <Platform>Win32</Platform>
  11.     </ProjectConfiguration>
  12.     <ProjectConfiguration Include="Debug|x64">
  13.       <Configuration>Debug</Configuration>
  14.       <Platform>x64</Platform>
  15.     </ProjectConfiguration>
  16.     <ProjectConfiguration Include="Release|x64">
  17.       <Configuration>Release</Configuration>
  18.       <Platform>x64</Platform>
  19.     </ProjectConfiguration>
  20.   </ItemGroup>
  21.   <PropertyGroup Label="Globals">
  22.     <VCProjectVersion>17.0</VCProjectVersion>
  23.     <Keyword>Win32Proj</Keyword>
  24.     <ProjectGuid>{5c49ea2e-3d95-4766-ab3b-129387fbf142}</ProjectGuid>
  25.     <RootNamespace>ConsoleApplication1</RootNamespace>
  26.     <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
  27.     <ProjectName>chapter11</ProjectName>
  28.   </PropertyGroup>
  29.   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  30.   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
  31.     <ConfigurationType>Application</ConfigurationType>
  32.     <UseDebugLibraries>true</UseDebugLibraries>
  33.     <PlatformToolset>v143</PlatformToolset>
  34.     <CharacterSet>Unicode</CharacterSet>
  35.   </PropertyGroup>
  36.   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
  37.     <ConfigurationType>Application</ConfigurationType>
  38.     <UseDebugLibraries>false</UseDebugLibraries>
  39.     <PlatformToolset>v143</PlatformToolset>
  40.     <WholeProgramOptimization>true</WholeProgramOptimization>
  41.     <CharacterSet>Unicode</CharacterSet>
  42.   </PropertyGroup>
  43.   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
  44.     <ConfigurationType>Application</ConfigurationType>
  45.     <UseDebugLibraries>true</UseDebugLibraries>
  46.     <PlatformToolset>v143</PlatformToolset>
  47.     <CharacterSet>Unicode</CharacterSet>
  48.   </PropertyGroup>
  49.   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
  50.     <ConfigurationType>Application</ConfigurationType>
  51.     <UseDebugLibraries>false</UseDebugLibraries>
  52.     <PlatformToolset>v143</PlatformToolset>
  53.     <WholeProgramOptimization>true</WholeProgramOptimization>
  54.     <CharacterSet>Unicode</CharacterSet>
  55.   </PropertyGroup>
  56.   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  57.   <ImportGroup Label="ExtensionSettings">
  58.   </ImportGroup>
  59.   <ImportGroup Label="Shared">
  60.   </ImportGroup>
  61.   <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
  62.     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  63.   </ImportGroup>
  64.   <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
  65.     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  66.   
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

九天猎人

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表