注册自界说材质实现qgis里不同比例尺下材质不被拉升的效果 ...

打印 上一主题 下一主题

主题 664|帖子 664|积分 1992

远景提要:
在QGIS里的表现效果,用的是示例的/img/textures/line-interval.png材质图片。
下载示例
  1. git clone https://gitee.com/marsgis/mars3d-vue-example.git
复制代码
干系效果
比如材质是5像素,在1:100000万比例尺下,线表现的长度是5像素,那就用一个材质表现,如果放大到1:10000比例尺,线表现的长度是50像素,那就用10个材质表现,这样材质就不会被拉伸了
polyline的宽度及材质均是像素参数,通过自界说材质的方法实现以下效果。
高视角下:

低视角下:

 示例链接:
功能示例(Vue版) | Mars3D三维可视化平台 | 火星科技
实当代码:
  1. function addDemoGraphic11(graphicLayer) {
  2.   // 注册自定义材质
  3.   const MianmianType = "LineSprite"
  4.   mars3d.MaterialUtil.register(MianmianType, {
  5.     fabric: {
  6.       uniforms: {
  7.         image: Cesium.Material.DefaultImageId,
  8.         imageW: 10
  9.       },
  10.       source: `
  11.     in float v_polylineAngle;
  12.     mat2 rotate(float rad) {
  13.         float c = cos(rad);
  14.         float s = sin(rad);
  15.         return mat2(
  16.             c, s,
  17.             -s, c
  18.         );
  19.     }
  20.     czm_material czm_getMaterial(czm_materialInput materialInput)
  21.       {
  22.         czm_material material = czm_getDefaultMaterial(materialInput);
  23.         vec2 st = materialInput.st;
  24.         vec2 pos = rotate(v_polylineAngle) * gl_FragCoord.xy;
  25.         float s = pos.x / (imageW * czm_pixelRatio);
  26.         float t = st.t;
  27.         vec4 colorImage = texture(image, vec2(fract(s), t));
  28.         material.diffuse = colorImage.rgb;
  29.         return material;
  30.       }`
  31.     },
  32.     translucent: true
  33.   })
  34.   const graphic = new mars3d.graphic.PolylinePrimitive({
  35.     positions: [
  36.       [116.295277, 30.98],
  37.       [116.295277, 31],
  38.       [116.4, 31]
  39.     ],
  40.     style: {
  41.       width: 10,
  42.       clampToGround: true,
  43.       // 使用自定义材质
  44.       materialType: MianmianType,
  45.       materialOptions: {
  46.         image: "./img/textures/line-interval.png",
  47.         imageW: 74
  48.       }
  49.     },
  50.     flyTo:true
  51.   })
  52.   graphicLayer.addGraphic(graphic)
  53. }
复制代码
实现效果:


 


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

怀念夏天

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表