mirror of
https://github.com/LearnOpenGL-CN/LearnOpenGL-CN.git
synced 2025-08-23 04:35:28 +08:00
更新“几何着色器”中的图片并调整部分排版
This commit is contained in:
@@ -46,13 +46,13 @@ void main() {
|
|||||||
|
|
||||||
几何着色器同时希望我们设置一个它最大能够输出的顶点数量(如果你超过了这个值,OpenGL将不会绘制**多出的**顶点),这个也可以在<fun>out</fun>关键字的布局修饰符中设置。在这个例子中,我们将输出一个`line_strip`,并将最大顶点数设置为2个。
|
几何着色器同时希望我们设置一个它最大能够输出的顶点数量(如果你超过了这个值,OpenGL将不会绘制**多出的**顶点),这个也可以在<fun>out</fun>关键字的布局修饰符中设置。在这个例子中,我们将输出一个`line_strip`,并将最大顶点数设置为2个。
|
||||||
|
|
||||||
如果你不知道什么是线条(Line Strip):线条连接了一组点,形成一条连续的线,它最少要由两个点来组成。在渲染函数中每多加一个点,就会在这个点与前一个点之间形成一条新的线。在下面这张图中,我们有5个顶点:
|
!!! important
|
||||||
|
|
||||||

|
如果你不知道什么是线条(Line Strip):线条连接了一组点,形成一条连续的线,它最少要由两个点来组成。在渲染函数中每多加一个点,就会在这个点与前一个点之间形成一条新的线。在下面这张图中,我们有5个顶点:
|
||||||
|
|
||||||
如果使用的是上面定义的着色器,那么这将只能输出一条线段,因为最大顶点数等于2。
|

|
||||||
|
|
||||||
为了生成更有意义的结果,我们需要某种方式来获取前一着色器阶段的输出。GLSL提供给我们一个<def>内建</def>(Built-in)变量,在内部看起来(可能)是这样的:
|
为了生成更有意义的结果,我们需要某种方式来获取前一着色器阶段的输出。GLSL提供给我们一个名为<fun>gl_in</fun>的<def>内建</def>(Built-in)变量,在内部看起来(可能)是这样的:
|
||||||
|
|
||||||
```c++
|
```c++
|
||||||
in gl_Vertex
|
in gl_Vertex
|
||||||
@@ -267,11 +267,11 @@ in VS_OUT {
|
|||||||
|
|
||||||
!!! Important
|
!!! Important
|
||||||
|
|
||||||
我们并不是必须要用接口块来向几何着色器传递数据。如果顶点着色器发送的颜色向量是`out vec3 vColor`,我们也可以这样写:
|
我们并不是必须要用接口块来向几何着色器传递数据。我们也可以这样写:
|
||||||
|
|
||||||
in vec3 vColor[];
|
in vec3 vColor[];
|
||||||
|
|
||||||
然而,接口块在几何着色器这样的着色器中会更容易处理一点。实际上,几何着色器的输入能够变得非常大,将它们合并为一个大的接口块数组会更符合逻辑一点。
|
如果顶点着色器发送的颜色向量是`out vec3 vColor`,那这么写就没问题。然而,接口块在几何着色器这样的着色器中会更容易处理一点。实际上,几何着色器的输入能够变得非常大,将它们合并为一个大的接口块数组会更符合逻辑一点。
|
||||||
|
|
||||||
接下来我们还需要为下个片段着色器阶段声明一个输出颜色向量:
|
接下来我们还需要为下个片段着色器阶段声明一个输出颜色向量:
|
||||||
|
|
||||||
@@ -332,7 +332,7 @@ EndPrimitive();
|
|||||||
|
|
||||||
当我们说**爆破**一个物体时,我们并不是指要将宝贵的顶点集给炸掉,我们是要将每个三角形沿着法向量的方向移动一小段时间。效果就是,整个物体看起来像是沿着每个三角形的法线向量**爆炸**一样。爆炸三角形的效果在纳米装模型上看起来像是这样的:
|
当我们说**爆破**一个物体时,我们并不是指要将宝贵的顶点集给炸掉,我们是要将每个三角形沿着法向量的方向移动一小段时间。效果就是,整个物体看起来像是沿着每个三角形的法线向量**爆炸**一样。爆炸三角形的效果在纳米装模型上看起来像是这样的:
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
这样的几何着色器效果的一个好处就是,无论物体有多复杂,它都能够应用上去。
|
这样的几何着色器效果的一个好处就是,无论物体有多复杂,它都能够应用上去。
|
||||||
|
|
||||||
@@ -491,8 +491,8 @@ void main()
|
|||||||
|
|
||||||
现在,首先使用普通着色器渲染模型,再使用特别的**法线可视化**着色器渲染,你将看到这样的效果:
|
现在,首先使用普通着色器渲染模型,再使用特别的**法线可视化**着色器渲染,你将看到这样的效果:
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
尽管我们的纳米装现在看起来像是一个体毛很多而且带着隔热手套的人,它能够很有效地帮助我们判断模型的法线是否正确。你可以想象到,这样的几何着色器也经常用于给物体添加<def>毛发</def>(Fur)。
|
除了让我们的背包变得毛茸茸之外,它还能让我们很好地判断模型的法向量是否准确。你可以想象到,这样的几何着色器也经常用于给物体添加<def>毛发</def>(Fur)。
|
||||||
|
|
||||||
你可以在[这里](https://learnopengl.com/code_viewer_gh.php?code=src/4.advanced_opengl/9.3.geometry_shader_normals/normal_visualization.cpp)找到源码。
|
你可以在[这里](https://learnopengl.com/code_viewer_gh.php?code=src/4.advanced_opengl/9.3.geometry_shader_normals/normal_visualization.cpp)找到源码。
|
||||||
|
BIN
docs/img/04/09/geometry_shader_explosion_backpack.png
Normal file
BIN
docs/img/04/09/geometry_shader_explosion_backpack.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 210 KiB |
BIN
docs/img/04/09/geometry_shader_normals_backpack.png
Normal file
BIN
docs/img/04/09/geometry_shader_normals_backpack.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 189 KiB |
Reference in New Issue
Block a user