使用几何着色器

Geometry Shader 是材质类型中的一个可选着色器。几何着色器从 Vertex Shader 或可选的细分着色器中获取作为输入的一组顶点,这些顶点形成一个图元,例如线或三角形。几何着色器对这些顶点进行变换并将它们传递给 Fragment Shader。

要使用几何和细分着色器,您要运行 Kanzi 应用程序的硬件必须支持 OpenGL ES 3.2。请注意,几何和细分着色器可能会降低在平铺渲染架构上的性能。因此,建议避免在移动和嵌入式硬件上使用几何和细分着色器。

请参阅 使用细分着色器。

在此过程中,您使用几何着色器在原始网格的每个顶点处绘制一个三角形。

要使用几何着色器:

  1. 在 Kanzi Studio 主菜单中,选择 Project > Properties,并将 Target Graphics API 设置为 OpenGL ES 3.2。

    ../../_images/properties-target-graphics-api-es32.png
  2. 将几何着色器添加到材质类型。

    例如:在 Library > Materials and Textures > Material Types 中,按 Alt 并右键单击 VertexPhong 材质类型并选择 Geometry Shader。

    Kanzi Studio 在材质类型中创建了一个 Geometry Shader,位于 Vertex Shader 和 Fragment Shader 之间。

    Geometry Shader 的源文件扩展名为 .geom.glsl。

    ../../_images/library-create-geometry-shader.png ../../_images/library-geometry-shader.png
  3. 在 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。

  4. 在您添加了几何着色器的材质类型中,双击 Fragment Shader 以在 Shader Source Editor 中打开它。编辑着色器代码以使用几何着色器的输出。

    例如,将片段着色器文件的内容替换为:

    #version 320 es
    
    precision lowp float;
    
    in vec3 fragColor;
    out vec4 outColor;
    
    void main()
    {
        outColor = vec4(fragColor, 1);
    }
    

    单击 Save。

  5. 创建一个渲染网格的3D节点。将该节点设置为使用您添加了几何着色器的材质类型的材质。

    例如:在 Node Tree 中,创建一个 Plane 节点。在 Properties 中,将 Mesh Material 属性设置为 VertexPhongMaterial。

    ../../_images/node-tree-plane1.png ../../_images/properties-plane-mesh-material1.png ../../_images/preview-geometry-shader-initial.png
  6. 在 Properties 中,调整内容的外观。

    例如,添加并设置:

    • Material > Ambient Color 以设置三角形的颜色。

    • Subdivisions 属性用于增加三角形的数量。

      Subdivisions 属性设置基本网格的细分级别。默认情况下,Plane 节点由一个包含四个顶点的图块组成。例如,当您将 Subdivisions 属性设置为 3 时,平面中的顶点数增加到 25。请参阅 设置原始网格的细分级别。

    ../../_images/properties-plane-subdivisions.png ../../_images/preview-geometry-shader-properties.png
../../_images/geometry-shader-rotation.gif

另请参阅

着色器 (Shaders)

使用细分着色器

着色器最佳实践