1
0
mirror of https://github.com/LearnOpenGL-CN/LearnOpenGL-CN.git synced 2025-08-23 04:35:28 +08:00

Merge pull request #172 from LBV2012-26/patch-1

Update 04 Hello Triangle.md
This commit is contained in:
Gary Wang
2021-02-05 20:23:24 +08:00
committed by GitHub

View File

@@ -160,8 +160,18 @@ void main()
当前这个顶点着色器可能是我们能想到的最简单的顶点着色器了因为我们对输入数据什么都没有处理就把它传到着色器的输出了。在真实的程序里输入数据通常都不是标准化设备坐标所以我们首先必须先把它们转换至OpenGL的可视区域内。
## 编译着色器
现在我们暂时将顶点着色器的源代码硬编码在代码文件顶部的C风格字符串中
我们已经写了一个顶点着色器源码储存在一个C的字符串中但是为了能够让OpenGL使用它我们必须在运行时动态编译它的源码。
```c++
const char *vertexShaderSource = "#version 330 core\n"
"layout (location = 0) in vec3 aPos;\n"
"void main()\n"
"{\n"
" gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);\n"
"}\0";
```
为了能够让OpenGL使用它我们必须在运行时动态编译它的源代码。
我们首先要做的是创建一个着色器对象注意还是用ID来引用的。所以我们储存这个顶点着色器为`unsigned int`,然后用<fun>glCreateShader</fun>创建这个着色器:
@@ -217,7 +227,7 @@ void main()
}
```
片段着色器只需要一个输出变量这个变量是一个4分量向量它表示的是最终的输出颜色我们应该自己将其计算出来。我们可以用`out`关键字声明输出变量,这里我们命名为<var>FragColor</var>。下面,我们将一个alpha值为1.0(1.0代表完全不透明)的橘黄色的`vec4`赋值给颜色输出。
片段着色器只需要一个输出变量这个变量是一个4分量向量它表示的是最终的输出颜色我们应该自己将其计算出来。声明输出变量可以使用`out`关键字,这里我们命名为<var>FragColor</var>。下面,我们将一个Alpha值为1.0(1.0代表完全不透明)的橘黄色的`vec4`赋值给颜色输出。
编译片段着色器的过程与顶点着色器类似,只不过我们使用<var>GL_FRAGMENT_SHADER</var>常量作为着色器类型: