重读Cesium(九):Appearance相关介绍(二)顶点与片元着色器

上一篇我们介绍了 Appearance分类与构成,Material材质。这一篇我们来了解一下vertexShaderSource顶点着色器与fragmentShaderSource片元着色器。

vertexShaderSource顶点着色器

我们来看一下Appearance中默认的vertexShaderSource。代码如下:

 in vec3 position3DHigh;
 in vec3 position3DLow;
 in vec3 normal;
 in vec2 st;
 in float batchId;
 out vec3 v_positionEC;
 out vec3 v_normalEC;
 out vec2 v_st;
 void main()
 {
   
     vec4 p = czm_computePosition();
     v_positionEC = (czm_modelViewRelativeToEye * p).xyz;      // position in eye coordinates
     v_normalEC = czm_normal * normal;                         // normal in eye coordinates
     v_st = st;
     gl_Position = czm_modelViewProjectionRelativeToEye * p;
 }
输入变量
 in vec3 position3DHigh;
 in vec3 position3DLow;
 in vec3 normal;
 in vec2 st;
 in float batchId;

1.position3DHighposition3DLow:这是Cesium为了保证从CPU传递到GPU的数据精度,将模型顶点拆分成position3DHighposition3DLow两个变量。
2.normal:输入的法线。
3.st:纹理坐标。
4.batchId:批次ID。在CesiumJS中,通常用于将相同类型的几何体分组在一起,以优化渲染性能。

输出变量-输出到片元着色器
 out vec3 v_positionEC;
 out vec3 v_normalEC;
 out vec2 v_st;

1.v_positionEC: 输出顶点。
2.v_normalEC:输出法线。
3.v_st:输出纹理坐标。

获取几何体的模型坐标

在顶点着色器代码中,我们可以通过position3DHighposition3DLow这两个变量相加获取到几何体的模型坐标

in vec3 positions = position3DHigh + position3DLow

我们通过下面的实例代码验证下模型坐标是否正确

 let geometry = Cesium.BoxGeometry.fromDimensions({
   
        dimensions: new Cesium.Cartesian3(1.0, 1.0, 1.0)
      })
      let position = Cesium.Cartesian3.fromDegrees(120
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GIS肆月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值