目前三维GIS开发越来越火了,很多人会选择基于cesiumJS进行开发,但问题是cesiumJS可能需要在服务器上托管一些静态资源。
这时候在框架中打包就需要配置,将这些静态资源在打包时一起复制过去。
解决方案有三种:
至于webpack,也是一样的,用复制插件托管到服务器上,或者使用官方的模板
克隆他们的项目,再npm i,或者安装:
1 | npm install vue-cesium --save |
在main.js/ts中配置
1 |
|
克隆官方的vue+vite项目
1 | git clone https://github.com/CesiumGS/cesium-vite-example.git |
打包复制插件vite-plugin-static-copy
1 | npm i vite-plugin-static-copy --save |
然后在vite.config.ts中配置:
1 |
|
在cesium中使用自定义顶点+片元着色器,传入uniform变量
很多时候我们仅仅只需要重写顶点+片元着色器而非自定义customshader,或者重写apparence.material.source。而这俩不能同时重写,会起冲突,但自定义的片元着色器也需要用到unifom变量,这时候怎么办呢?
博主踩了很多坑,网上的教程很多都说不能给自定义的片元着色器传递uniform变量。最后在官方的指南找到了如下说明:
在 JavaScript 中,对象应该有一个公共 material 属性。当此属性更改时, update 函数应将材质的 GLSL 源添加到对象的片段着色器源之前,并组合对象和材质的制服。
1 | var fsSource = |
于是设置好自己需要的fabric.uniforms变量之后,打印apparence.material.source看看:
1 | uniform float a_0; |
原来传递的变量是会自动给编上以0开始的代码。
如此,就可以在fragmentshader里面使用a_0变量了。
值得注意,在修改uniforms的时候,变量后面是没有该编号的,即this.fabric.uniforms.a。