使用几何着色器¶
Geometry Shader 是材质类型中的一个可选着色器。几何着色器从 Vertex Shader 或可选的细分着色器中获取作为输入的一组顶点,这些顶点形成一个图元,例如线或三角形。几何着色器对这些顶点进行变换并将它们传递给 Fragment Shader。
要使用几何着色器和曲面细分着色器,运行 Kanzi 应用程序的硬件必须支持 OpenGL ES 3.2 或 Vulkan 1.1。请注意,几何着色器和曲面细分着色器可能会降低分块渲染架构上的性能。因此,建议避免在移动和嵌入式硬件上使用几何着色器和曲面细分着色器。
请参阅 使用细分着色器。
在此过程中,您使用几何着色器在原始网格的每个顶点处绘制一个三角形。
要使用几何着色器:
在 Kanzi Studio 主菜单中,选择 Project > Properties,并将 Target Graphics API 设置为 OpenGL ES 3.2。
将几何着色器添加到材质类型。
例如:在 Library > Materials and Textures > Material Types 中,按 Alt 并右键单击 VertexPhong 材质类型并选择 Geometry Shader。
Kanzi Studio 在材质类型中创建了一个 Geometry Shader,位于 Vertex Shader 和 Fragment Shader 之间。
Geometry Shader 的源文件扩展名为
.geom.glsl。
在 Library 中,双击 Geometry Shader 以在 Shader Source Editor 中打开它,并编辑着色器代码以满足您的需求。
例如,要在网格的每个顶点处绘制一个三角形,请将几何着色器文件的内容替换为:
#version 320 es // Turn triangles into three triangles by vertices. layout(triangles) in; layout(triangle_strip, max_vertices = 9) out; precision highp float; in lowp vec3 vAmbDif[]; out lowp vec3 fragColor; void main() { for(int i = 0; i < 3; ++i) { fragColor = vAmbDif[i]; gl_Position = gl_in[i].gl_Position + vec4(0, -0.5, 0, 0); EmitVertex(); gl_Position = gl_in[i].gl_Position + vec4(0.5, 0.5, 0, 0); EmitVertex(); gl_Position = gl_in[i].gl_Position + vec4(-0.5, 0.5, 0, 0); EmitVertex(); EndPrimitive(); } }
单击 Save。
在您添加了几何着色器的材质类型中,双击 Fragment Shader 以在 Shader Source Editor 中打开它。编辑着色器代码以使用几何着色器的输出。
例如,将片段着色器文件的内容替换为:
#version 320 es precision lowp float; in vec3 fragColor; out vec4 outColor; void main() { outColor = vec4(fragColor, 1); }
单击 Save。
创建一个渲染网格的3D节点。将该节点设置为使用您添加了几何着色器的材质类型的材质。
例如:在 Node Tree 中,创建一个 Plane 节点。在 Properties 中,将 Mesh Material 属性设置为 VertexPhongMaterial。
在 Properties 中,调整内容的外观。
例如,添加并设置:
Material > Ambient Color 以设置三角形的颜色。
Subdivisions 属性用于增加三角形的数量。
Subdivisions 属性设置基本网格的细分级别。默认情况下,Plane 节点由一个包含四个顶点的图块组成。例如,当您将 Subdivisions 属性设置为 3 时,平面中的顶点数增加到 25。请参阅 设置原始网格的细分级别。