细分着色器

细分控制

  • 作用:
    • 对input patch进行修改,输出output patch到TES
    • 为TPG提供细分参数
  • TCS函数会为每一个output patch中的每一个顶点执行一次,同一个patch中对应的函数共享同一个gl_ in和gl_out

    #version 430
    layout(vertices = 4) out;   //output patch大小
    
    /*---------------------内置输入变量---------------------
    in int gl_PatchVerticesIn;  //input patch中顶点数量
    in int gl_PrimitiveID;      //当前patch的索引
    in int gl_InvocationID;     //当前patch中对应函数的索引
    in gl_PerVertex
    {
        vec4 gl_Position;
        float gl_PointSize;
        float gl_ClipDistance[];
    } gl_in [gl_MaxPatchVertices];
    -----------------------------------------------------*/
    
    
    /*---------------------内置输出变量---------------------
    patch out float gl_TessLevelOuter[4];
    patch out float gl_TessLevelInner[2];
    out gl_PerVertex
    {
        vec4 gl_Position;
        float gl_PointSize;
        float gl_ClipDistance[];
    } gl_out[];
    -----------------------------------------------------*/
    
    //自定义输入
    in vec2 uvInTCS[];
    
    //自定义输出
    patch out vec2 uvInTES[];
    
    void main()
    {
        ...
    }
    

细分计算

  • 作用:接收从TCS传来的为细分面片顶点和从TPG传来的归一化细分坐标,生成细分后的顶点
  • TES函数为细分后的每一个顶点执行一次,同一个patch中对应的函数共享一个gl_in
  • TES只能输出线段或三角形

    #version 430
    layout(triangles,equal_spacing,ccw)
    /*---------------------内置输入变量---------------------
    in vec3 gl_TessCoord;
    in int gl_PatchVerticesIn;      //上一阶段output patch中的顶点数
    in int gl_PrimitiveID;          //对应patch的索引
    in gl_PerVertex
    {
        vec4 gl_Position;
        float gl_PointSize;
        float gl_ClipDistance[];
    } gl_in[gl_MaxPatchVertices];
    -----------------------------------------------------*/
    
    /*---------------------内置输出变量---------------------
    out gl_PerVertex 
    {
        vec4 gl_Position;
        float gl_PointSize;
        float gl_ClipDistance[];
    };
    -----------------------------------------------------*/
    
    //自定义输入
    patch in vec2 uvInTES[];
    
    //自定义输出
    out vec2 uvInGS;
    
    void main()
    {
        ...
    }
    

细分流程

这里写图片描述

Cesium 是一个开源的虚拟地球平台,用于创建3D地图和地理信息系统(GIS)。它允许开发者在网页上创建交互式的虚拟地球,可以用来模拟全球、城市乃至建筑物的3D景观。Cesium 在客户端使用 WebGL 进行渲染,并提供了一系列工具和API以方便开发者使用。 在 Cesium 中实现细分着色器(Tessellation Shaders),可以通过创建自定义着色器来增加几何体的细节。细分着色器GLSLOpenGL Shading Language)的一部分,它允许对模型的顶点进行动态细分,生成额外的顶点来增加模型的细节,这对于地形渲染特别有用。 在 Cesium 中实现细分着色器通常涉及以下步骤: 1. 创建自定义的着色器程序。这需要编写顶点着色器细分控制着色器细分评估着色器以及片段着色器细分控制着色器用于定义细分的程度,而细分评估着色器则对细分后的顶点进行位置计算。 2. 在Cesium的Entity API中设置自定义的着色器,或者通过Entity的材质属性来关联着色器程序。 3. 使用Cesium的地形和高度图数据作为基础,通过细分着色器来实现地形的动态细节增加。 需要注意的是,细分着色器需要的硬件支持OpenGL 4.0或者更高版本,这意味着不是所有的设备都能够支持细分着色器。此外,细分着色器的使用会增加图形渲染的复杂度和性能消耗,因此需要仔细考虑是否适合在特定的应用场景中使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值