1
0
mirror of https://github.com/LearnOpenGL-CN/LearnOpenGL-CN.git synced 2025-08-22 12:15:29 +08:00

更新“模型加载”章节 (#329)

* 更新“Assimp”原文

* 更新“网格”代码

* 更新“模型”中模型的漫反射样例图片

* 更新“模型”中模型的镜面高光样例图片

* 更新“模型”中关于模型样例的介绍文本

* 更新“模型”中背包模型的下载地址

* 更新背包模型
This commit is contained in:
1i9h7_b1u3
2025-01-14 18:48:17 +08:00
committed by GitHub
parent 189387630c
commit 8dee669152
6 changed files with 11 additions and 13 deletions

View File

@@ -40,7 +40,7 @@
## 构建Assimp
你可以在Assimp的[下载页面](http://assimp.org/index.php/downloads)中选择相应的版本。在写作时使用的Assimp最高版本为3.1.1。我们建议你自己编译Assimp库因为它们的预编译库在大部分系统上都是不能运行的。如果你忘记如何使用CMake自己编译一个库的话可以复习[创建窗口](../01 Getting started/02 Creating a window.md)小节。
你可以在Assimp的[GitHub页面](https://github.com/assimp/assimp/blob/master/Build.md)中选择相应的版本。本文使用的Assimp最高版本为3.1.1。我们建议你自己编译Assimp库因为它们的预编译库并不一定能适用于所有系统。如果你忘记如何使用CMake自己编译一个库的话可以复习[创建窗口](../01 Getting started/02 Creating a window.md)小节。
构建Assimp时可能会出现一些问题所以我会将它们的解决方案列在这里便于大家排除错误
@@ -54,18 +54,16 @@ and try again. If the library is already installed, set the missing variables
manually in cmake.
```
这个问题的解决方案是安装DirectX SDK,如果你之前没安装过的话。你可以从[这里](http://www.microsoft.com/en-us/download/details.aspx?id=6812)下载SDK。
如果你之前没安装过的话,那么这个问题的解决方案是安装DirectX SDK。你可以从[这里](http://www.microsoft.com/en-us/download/details.aspx?id=6812)下载SDK。
- 安装DirectX SDK时可能遇到一个错误码为`s1023`的错误。这种情况下请在安装SDK之前根据[这个](http://blogs.msdn.com/b/chuckw/archive/2011/12/09/known-issue-directx-sdk-june-2010-setup-and-the-s1023-error.aspx)先卸载C++ Redistributable package(s)。
- 一旦配置完成你就可以生成解决方案文件了打开解决方案文件并编译Assimp库可以编译为Debug版本也可以编译为Release版本只要能工作就行
- 使用默认配置构建的Assimp是一个动态库(Dynamic Library),所以我们需要包含所生成的**assimp.dll**文件以及程序的二进制文件。你可以简单地将DLL复制到我们程序可执行文件的同一目录中
- Assimp编译之后生成的库和DLL文件位于**code/Debug**或者**code/Release**文件夹中。
- 接着把编译好的LIB文件和DLL文件拷贝到工程的相应目录下并在解决方案中链接它们。并且记得把Assimp的头文件也复制到你的**include**目录中头文件可以在从Assimp中下载的**include**目录里找到)
- 安装DirectX SDK时可能遇到一个错误码为`s1023`的错误。这种情况下请在安装SDK之前先卸载C++ Redistributable package(s)。
一旦配置完成你就可以生成解决方案文件了打开解决方案文件并编译Assimp库可以编译为Debug版本也可以编译为Release版本只要能工作就行。因为所有的LearnOpenGL代码都是64位项目所以请确保在64位下编译这个库
使用默认配置构建的Assimp是一个动态库(Dynamic Library),所以所生成的**assimp.dll**文件文件名可能带有后缀需要随我们的程序可执行文件一并包含你可以简单地将DLL复制到我们程序可执行文件的同一目录中
Assimp编译之后生成的库和DLL文件位于**code/Debug**或者**code/Release**文件夹中。接着把编译好的LIB文件和DLL文件拷贝到工程的相应目录下然后在解决方案中链接它们。并且记得把Assimp的头文件也复制到你的**include**目录中头文件可以在下载的Assimp文件中的**include**目录里找到)。
如果你仍遇到了未报告的错误,欢迎在评论区中寻求帮助。
!!! Important
如果你想让Assimp使用多线程来获得更高的性能你可以使用Boost库来编译Assimp。你可以在它们的[安装页面](http://assimp.org/lib_html/install.html)找到完整的安装介绍。
现在你应该已经编译完Assimp库并将它链接到你的程序中了。下一步[导入](02 Mesh.md)漂亮的3D物体

View File

@@ -42,7 +42,7 @@ class Mesh {
vector<Texture> textures;
/* 函数 */
Mesh(vector<Vertex> vertices, vector<unsigned int> indices, vector<Texture> textures);
void Draw(Shader shader);
void Draw(Shader &shader);
private:
/* 渲染数据 */
unsigned int VAO, VBO, EBO;

View File

@@ -329,7 +329,7 @@ vector<Texture> loadMaterialTextures(aiMaterial *mat, aiTextureType type, string
# 和箱子模型告别
所以,让我们导入一个由真正的艺术家所创造的模型,替代我这个天才的作品(你要承认,这些箱子可能是你看过的最漂亮的立方体了),测试一下我们的实现吧。由于我不想让我占太多的功劳,我会偶尔让别的艺术家也加入我们,这次我们将会加载Crytek的游戏孤岛危机(Crysis)中的原版[纳米装](http://tf3dm.com/3d-model/crysis-2-nanosuit-2-97837.html)(Nanosuit)。这个模型被输出为一个`.obj`文件以及一个`.mtl`文件,`.mtl`文件包含了模型的漫反射、镜面光和法线贴图(这个会在后面学习到),你可以在[这里](../data/nanosuit.rar)下载到稍微修改之后的模型,注意所有的纹理和模型文件应该位于同一个目录下,以供加载纹理。
所以,让我们导入一个由真正的艺术家所创造的模型,替代我这个天才的作品(你要承认,这些箱子可能是你看过的最漂亮的立方体了),测试一下我们的实现吧。由于我不想让我占太多的功劳,我会偶尔让别的艺术家也加入我们,这次我们将会加载由Berk Gedik设计的[吉他生存背包](https://sketchfab.com/3d-models/survival-guitar-backpack-low-poly-799f8c4511f84fab8c3f12887f7e6b36)(Survival Guitar Backpack)。我稍微修改了材质和路径,这样便可与我们的模型加载代码兼容。这个模型被输出为一个.obj文件以及一个.mtl文件.mtl文件包含了模型的漫反射、镜面光和法线贴图这个会在后面学习到你可以在[这里](../data/backpack.zip)下载到稍微修改之后的模型,注意,我们不会用到它的一些额外的纹理类型,并且所有的纹理和模型文件应该位于同一个目录下,以供加载纹理。
!!! Important

BIN
docs/data/backpack.zip Normal file

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 182 KiB

After

Width:  |  Height:  |  Size: 223 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 175 KiB

After

Width:  |  Height:  |  Size: 192 KiB