mirror of
https://github.com/LearnOpenGL-CN/LearnOpenGL-CN.git
synced 2025-08-23 12:45:29 +08:00
Formatting
This commit is contained in:
@@ -141,7 +141,7 @@ void main()
|
|||||||
|
|
||||||
我们在像素着色器中声明了一个uniform vec4 ourColor,并把像素着色器的输出颜色设置为uniform值。因为uniform是全局变量,我们我们可以在任何着色器中定义它们,而无需通过顶点着色器作为中介。顶点着色器中不需要这个uniform所以不用在那里定义它。
|
我们在像素着色器中声明了一个uniform vec4 ourColor,并把像素着色器的输出颜色设置为uniform值。因为uniform是全局变量,我们我们可以在任何着色器中定义它们,而无需通过顶点着色器作为中介。顶点着色器中不需要这个uniform所以不用在那里定义它。
|
||||||
|
|
||||||
!!!Atention
|
!!! Atention
|
||||||
|
|
||||||
如果你声明了一个uniform却在GLSL代码中没用过,编译器会静默移除这个变量,从而最后编译出的版本中并不会包含它,如果有一个从没用过的uniform出现在已编译版本中会出现几个错误;记住这点!
|
如果你声明了一个uniform却在GLSL代码中没用过,编译器会静默移除这个变量,从而最后编译出的版本中并不会包含它,如果有一个从没用过的uniform出现在已编译版本中会出现几个错误;记住这点!
|
||||||
|
|
||||||
@@ -159,16 +159,16 @@ glUniform4f(vertexColorLocation, 0.0f, greenValue, 0.0f, 1.0f);
|
|||||||
|
|
||||||
接着,我们用glGetUniformLocation请求uniform ourColor的地址。我们为请求函数提供着色器程序和uniform的名字(这是我们希望获得的地址的来源)。如果glGetUniformLocation返回-1就代表没有找到这个地址。最后,我们可以通过glUniform4f函数设置uniform值。注意,查询uniform地址不需要在之前使用着色器程序(use shader program),但是更新一个unform之前必须不许使用程序(调用glUseProgram),因为它是在当前激活的着色器程序中设置unform的。
|
接着,我们用glGetUniformLocation请求uniform ourColor的地址。我们为请求函数提供着色器程序和uniform的名字(这是我们希望获得的地址的来源)。如果glGetUniformLocation返回-1就代表没有找到这个地址。最后,我们可以通过glUniform4f函数设置uniform值。注意,查询uniform地址不需要在之前使用着色器程序(use shader program),但是更新一个unform之前必须不许使用程序(调用glUseProgram),因为它是在当前激活的着色器程序中设置unform的。
|
||||||
|
|
||||||
!!!Important
|
!!! Important
|
||||||
|
|
||||||
因为OpenGL是C库内核,所以它不支持函数重载,在函数参数不同的时候就要定义新的函数;glUniform是一个典型例子。这个函数有一个特定的作为类型的后缀。有几种可用的后缀:
|
因为OpenGL是C库内核,所以它不支持函数重载,在函数参数不同的时候就要定义新的函数;glUniform是一个典型例子。这个函数有一个特定的作为类型的后缀。有几种可用的后缀:
|
||||||
|
|
||||||
* f:函数需要以一个float作为它的值。
|
* f:函数需要以一个float作为它的值。
|
||||||
* i:函数需要一个int作为它的值。
|
* i:函数需要一个int作为它的值。
|
||||||
* ui:函数需要一个unsigned int作为它的值。
|
* ui:函数需要一个unsigned int作为它的值。
|
||||||
* 3f:函数需要3个float作为它的值。
|
* 3f:函数需要3个float作为它的值。
|
||||||
* fv:函数需要一个float向量/数组作为它的值。
|
* fv:函数需要一个float向量/数组作为它的值。
|
||||||
* 每当你打算配置一个OpenGL的选项简单地这样选择适合你的数据类型的重载的函数。在我们的例子里,我们使用uniform的4float版,所以我们通过glUniform4f传递我们的数据(注意,我们也可以使用fv版本)。
|
* 每当你打算配置一个OpenGL的选项简单地这样选择适合你的数据类型的重载的函数。在我们的例子里,我们使用uniform的4float版,所以我们通过glUniform4f传递我们的数据(注意,我们也可以使用fv版本)。
|
||||||
|
|
||||||
现在你知道如何设置uniform变量的值了,我们可以使用它们来渲染了。如果我们打算让颜色慢慢变化,我们就要在游戏循环的每一帧更新这个uniform,否则三角形就不会改变颜色。下面我们就计算greenValue然后每个渲染迭代都更新这个uniform:
|
现在你知道如何设置uniform变量的值了,我们可以使用它们来渲染了。如果我们打算让颜色慢慢变化,我们就要在游戏循环的每一帧更新这个uniform,否则三角形就不会改变颜色。下面我们就计算greenValue然后每个渲染迭代都更新这个uniform:
|
||||||
|
|
||||||
@@ -306,7 +306,7 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
```
|
```
|
||||||
|
|
||||||
!!!Important
|
!!! Important
|
||||||
|
|
||||||
在上面,我们用了几个预处理指令。这些预处理指令告知你的编译器,只在没被包含过的情况下才包含和编译这个头文件,即使多个文件都包含了这个shader头文件。它是用来防止链接冲突的。
|
在上面,我们用了几个预处理指令。这些预处理指令告知你的编译器,只在没被包含过的情况下才包含和编译这个头文件,即使多个文件都包含了这个shader头文件。它是用来防止链接冲突的。
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user