cesium1.102和以上的版本,自定义材质报‘texture2D‘ : no matching overloaded function found错误

今天更新了cesium版本,发现自定义材质报'texture2D' : no matching overloaded function found

 查了一下cesium日志,发现原因是从1.102版本开始默认使用的是WebGL2上下文渲染。WebGL2 在所有平台上都得到广泛支持,这导致跨设备(尤其是移动设备)更好的功能支持。

cesium官方更新说明

解决办法:

1、可以把cesium退回到WebGL1

const viewer = new Viewer("cesiumContainer", {
  contextOptions: {
    requestWebgl1: true,
  },
});

 2、 WebGL2 上下文中工作,任何自定义材质、自定义基元或自定义着色器都需要升级以使用 GLSL 300

将原来的texture2D,改为texture

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Cesium.Primitive是Cesium.js中的一个重要概念,它是一种基本几何体,可以用于表示三维场景中的各种元素。通常情况下,Primitive对象包含一些几何形状、材质和变换信息等。 Cesium.Primitive的创建一般有两种方式:一种是使用Cesium.js中已经定义好的几何图元,例如Box、Sphere、Cylinder等,另一种则是自定义创建。 自定义创建Cesium.Primitive的主要步骤包括: 1. 创建Geometry对象:Geometry对象定义了几何体的形状和拓扑结构等信息。 2. 创建Appearance对象:Appearance对象定义了几何体的材质和渲染方式等信息。 3. 创建Primitive对象:使用上述创建的Geometry和Appearance对象,创建Primitive对象,并设置其位置、变换等信息。 下面是一个自定义创建Cesium.Primitive的示例代码: ```javascript // 创建Geometry对象 var positions = Cesium.Cartesian3.fromDegreesArray([ 0.0, 0.0, 10.0, 0.0, 0.0, 10.0 ]); var indices = [0, 1, 2]; var geometry = new Cesium.Geometry({ attributes: { position: new Cesium.GeometryAttribute({ componentDatatype: Cesium.ComponentDatatype.DOUBLE, componentsPerAttribute: 3, values: Cesium.Cartesian3.fromDegreesArray([ 0.0, 0.0, 10.0, 0.0, 0.0, 10.0 ]) }) }, indices: indices, primitiveType: Cesium.PrimitiveType.TRIANGLES }); // 创建Appearance对象 var material = new Cesium.Material({ fabric: { type: 'Color', uniforms: { color: new Cesium.Color(1.0, 0.0, 0.0, 1.0) } } }); var renderState = Cesium.RenderState.fromCache({ depthTest: { enabled: true }, lineWidth: Math.min(5.0, context._maxAliasedLineWidth), polygonOffset: { enabled: false, factor: 0.0, units: 0.0 }, scissorTest: { enabled: false, rectangle: { x: 0, y: 0, width: 0, height: 0 } } }); var appearance = new Cesium.Appearance({ material: material, vertexShaderSource: vertexShaderSource, fragmentShaderSource: fragmentShaderSource, renderState: renderState }); // 创建Primitive对象,并添加到场景中 var primitive = new Cesium.Primitive({ geometryInstances: new Cesium.GeometryInstance({ geometry: geometry }), appearance: appearance, modelMatrix: Cesium.Transforms.eastNorthUpToFixedFrame(Cesium.Cartesian3.fromDegrees(0.0, 0.0, 0.0)) }); scene.primitives.add(primitive); ``` 以上代码中,我们先创建了一个三角形的Geometry对象,然后创建了一个红色材质的Appearance对象,最后使用前两者创建了一个Primitive对象,并添加到了场景中。 希望这些信息能够对你有所帮助!
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值