From 1e5303433fc6fd08fba930a33bc9f7b4ca74fcc0 Mon Sep 17 00:00:00 2001 From: Meow J Date: Sat, 17 Jun 2017 21:07:38 +0800 Subject: [PATCH] Update 01-06 --- docs/01 Getting started/06 Textures.md | 147 ++++++++++++++----------- docs/img/01/06/textures_exercise2.png | Bin 0 -> 80770 bytes docs/legacy.md | 147 ++++++++++++++++++++++++- 3 files changed, 231 insertions(+), 63 deletions(-) create mode 100644 docs/img/01/06/textures_exercise2.png diff --git a/docs/01 Getting started/06 Textures.md b/docs/01 Getting started/06 Textures.md index c138375..9d787b3 100644 --- a/docs/01 Getting started/06 Textures.md +++ b/docs/01 Getting started/06 Textures.md @@ -29,7 +29,7 @@ 纹理坐标看起来就像这样: ```c++ -GLfloat texCoords[] = { +float texCoords[] = { 0.0f, 0.0f, // 左下角 1.0f, 0.0f, // 右下角 0.5f, 1.0f // 上中 @@ -131,31 +131,38 @@ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 使用纹理之前要做的第一件事是把它们加载到我们的应用中。纹理图像可能被储存为各种各样的格式,每种都有自己的数据结构和排列,所以我们如何才能把这些图像加载到应用中呢?一个解决方案是选一个需要的文件格式,比如`.PNG`,然后自己写一个图像加载器,把图像转化为字节序列。写自己的图像加载器虽然不难,但仍然挺麻烦的,而且如果要支持更多文件格式呢?你就不得不为每种你希望支持的格式写加载器了。 -另一个解决方案也许是一种更好的选择,使用一个支持多种流行格式的图像加载库来为我们解决这个问题。比如说我们要用的SOIL库。 +另一个解决方案也许是一种更好的选择,使用一个支持多种流行格式的图像加载库来为我们解决这个问题。比如说我们要用的`stb_image.h`库。 -## SOIL +## stb_image.h -SOIL是简易OpenGL图像库(Simple OpenGL Image Library)的缩写,它支持大多数流行的图像格式,使用起来也很简单,你可以从他们的[主页](http://www.lonesock.net/soil.html)下载。像其它库一样,你必须自己生成**.lib**。你可以使用**/projects**文件夹内的任意一个解决方案(Solution)文件(不用担心他们的Visual Studio版本太老,你可以把它们转变为新的版本,这一般是没问题的。译注:用VS2010的时候,你要用VC8而不是VC9的解决方案,想必更高版本的情况亦是如此)来生成你自己的**.lib**文件。你还要添加**src**文件夹里面的文件到你的**includes**文件夹;对了,不要忘记添加**SOIL.lib**到你的链接器选项,并在你代码文件的开头加上`#include `。 - -下面的教程中,我们会使用一张[木箱](../img/01/06/container.jpg)的图片。要使用SOIL加载图片,我们需要使用它的SOIL_load_image函数: +`stb_image.h`是[Sean Barrett](https://github.com/nothings)的一个非常流行的单头文件图像加载库,它能够加载大部分流行的文件格式,并且能够很简单得整合到你的工程之中。`stb_image.h`可以在[这里](https://github.com/nothings/stb/blob/master/stb_image.h)下载。下载这一个头文件,将它以`stb_image.h`的名字加入你的工程,并另创建一个新的C++文件,输入以下代码: ```c++ -int width, height; -unsigned char* image = SOIL_load_image("container.jpg", &width, &height, 0, SOIL_LOAD_RGB); +#define STB_IMAGE_IMPLEMENTATION +#include "stb_image.h" ``` -函数首先需要输入图片文件的路径。然后需要两个`int`指针作为第二个和第三个参数,SOIL会分别返回图片的**宽度**和**高度**到其中。后面我们在生成纹理的时候会用图像的宽度和高度。第四个参数指定图片的**通道**(Channel)数量,但是这里我们只需留为`0`。最后一个参数告诉SOIL如何来加载图片:我们只关注图片的`RGB`值。结果会储存为一个很大的char/byte数组。 +通过定义STB_IMAGE_IMPLEMENTATION,预处理器会修改头文件,让其只包含相关的函数定义源码,等于是将这个头文件变为一个 `.cpp` 文件了。现在只需要在你的程序中包含`stb_image.h`并编译就可以了。 + +下面的教程中,我们会使用一张[木箱](../img/01/06/container.jpg)的图片。要使用`stb_image.h`加载图片,我们需要使用它的stbi_load函数: + +```c++ +int width, height, nrChannels; +unsigned char *data = stbi_load("container.jpg", &width, &height, &nrChannels, 0); +``` + +这个函数首先接受一个图像文件的位置作为输入。接下来它需要三个`int`作为它的第二、第三和第四个参数,`stb_image.h`将会用图像的**宽度**、**高度**和**颜色通道的个数**填充这三个变量。我们之后生成纹理的时候会用到的图像的宽度和高度的。 ## 生成纹理 和之前生成的OpenGL对象一样,纹理也是使用ID引用的。让我们来创建一个: ```c++ -GLuint texture; +unsigned int texture; glGenTextures(1, &texture); ``` -glGenTextures函数首先需要输入生成纹理的数量,然后把它们储存在第二个参数的`GLuint`数组中(我们的例子中只是一个单独的`GLuint`),就像其他对象一样,我们需要绑定它,让之后任何的纹理指令都可以配置当前绑定的纹理: +glGenTextures函数首先需要输入生成纹理的数量,然后把它们储存在第二个参数的`unsigned int`数组中(我们的例子中只是单独的一个`unsigned int`),就像其他对象一样,我们需要绑定它,让之后任何的纹理指令都可以配置当前绑定的纹理: ```c++ glBindTexture(GL_TEXTURE_2D, texture); @@ -164,7 +171,7 @@ glBindTexture(GL_TEXTURE_2D, texture); 现在纹理已经绑定了,我们可以使用前面载入的图片数据生成一个纹理了。纹理可以通过glTexImage2D来生成: ```c++ -glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, image); +glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data); glGenerateMipmap(GL_TEXTURE_2D); ``` @@ -174,34 +181,42 @@ glGenerateMipmap(GL_TEXTURE_2D); - 第二个参数为纹理指定多级渐远纹理的级别,如果你希望单独手动设置每个多级渐远纹理的级别的话。这里我们填0,也就是基本级别。 - 第三个参数告诉OpenGL我们希望把纹理储存为何种格式。我们的图像只有`RGB`值,因此我们也把纹理储存为`RGB`值。 - 第四个和第五个参数设置最终的纹理的宽度和高度。我们之前加载图像的时候储存了它们,所以我们使用对应的变量。 -- 下个参数应该总是被设为`0`(历史遗留问题)。 +- 下个参数应该总是被设为`0`(历史遗留的问题)。 - 第七第八个参数定义了源图的格式和数据类型。我们使用RGB值加载这个图像,并把它们储存为`char`(byte)数组,我们将会传入对应值。 - 最后一个参数是真正的图像数据。 当调用glTexImage2D时,当前绑定的纹理对象就会被附加上纹理图像。然而,目前只有基本级别(Base-level)的纹理图像被加载了,如果要使用多级渐远纹理,我们必须手动设置所有不同的图像(不断递增第二个参数)。或者,直接在生成纹理之后调用glGenerateMipmap。这会为当前绑定的纹理自动生成所有需要的多级渐远纹理。 -生成了纹理和相应的多级渐远纹理后,释放图像的内存并解绑纹理对象是一个很好的习惯。 +生成了纹理和相应的多级渐远纹理后,释放图像的内存是一个很好的习惯。 ```c++ -SOIL_free_image_data(image); -glBindTexture(GL_TEXTURE_2D, 0); +stbi_image_free(data); ``` 生成一个纹理的过程应该看起来像这样: ```c++ -GLuint texture; +unsigned int texture; glGenTextures(1, &texture); glBindTexture(GL_TEXTURE_2D, texture); // 为当前绑定的纹理对象设置环绕、过滤方式 -... +glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); +glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); +glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); +glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // 加载并生成纹理 -int width, height; -unsigned char* image = SOIL_load_image("container.jpg", &width, &height, 0, SOIL_LOAD_RGB); -glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, image); -glGenerateMipmap(GL_TEXTURE_2D); -SOIL_free_image_data(image); -glBindTexture(GL_TEXTURE_2D, 0); +int width, height, nrChannels; +unsigned char *data = stbi_load("container.jpg", &width, &height, &nrChannels, 0); +if (data) +{ + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data); + glGenerateMipmap(GL_TEXTURE_2D); +} +else +{ + std::cout << "Failed to load texture" << std::endl; +} +stbi_image_free(data); ``` ## 应用纹理 @@ -209,7 +224,7 @@ glBindTexture(GL_TEXTURE_2D, 0); 后面的这部分我们会使用glDrawElements绘制[「你好,三角形」](04 Hello Triangle.md)教程最后一部分的矩形。我们需要告知OpenGL如何采样纹理,所以我们必须使用纹理坐标更新顶点数据: ```c++ -GLfloat vertices[] = { +float vertices[] = { // ---- 位置 ---- ---- 颜色 ---- - 纹理坐标 - 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, // 右上 0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, // 右下 @@ -223,46 +238,46 @@ GLfloat vertices[] = { ![](../img/01/06/vertex_attribute_pointer_interleaved_textures.png) ```c++ -glVertexAttribPointer(2, 2, GL_FLOAT,GL_FALSE, 8 * sizeof(GLfloat), (GLvoid*)(6 * sizeof(GLfloat))); +glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(6 * sizeof(float))); glEnableVertexAttribArray(2); ``` -注意,我们同样需要调整前面两个顶点属性的步长参数为`8 * sizeof(GLfloat)`。 +注意,我们同样需要调整前面两个顶点属性的步长参数为`8 * sizeof(float)`。 接着我们需要调整顶点着色器使其能够接受顶点坐标为一个顶点属性,并把坐标传给片段着色器: ```c++ #version 330 core -layout (location = 0) in vec3 position; -layout (location = 1) in vec3 color; -layout (location = 2) in vec2 texCoord; +layout (location = 0) in vec3 aPos; +layout (location = 1) in vec3 aColor; +layout (location = 2) in vec2 aTexCoord; out vec3 ourColor; out vec2 TexCoord; void main() { - gl_Position = vec4(position, 1.0f); - ourColor = color; - TexCoord = texCoord; + gl_Position = vec4(aPos, 1.0); + ourColor = aColor; + TexCoord = aTexCoord; } ``` -片段着色器应该把输出变量`TexCoord`作为输入变量。 +片段着色器应该接下来会把输出变量`TexCoord`作为输入变量。 片段着色器也应该能访问纹理对象,但是我们怎样能把纹理对象传给片段着色器呢?GLSL有一个供纹理对象使用的内建数据类型,叫做采样器(Sampler),它以纹理类型作为后缀,比如`sampler1D`、`sampler3D`,或在我们的例子中的`sampler2D`。我们可以简单声明一个`uniform sampler2D`把一个纹理添加到片段着色器中,稍后我们会把纹理赋值给这个uniform。 ```c++ #version 330 core +out vec4 FragColor; + in vec3 ourColor; in vec2 TexCoord; -out vec4 color; - uniform sampler2D ourTexture; void main() { - color = texture(ourTexture, TexCoord); + FragColor = texture(ourTexture, TexCoord); } ``` @@ -274,19 +289,22 @@ void main() glBindTexture(GL_TEXTURE_2D, texture); glBindVertexArray(VAO); glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); -glBindVertexArray(0); ``` 如果你跟着这个教程正确地做完了,你会看到下面的图像: ![](../img/01/06/textures2.png) -如果你的矩形是全黑或全白的你可能在哪儿做错了什么。检查你的着色器日志,并尝试对比一下[源码](http://learnopengl.com/code_viewer.php?code=getting-started/textures)。 +如果你的矩形是全黑或全白的你可能在哪儿做错了什么。检查你的着色器日志,并尝试对比一下[源码](https://learnopengl.com/code_viewer_gh.php?code=src/1.getting_started/4.1.textures/textures.cpp)。 + +!!! attention + + 如果你的纹理代码不能正常工作或者显示是全黑,请继续阅读,并一直跟进我们的代码到最后的例子,它是应该能够工作的。在一些驱动中,必须要对每个采样器uniform都附加上纹理单元才可以,这个会在下面介绍。 我们还可以把得到的纹理颜色与顶点颜色混合,来获得更有趣的效果。我们只需把纹理颜色与顶点颜色在片段着色器中相乘来混合二者的颜色: ```c++ -color = texture(ourTexture, TexCoord) * vec4(ourColor, 1.0f); +FragColor = texture(ourTexture, TexCoord) * vec4(ourColor, 1.0); ``` 最终的效果应该是顶点颜色和纹理颜色的混合色: @@ -302,7 +320,7 @@ color = texture(ourTexture, TexCoord) * vec4(ourColor, 1.0f); 纹理单元的主要目的是让我们在着色器中可以使用多于一个的纹理。通过把纹理单元赋值给采样器,我们可以一次绑定多个纹理,只要我们首先激活对应的纹理单元。就像glBindTexture一样,我们可以使用glActiveTexture激活纹理单元,传入我们需要使用的纹理单元: ```c++ -glActiveTexture(GL_TEXTURE0); //在绑定纹理之前先激活纹理单元 +glActiveTexture(GL_TEXTURE0); // 在绑定纹理之前先激活纹理单元 glBindTexture(GL_TEXTURE_2D, texture); ``` @@ -323,7 +341,7 @@ uniform sampler2D ourTexture2; void main() { - color = mix(texture(ourTexture1, TexCoord), texture(ourTexture2, TexCoord), 0.2); + FragColor = mix(texture(ourTexture1, TexCoord), texture(ourTexture2, TexCoord), 0.2); } ``` @@ -336,42 +354,47 @@ void main() ```c++ glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, texture1); -glUniform1i(glGetUniformLocation(ourShader.Program, "ourTexture1"), 0); glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, texture2); -glUniform1i(glGetUniformLocation(ourShader.Program, "ourTexture2"), 1); glBindVertexArray(VAO); -glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); -glBindVertexArray(0); +glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); ``` -注意,我们使用glUniform1i设置uniform采样器的位置值,或者说纹理单元。通过glUniform1i的设置,我们保证每个uniform采样器对应着正确的纹理单元。你应该能得到下面的结果: +我们还要通过使用glUniform1i设置每个采样器的方式告诉OpenGL每个着色器采样器属于哪个纹理单元。我们只需要设置一次即可,所以这个会放在渲染循环的前面: + +```c++ +ourShader.use(); // 别忘记在激活着色器前先设置uniform! +glUniform1i(glGetUniformLocation(ourShader.ID, "texture1"), 0); // 手动设置 +ourShader.setInt("texture2", 1); // 或者使用着色器类设置 + +while(...) +{ + [...] +} +``` + +通过使用glUniform1i设置采样器,我们保证了每个uniform采样器对应着正确的纹理单元。你应该能得到下面的结果: ![](../img/01/06/textures_combined.png) -你可能注意到纹理上下颠倒了!这是因为OpenGL要求y轴`0.0`坐标是在图片的底部的,但是图片的y轴`0.0`坐标通常在顶部。一些图片加载器比如[DevIL](http://openil.sourceforge.net/tuts/tut_10/index.htm)在加载的时候有选项重置y原点,但是SOIL没有。SOIL却有一个叫做SOIL_load_OGL_texture函数可以使用一个叫做SOIL_FLAG_INVERT_Y的标记加载**并**生成纹理,这可以解决我们的问题。不过这个函数用了一些在现代OpenGL中失效的特性,所以现在我们仍需坚持使用SOIL_load_image,自己做纹理的生成。 +你可能注意到纹理上下颠倒了!这是因为OpenGL要求y轴`0.0`坐标是在图片的底部的,但是图片的y轴`0.0`坐标通常在顶部。很幸运,`stb_image.h`能够在图像加载时帮助我们翻转y轴,只需要在加载任何图像前加入以下语句即可: -所以修复我们的小问题,有两个选择: +```c++ +stbi_set_flip_vertically_on_load(true); +``` -1. 我们可以改变顶点数据的纹理坐标,翻转`y`值(用1减去y坐标)。 -2. 我们可以编辑顶点着色器来自动翻转`y`坐标,替换`TexCoord`的值为`TexCoord = vec2(texCoord.x, 1.0f - texCoord.y);`。 - -!!! Attention - - 上面提供的解决方案仅仅通过一些黑科技让图片翻转。它们在大多数情况下都能正常工作,然而实际上这种方案的效果取决于你的实现和纹理,所以最好的解决方案是调整你的图片加载器,或者以一种y原点符合OpenGL需求的方式编辑你的纹理图像。 - -如果你编辑了顶点数据,在顶点着色器中翻转了纵坐标,你会得到下面的结果: +在让`stb_image.h`在加载图片时翻转y轴之后你就应该能够获得下面的结果了: ![](../img/01/06/textures_combined2.png) -如果你看到了一个开心的箱子,你就做对了。你可以对比一下[源代码](http://learnopengl.com/code_viewer.php?code=getting-started/textures_combined),以及[顶点着](http://learnopengl.com/code_viewer.php?type=vertex&code=getting-started/texture)和[片段](http://learnopengl.com/code_viewer.php?type=fragment&code=getting-started/texture)着色器。 +如果你看到了一个开心的箱子,你就做对了。你可以对比一下[源代码](https://learnopengl.com/code_viewer_gh.php?code=src/1.getting_started/4.2.textures_combined/textures_combined.cpp)。 ## 练习 为了更熟练地使用纹理,建议在继续之后的学习之前做完这些练习: -- 修改片段着色器,**仅**让笑脸图案朝另一个方向看,[参考解答](http://learnopengl.com/code_viewer.php?code=getting-started/textures-exercise1) -- 尝试用不同的纹理环绕方式,设定一个从`0.0f`到`2.0f`范围内的(而不是原来的`0.0f`到`1.0f`)纹理坐标。试试看能不能在箱子的角落放置4个笑脸:[参考解答](http://learnopengl.com/code_viewer.php?code=getting-started/textures-exercise2),[结果](http://learnopengl.com/img/getting-started/textures_exercise2.png)。记得一定要试试其他的环绕方式。 -- 尝试在矩形上只显示纹理图像的中间一部分,修改纹理坐标,达到能看见单个的像素的效果。尝试使用GL_NEAREST的纹理过滤方式让像素显示得更清晰:[参考解答](http://learnopengl.com/code_viewer.php?code=getting-started/textures-exercise3) -- 使用一个uniform变量作为mix函数的第三个参数来改变两个纹理可见度,使用上和下键来改变箱子或笑脸的可见度:[参考解答](http://learnopengl.com/code_viewer.php?code=getting-started/textures-exercise4),[片段着色器](http://learnopengl.com/code_viewer.php?code=getting-started/textures-exercise4_fragment)。 +- 修改片段着色器,**仅**让笑脸图案朝另一个方向看,[参考解答](https://learnopengl.com/code_viewer.php?code=getting-started/textures-exercise1) +- 尝试用不同的纹理环绕方式,设定一个从`0.0f`到`2.0f`范围内的(而不是原来的`0.0f`到`1.0f`)纹理坐标。试试看能不能在箱子的角落放置4个笑脸:[参考解答](https://learnopengl.com/code_viewer_gh.php?code=src/1.getting_started/4.3.textures_exercise2/textures_exercise2.cpp),[结果](../img/01/06/textures_exercise2.png)。记得一定要试试其它的环绕方式。 +- 尝试在矩形上只显示纹理图像的中间一部分,修改纹理坐标,达到能看见单个的像素的效果。尝试使用GL_NEAREST的纹理过滤方式让像素显示得更清晰:[参考解答](https://learnopengl.com/code_viewer_gh.php?code=src/1.getting_started/4.4.textures_exercise3/textures_exercise3.cpp) +- 使用一个uniform变量作为mix函数的第三个参数来改变两个纹理可见度,使用上和下键来改变箱子或笑脸的可见度:[参考解答](https://learnopengl.com/code_viewer_gh.php?code=src/1.getting_started/4.5.textures_exercise4/textures_exercise4.cpp)。 diff --git a/docs/img/01/06/textures_exercise2.png b/docs/img/01/06/textures_exercise2.png new file mode 100644 index 0000000000000000000000000000000000000000..6c1e91df761607af52ecdc885aff6cc6a2471939 GIT binary patch literal 80770 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�^xOun%-rcK8g7&#~ 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 gDn`。 + +下面的教程中,我们会使用一张[木箱](img/01/06/container.jpg)的图片。要使用SOIL加载图片,我们需要使用它的SOIL_load_image函数: + +```c++ +int width, height; +unsigned char* image = SOIL_load_image("container.jpg", &width, &height, 0, SOIL_LOAD_RGB); +``` + +函数首先需要输入图片文件的路径。然后需要两个`int`指针作为第二个和第三个参数,SOIL会分别返回图片的**宽度**和**高度**到其中。后面我们在生成纹理的时候会用图像的宽度和高度。第四个参数指定图片的**通道**(Channel)数量,但是这里我们只需留为`0`。最后一个参数告诉SOIL如何来加载图片:我们只关注图片的`RGB`值。结果会储存为一个很大的char/byte数组。 + +### 生成纹理 + +和之前生成的OpenGL对象一样,纹理也是使用ID引用的。让我们来创建一个: + +```c++ +GLuint texture; +glGenTextures(1, &texture); +``` + +glGenTextures函数首先需要输入生成纹理的数量,然后把它们储存在第二个参数的`GLuint`数组中(我们的例子中只是一个单独的`GLuint`),就像其他对象一样,我们需要绑定它,让之后任何的纹理指令都可以配置当前绑定的纹理: + +```c++ +glBindTexture(GL_TEXTURE_2D, texture); +``` + +现在纹理已经绑定了,我们可以使用前面载入的图片数据生成一个纹理了。纹理可以通过glTexImage2D来生成: + +```c++ +glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, image); +glGenerateMipmap(GL_TEXTURE_2D); +``` + +函数很长,参数也不少,所以我们一个一个地讲解: + +- 第一个参数指定了纹理目标(Target)。设置为GL_TEXTURE_2D意味着会生成与当前绑定的纹理对象在同一个目标上的纹理(任何绑定到GL_TEXTURE_1DGL_TEXTURE_3D的纹理不会受到影响)。 +- 第二个参数为纹理指定多级渐远纹理的级别,如果你希望单独手动设置每个多级渐远纹理的级别的话。这里我们填0,也就是基本级别。 +- 第三个参数告诉OpenGL我们希望把纹理储存为何种格式。我们的图像只有`RGB`值,因此我们也把纹理储存为`RGB`值。 +- 第四个和第五个参数设置最终的纹理的宽度和高度。我们之前加载图像的时候储存了它们,所以我们使用对应的变量。 +- 下个参数应该总是被设为`0`(历史遗留问题)。 +- 第七第八个参数定义了源图的格式和数据类型。我们使用RGB值加载这个图像,并把它们储存为`char`(byte)数组,我们将会传入对应值。 +- 最后一个参数是真正的图像数据。 + +当调用glTexImage2D时,当前绑定的纹理对象就会被附加上纹理图像。然而,目前只有基本级别(Base-level)的纹理图像被加载了,如果要使用多级渐远纹理,我们必须手动设置所有不同的图像(不断递增第二个参数)。或者,直接在生成纹理之后调用glGenerateMipmap。这会为当前绑定的纹理自动生成所有需要的多级渐远纹理。 + +生成了纹理和相应的多级渐远纹理后,释放图像的内存并解绑纹理对象是一个很好的习惯。 + +```c++ +SOIL_free_image_data(image); +glBindTexture(GL_TEXTURE_2D, 0); +``` + +生成一个纹理的过程应该看起来像这样: + +```c++ +GLuint texture; +glGenTextures(1, &texture); +glBindTexture(GL_TEXTURE_2D, texture); +// 为当前绑定的纹理对象设置环绕、过滤方式 +... +// 加载并生成纹理 +int width, height; +unsigned char* image = SOIL_load_image("container.jpg", &width, &height, 0, SOIL_LOAD_RGB); +glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, image); +glGenerateMipmap(GL_TEXTURE_2D); +SOIL_free_image_data(image); +glBindTexture(GL_TEXTURE_2D, 0); +``` + +### 纹理单元 + +你可能会奇怪为什么`sampler2D`变量是个uniform,我们却不用glUniform给它赋值。使用glUniform1i,我们可以给纹理采样器分配一个位置值,这样的话我们能够在一个片段着色器中设置多个纹理。一个纹理的位置值通常称为一个纹理单元(Texture Unit)。一个纹理的默认纹理单元是0,它是默认的激活纹理单元,所以教程前面部分我们没有分配一个位置值。 + +纹理单元的主要目的是让我们在着色器中可以使用多于一个的纹理。通过把纹理单元赋值给采样器,我们可以一次绑定多个纹理,只要我们首先激活对应的纹理单元。就像glBindTexture一样,我们可以使用glActiveTexture激活纹理单元,传入我们需要使用的纹理单元: + +```c++ +glActiveTexture(GL_TEXTURE0); //在绑定纹理之前先激活纹理单元 +glBindTexture(GL_TEXTURE_2D, texture); +``` + +激活纹理单元之后,接下来的glBindTexture函数调用会绑定这个纹理到当前激活的纹理单元,纹理单元GL_TEXTURE0默认总是被激活,所以我们在前面的例子里当我们使用`glBindTexture`的时候,无需激活任何纹理单元。 + +!!! Important + + OpenGL至少保证有16个纹理单元供你使用,也就是说你可以激活从GL_TEXTURE0GL_TEXTRUE15。它们都是按顺序定义的,所以我们也可以通过GL_TEXTURE0 + 8的方式获得GL_TEXTURE8,这在当我们需要循环一些纹理单元的时候会很有用。 + +我们仍然需要编辑片段着色器来接收另一个采样器。这应该相对来说非常直接了: + +```c++ +#version 330 core +... + +uniform sampler2D ourTexture1; +uniform sampler2D ourTexture2; + +void main() +{ + color = mix(texture(ourTexture1, TexCoord), texture(ourTexture2, TexCoord), 0.2); +} +``` + +最终输出颜色现在是两个纹理的结合。GLSL内建的mix函数需要接受两个值作为参数,并对它们根据第三个参数进行线性插值。。如果第三个值是`0.0`,它会返回第一个输入;如果是`1.0`,会返回第二个输入值。`0.2`会返回`80%`的第一个输入颜色和`20%`的第二个输入颜色,即返回两个纹理的混合色。 + +我们现在需要载入并创建另一个纹理;你应该对这些步骤很熟悉了。记得创建另一个纹理对象,载入图片,使用glTexImage2D生成最终纹理。对于第二个纹理我们使用一张[你学习OpenGL时的面部表情](img/01/06/awesomeface.png)图片。 + +为了使用第二个纹理(以及第一个),我们必须改变一点渲染流程,先绑定两个纹理到对应的纹理单元,然后定义哪个uniform采样器对应哪个纹理单元: + +```c++ +glActiveTexture(GL_TEXTURE0); +glBindTexture(GL_TEXTURE_2D, texture1); +glUniform1i(glGetUniformLocation(ourShader.Program, "ourTexture1"), 0); +glActiveTexture(GL_TEXTURE1); +glBindTexture(GL_TEXTURE_2D, texture2); +glUniform1i(glGetUniformLocation(ourShader.Program, "ourTexture2"), 1); + +glBindVertexArray(VAO); +glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); +glBindVertexArray(0); +``` + +注意,我们使用glUniform1i设置uniform采样器的位置值,或者说纹理单元。通过glUniform1i的设置,我们保证每个uniform采样器对应着正确的纹理单元。你应该能得到下面的结果: + +![](img/01/06/textures_combined.png) + +你可能注意到纹理上下颠倒了!这是因为OpenGL要求y轴`0.0`坐标是在图片的底部的,但是图片的y轴`0.0`坐标通常在顶部。一些图片加载器比如[DevIL](http://openil.sourceforge.net/tuts/tut_10/index.htm)在加载的时候有选项重置y原点,但是SOIL没有。SOIL却有一个叫做SOIL_load_OGL_texture函数可以使用一个叫做SOIL_FLAG_INVERT_Y的标记加载**并**生成纹理,这可以解决我们的问题。不过这个函数用了一些在现代OpenGL中失效的特性,所以现在我们仍需坚持使用SOIL_load_image,自己做纹理的生成。 + +所以修复我们的小问题,有两个选择: + +1. 我们可以改变顶点数据的纹理坐标,翻转`y`值(用1减去y坐标)。 +2. 我们可以编辑顶点着色器来自动翻转`y`坐标,替换`TexCoord`的值为`TexCoord = vec2(texCoord.x, 1.0f - texCoord.y);`。 + +!!! Attention + + 上面提供的解决方案仅仅通过一些黑科技让图片翻转。它们在大多数情况下都能正常工作,然而实际上这种方案的效果取决于你的实现和纹理,所以最好的解决方案是调整你的图片加载器,或者以一种y原点符合OpenGL需求的方式编辑你的纹理图像。 + +如果你编辑了顶点数据,在顶点着色器中翻转了纵坐标,你会得到下面的结果: + +![](img/01/06/textures_combined2.png) + +如果你看到了一个开心的箱子,你就做对了。你可以对比一下[源代码](http://learnopengl.com/code_viewer.php?code=getting-started/textures_combined),以及[顶点着](http://learnopengl.com/code_viewer.php?type=vertex&code=getting-started/texture)和[片段](http://learnopengl.com/code_viewer.php?type=fragment&code=getting-started/texture)着色器。 \ No newline at end of file