Cesium 3dtiles 渐变特效 vite-plugin-cesium版

这篇具有很好参考价值的文章主要介绍了Cesium 3dtiles 渐变特效 vite-plugin-cesium版。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

源码

// An highlighted block
import * as Cesium from "cesium";
const viewer = ref(null);
const tileset = ref(null);
tileset.value = viewer.value.scene.primitives.add(
			new Cesium.Cesium3DTileset({
				// url: "http://192.168.1.18:9003/model/t2N4u5bBr/tileset.json",
				url: "3dtiles/tileset.json",
			}),
		);
		tileset.value.readyPromise.then((tile) => {
			//定位
			let boundingSphere = tile.boundingSphere;
			viewer.value.camera.viewBoundingSphere(
				boundingSphere,
				new Cesium.HeadingPitchRange(0, Cesium.Math.toRadians(-45), boundingSphere.radius * 3),
			);
			viewer.value.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);
			//更改着色器代码
			tile.tileVisible.addEventListener(function (res) {
				let content = res.content;
				let featuresLength = content.featuresLength;
				for (let i = 0; i < featuresLength; i += 2) {
					let feature = content.getFeature(i);
					let model = feature.content._model;
					if (model && model._pipelineResources) {
						let program = model._pipelineResources[1];
						const color = `vec4(0,127.5/255.,1.,1.)`;
						program._fragmentShaderSource.sources[0] = `
							uniform vec2 model_iblFactor;
							uniform mat3 model_iblReferenceFrameMatrix;
							uniform float model_luminanceAtZenith;
							uniform float u_metallicFactor;
							uniform float u_roughnessFactor;
							uniform int model_featuresLength;
							uniform sampler2D model_batchTexture;
							uniform vec4 model_textureStep;
							uniform float model_colorBlend;
							uniform bool model_commandTranslucent;
							uniform sampler2D model_pickTexture;
							varying vec3 v_positionWC;
							varying vec3 v_positionEC;
							varying vec3 v_normalEC;
							varying vec3 v_positionMC;
							varying float v_featureId_0;
							struct SelectedFeature
							{
								int id;
								vec2 st;
								vec4 color;
							};
							struct FeatureIds
							{
								int featureId_0;
							};
							vec2 computeSt(float featureId)
							{
								float stepX = model_textureStep.x;
								float centerX = model_textureStep.y;

								#ifdef MULTILINE_BATCH_TEXTURE
								float stepY = model_textureStep.z;
								float centerY = model_textureStep.w;

								float xId = mod(featureId, model_textureDimensions.x); 
								float yId = floor(featureId / model_textureDimensions.x);
								
								return vec2(centerX + (xId * stepX), centerY + (yId * stepY));
								#else
								return vec2(centerX + (featureId * stepX), 0.5);
								#endif
							}
							void selectedFeatureIdStage(out SelectedFeature feature, FeatureIds featureIds)
							{   
								int featureId = featureIds.SELECTED_FEATURE_ID;
								if (featureId < model_featuresLength)
								{
									vec2 featureSt = computeSt(float(featureId));

									feature.id = featureId;
									feature.st = featureSt;
									feature.color = texture2D(model_batchTexture, featureSt);
								}
								else
								{
									feature.id = model_featuresLength + 1;
									feature.st = vec2(0.0);
									feature.color = vec4(1.0);
								}

								#ifdef HAS_NULL_FEATURE_ID
								if (featureId == model_nullFeatureId) {
									feature.id = featureId;
									feature.st = vec2(0.0);
									feature.color = vec4(1.0);
								}
								#endif
							}
							SelectedFeature selectedFeature;
							void main(){
								vec4 position = czm_inverseModelView * vec4(v_positionEC,1.);//获取模型的世界坐标
								float buildMaxHeight = 300.0;//建筑群最高高度 配渐变色
								gl_FragColor = ${color};//赋予基础底色
								gl_FragColor *= vec4(vec3(position.y / buildMaxHeight ), 1.0);//根据楼层高度比例渲染渐变色
								float time = abs(fract(czm_frameNumber / 360.0)-0.5)*2.;//动画频率 约束在(0,1) 更改频率修改360.0
								float diffuse = step(0.005, abs(clamp(position.y / buildMaxHeight, 0.0, 1.0) - time));//根据帧数变化,光圈颜色白色,由底部朝上一丢丢(0.05)开始逐渐上移显现.
								gl_FragColor.rgb += gl_FragColor.rgb * (1.0 - diffuse );//单纯叠加颜色 感兴趣的可以mix混合下
							}
						`;
					}
				}
			});
		});

结语

着色器程序和源的位置变了,适当修改即可。注意点:cesiumlab2和3切的3dtiles要带光照,其次cesumlab2 矢量楼快切的高度方向向量为v_positionEC.z,cesiumlab3通用模型切的高度方向为v_positionEC.y。文章来源地址https://www.toymoban.com/news/detail-524506.html

到了这里,关于Cesium 3dtiles 渐变特效 vite-plugin-cesium版的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • cesium加载三维模型3dtiles

    目的:为避免跨域 输入cmd命令 python3 -m http.server 5500 http://127.0.0.1:5500/data/mars3d-max-shihua-3dtiles-master/tileset.json http://127.0.0.1:5500/cesium/cesium%E5%8A%A0%E8%BD%BD3dtile2.html

    2024年02月13日
    浏览(32)
  • Cesium入门之十:Cesium加载3DTiles数据

    3DTiles是一种面向网格化、可展示的大规模三维空间数据格式,专门为流式传输和渲染海量3D地理空间数据而设计的,用于存储和管理基于网格的三维模型数据。其数据结构基于B3DM和PNTS格式,可以支持多个级别的LOD,并使用Tilesets(瓦片集合)来组织和管理数据。3DTiles具有以

    2024年02月12日
    浏览(33)
  • Cesium clipping planes 3dtiles模型剖切 3dtiles模型贴地 vue代码

    使用Cesium的clippingPlanes实现对3dtiles模型的剖切效果。 相关官方文档地址:ClippingPlaneCollection、Cesium3DTileset 官方Demo地址:3D Tiles Clipping Planes 官方介绍:Cesium Feature Highlight: Clipping Planes 函数用于加载和显示3D Tiles模型以及剪切平面clipping planes。 在函数内部,首先创建了一个 Cesium.P

    2024年04月23日
    浏览(24)
  • 【Cesium】调整3dtiles模型的光照

    最近有个项目需要把掘进车放到巷道里面,加载出来的效果一片漆黑,看不清模型细节。  由于Cesium中材质没有自发光的设置,所以只能设置光源。 在网上查了一些代码,Cesium的光照效果的设置是通过webgl修改白膜的材质来实现的,由于巷道本身有贴图材质,用该方法实现的

    2024年02月11日
    浏览(39)
  • Cesium地图上加载3DTiles模型

    1,使用Blender创建模型: 官网下载Blender:https://www.blender.org/,在Github上下载Building Tools插件,通过编辑-偏好设置-插件-安装,导入压缩包使用,这个可以自己创建小房子,文件-导出为obj格式 2,将.obj转成3dtiles格式: 1,第一种方法通过加载本地文件展示: 1,github下载ObjTo3

    2024年02月03日
    浏览(29)
  • cesium加载3dtiles倾斜摄影数据

    效果如图 倾斜摄影数据的地址:百度网盘 请输入提取码 提取码:ztde 1.配置nginx,代理3dtiles倾斜摄影数据服务 如我的倾斜摄影数据放在D盘的某个文件夹里面,nginx可以这样配置    2.代码里面3dtiles的url指向倾斜摄影服务地址,同时配置一系列的参数 3dtiles的配置参数如下,可

    2024年02月11日
    浏览(29)
  • Cesium:3DTiles三维模型高度调整

            地形遮挡属性          如下两张图所示,输入高度值,根据需要调整模型高度。例如:针对近地面的管线数据,可能有一部分是埋在地下的,那么,如果开启了地形遮挡属性(即:设置为true,默认是false),那么,在进行场景渲染加载模型切片时,就会进行深度测

    2024年02月11日
    浏览(73)
  • Cesium 中实现影像贴 3Dtiles

    Cesium 中我们经常使用的图层服务除了常见的遥感影像,还会包括一些矢量数据(如宗地范围、规划用地、道路信息等),这些图层服务通常经过 ArcGIS Server / GeoServer 之类的服务器渲染、切片供 Cesium 展示。 但在实际应用中会发现,这些图层服务的内容会被 3DTiles 遮盖(特别是渲染

    2024年02月08日
    浏览(25)
  • cesium中3dtiles贴地问题设置

    当我们转换得到3dtiles格式数据后,将数据添加到cesium中:   模型可能出现以下不贴地的情况: 对于此类问题,解决办法参考如下: 模型定位: 修改后,模型贴地显示如下(设置不同的偏移量可以获得不同高度的模型): 

    2024年02月11日
    浏览(21)
  • Cesium 加载3Dtiles数据-最佳方法对比

            Cesium加载空间数据的方法有很多种,网络上关于3Dtiles数据集加载的废话连篇,看着就很无语。这里我本人直抒胸臆,简单介绍一下数据的加载方式。         先打开Cesium的深度检测的开关,也可以不打开。                完成以上步骤后,利用Cesium的readyPromi

    2024年02月11日
    浏览(74)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包