mirror of
https://github.com/LearnOpenGL-CN/LearnOpenGL-CN.git
synced 2025-08-22 20:25:28 +08:00
Fix failing build
This commit is contained in:
@@ -124,7 +124,7 @@ glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
|
|||||||
|
|
||||||
顶点着色器是几个着色器中的一个,它是可编程的。现代OpenGL需要我们至少设置一个顶点和一个片段着色器,如果我们打算做渲染的话。我们会简要介绍一下着色器以及配置两个非常简单的着色器来绘制我们第一个三角形。下个教程里我们会更详细的讨论着色器。
|
顶点着色器是几个着色器中的一个,它是可编程的。现代OpenGL需要我们至少设置一个顶点和一个片段着色器,如果我们打算做渲染的话。我们会简要介绍一下着色器以及配置两个非常简单的着色器来绘制我们第一个三角形。下个教程里我们会更详细的讨论着色器。
|
||||||
|
|
||||||
我们需要做的第一件事是用着色器语言GlSL写顶点着色器,然后编译这个着色器,这样我们就可以在应用中使用它了。下面你会看到一个非常基础的顶点着色器的源代码,它就是使用GLSL写的:
|
我们需要做的第一件事是用着色器语言GLSL写顶点着色器,然后编译这个着色器,这样我们就可以在应用中使用它了。下面你会看到一个非常基础的顶点着色器的源代码,它就是使用GLSL写的:
|
||||||
|
|
||||||
```c++
|
```c++
|
||||||
#version 330 core
|
#version 330 core
|
||||||
@@ -137,7 +137,7 @@ void main()
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
就像你所看到的那样,GLSL看起来很像C。每个着色器都起始于一个版本声明。这是因为OpenGL3.3和更高的GLSL版本号要去匹配OpenGL的版本(GLSL420版本对应于OpenGL4.2)。我们同样显式地表示我们会用核心模式(Core-profile)。
|
就像你所看到的那样,GLSL看起来很像C语言。每个着色器都起始于一个版本声明。这是因为OpenGL 3.3和更高的GLSL版本号要去匹配OpenGL的版本(GLSL420版本对应于OpenGL 4.2)。我们同样显式地表示我们会用核心模式(Core-profile)。
|
||||||
|
|
||||||
下一步,我们在顶点着色器中声明所有的输入顶点属性,使用in关键字。现在我们只关心位置(Position)数据,所以我们只需要一个顶点属性(Attribute)。GLSL有一个向量数据类型,它包含1到4个`float`元素,包含的数量可以从它的后缀看出来。由于每个顶点都有一个3D坐标,我们就创建一个`vec3`输入变量来表示位置(Position)。我们同样也指定输入变量的位置值(Location),这是用`layout (location = 0)`来完成的,你后面会看到为什么我们会需要这个位置值。
|
下一步,我们在顶点着色器中声明所有的输入顶点属性,使用in关键字。现在我们只关心位置(Position)数据,所以我们只需要一个顶点属性(Attribute)。GLSL有一个向量数据类型,它包含1到4个`float`元素,包含的数量可以从它的后缀看出来。由于每个顶点都有一个3D坐标,我们就创建一个`vec3`输入变量来表示位置(Position)。我们同样也指定输入变量的位置值(Location),这是用`layout (location = 0)`来完成的,你后面会看到为什么我们会需要这个位置值。
|
||||||
|
|
||||||
@@ -145,7 +145,7 @@ void main()
|
|||||||
|
|
||||||
**向量(Vector)**
|
**向量(Vector)**
|
||||||
|
|
||||||
在图形编程中我们经常会使用向量这个数学概念,因为它简明地表达了任意空间中位置和方向,二者是有用的数学属性。在GLSL中一个向量有最多4个元素,每个元素值都可以从各自代表一个空间坐标的`vec.x`、`vec.y`、`vec.z`和`vec.w`来获取到。注意`vec.w`元素不是用作表达空间中的位置的(我们处理的是3D不是4D)而是用在所谓透视除法(Perspective Division)上。我们会在后面的教程中更详细地讨论向量。
|
在图形编程中我们经常会使用向量这个数学概念,因为它简明地表达了任意空间中位置和方向,二者是有用的数学属性。在GLSL中一个向量有最多4个元素,每个元素值都可以从各自代表一个空间坐标的`vec.x`、`vec.y`、`vec.z`和`vec.w`来获取到。注意`vec.w`元素不是用作表达空间中的位置的(我们处理的是3D不是4D)而是用在所谓透视划分(Perspective Division)上。我们会在后面的教程中更详细地讨论向量。
|
||||||
|
|
||||||
为了设置顶点着色器的输出,我们必须把位置数据赋值给预定义的`gl_Position`变量,这个位置数据是一个`vec4`类型的。在main函数的最后,无论我们给`gl_Position`设置成什么,它都会成为着色器的输出。由于我们的输入是一个3元素的向量,我们必须把它转换为4元素。我们可以通过把`vec3`数据作为`vec4`初始化构造器的参数,同时把`w`元素设置为`1.0f`(我们会在后面解释为什么)。
|
为了设置顶点着色器的输出,我们必须把位置数据赋值给预定义的`gl_Position`变量,这个位置数据是一个`vec4`类型的。在main函数的最后,无论我们给`gl_Position`设置成什么,它都会成为着色器的输出。由于我们的输入是一个3元素的向量,我们必须把它转换为4元素。我们可以通过把`vec3`数据作为`vec4`初始化构造器的参数,同时把`w`元素设置为`1.0f`(我们会在后面解释为什么)。
|
||||||
|
|
||||||
|
@@ -41,7 +41,7 @@ pages:
|
|||||||
- 阴影:
|
- 阴影:
|
||||||
- 阴影映射: '05 Advanced Lighting/03 Shadows/01 Shadow Mapping.md'
|
- 阴影映射: '05 Advanced Lighting/03 Shadows/01 Shadow Mapping.md'
|
||||||
- 点阴影: '05 Advanced Lighting/03 Shadows/02 Point Shadows.md'
|
- 点阴影: '05 Advanced Lighting/03 Shadows/02 Point Shadows.md'
|
||||||
- CMS: '05 Advanced Lighting/03 Shadows/03 CMS.md'
|
- CSM: '05 Advanced Lighting/03 Shadows/03 CSM.md'
|
||||||
- 法线贴图: '05 Advanced Lighting/04 Normal Mapping.md'
|
- 法线贴图: '05 Advanced Lighting/04 Normal Mapping.md'
|
||||||
- 视差贴图: '05 Advanced Lighting/05 Parallax Mapping.md'
|
- 视差贴图: '05 Advanced Lighting/05 Parallax Mapping.md'
|
||||||
- HDR: '05 Advanced Lighting/06 HDR.md'
|
- HDR: '05 Advanced Lighting/06 HDR.md'
|
||||||
|
Reference in New Issue
Block a user