如何在Cesium使用视频作为立方体的材质

4 篇文章 0 订阅
4 篇文章 0 订阅

最近因为要用到倾斜摄影模型,需要在地图中播放视频,在网络上看了好多文章,其实都已经说明白了,但是因为环境之类的问题,都没能正常运行起来,总体来说,对于新手来说不太友好。

鉴于此,做了一个最简单的Demo,资源已上传到csdn,地址是https://download.csdn.net/download/dragonrxl/11568472

如何运行?

只需要将文件解压缩后,放到容器里面,例如tomcat,nginx之类的容器里就好,我觉得最简单的是php,装好PHP后,在文件夹目录里面,

执行php -S localhost:4111

就可以在浏览器里面输入http://localhost:4111/playVideo.html访问了

注意点

下面是html文件的代码,很简单,有一个注意点是video标签用上了muted(静音属性),为什么用它呢?用了它之后,播放代码videoElement.play();就可以立即执行了,不知为何,只要作为材质视频就无法自动播放。

这样子有个问题,就是视频没有声音了,可能不符合你的要求,那怎么办呢?把muted属性删除掉,然后将videoElement.play();代码放到一个延时执行函数里,或者通过异步函数里面,只要加载完成就播放。

简单说下延时执行函数使用setTimeout就可以,例如:setTimeout(function(){videoElement.play();}, 3000);

这样子三秒后执行,时间不够就5秒或者更长,异步函数我没试验,自己动手看看吧。

<!DOCTYPE html>
<html lang="en">
<head>
  <!-- Use correct character set. -->
  <meta charset="utf-8">
  <!-- Tell IE to use the latest, best version. -->
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <!-- Make the application on mobile take up the full browser screen and disable user scaling. -->
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
  <title>播放本地MP4文件的视频模型渲染</title>
  <script src="Build/Cesium/Cesium.js"></script>
  <style>
      @import url(Build/Cesium/Widgets/widgets.css);
      html, body, #cesiumContainer {
          width: 100%; height: 100%; margin: 0; padding: 0; overflow: hidden;
      }
	  .cesium-widget-credits{ display:none} /**  隐藏版权信息 **/
	  .cesium-viewer .cesium-widget-credits{ display:none }
  </style>
</head>
<body>
  <div id="cesiumContainer"></div>
  <video id="trailer" muted autoplay loop crossorigin controls>
		<source src="video.mp4" type="video/mp4">
		Your browser does not support the <code>video</code> element.
	</video>
  <script>
    var viewer = new Cesium.Viewer('cesiumContainer', {
		geocoder: false,//是否显示geocoder小器件,右上角查询按钮
		homeButton:false,//是否显示Home按钮
		sceneModePicker:false,//是否显示3D/2D选择器
		baseLayerPicker:false,//是否显示图层选择器
		navigationHelpButton:false,//是否显示右上角的帮助按钮
		animation:false,//是否创建动画小器件,左下角仪表
		creditContainer:"cesiumContainer",// 对应上面div的ID
		timeline:false,//是否显示时间轴
		fullscreenButtion:false,//是否显示全屏按钮
		vrButton:false,
		selectionIndicator : false,//是否显示选取指示器组件
	});
	// 上面配置选项可以控制部分控件是否显示
	viewer.scene.debugShowFramesPerSecond = true;// 显示帧率
	/** 默认使用bing地图,转换为google地图开始 **/
	var google = new Cesium.UrlTemplateImageryProvider({
		url : 'http://mt0.google.cn/vt/lyrs=s&hl=zh-CN&x={x}&y={y}&z={z}',
		tilingScheme : new Cesium.WebMercatorTilingScheme(),
		maximumLevel : 20
	});
	viewer.imageryLayers.addImageryProvider(google);
	/** 默认使用bing地图,转换为google地图结束 **/
	/** 开始添加立方体开始 ***/
	var videoElement = document.getElementById('trailer');//获得video对象
	videoElement.play();
	var redBox = viewer.entities.add({
		name: 'my first box',
		position: Cesium.Cartesian3.fromDegrees(116.812167,36.550532, 1.0),
		box: {
			dimensions : new Cesium.Cartesian3(10.0, 5.1, 10.0),
			material: Cesium.Color.RED.withAlpha(0.5),
			outline: true,
			outlineColor: Cesium.Color.BLACK,
			material: videoElement,
		}
	});
	
	viewer.zoomTo(viewer.entities);
	/** 开始添加立方体结束 ***/
  </script>
</body>
</html>

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Cesium使用TypeScript创建材质,可以按照以下步骤进行操作: 1. 首先,安装Cesium和相关的TypeScript声明文件。可以使用yarn来安装所需的依赖项。在终端中运行以下命令: ``` yarn add cesium @types/cesium ``` 2. 在项目中创建一个TS文件,例如`MyMaterial.ts`,在该文件中导入所需的Cesium模块和类型声明: ```typescript import * as Cesium from 'cesium'; // 可以根据需要导入其他Cesium模块和类型声明 ``` 3. 创建一个名为`MyMaterial`的类,并继承`Cesium.Material`: ```typescript class MyMaterial extends Cesium.Material { // 在这里实现你的材质逻辑 } ``` 4. 在`MyMaterial`类中,可以根据需要实现各种材质的属性和方法,例如`shaderSource`、`uniforms`、`render`等。这些属性和方法将定义材质的外观和行为: ```typescript class MyMaterial extends Cesium.Material { // 实现shaderSource属性来定义材质的着色器代码 get shaderSource() { return ` // 在这里编写着色器代码 `; } // 实现uniforms属性来定义材质的uniform变量 get uniforms() { return { // 在这里定义uniform变量 }; } // 实现render方法来处理材质的渲染逻辑 render() { // 在这里处理渲染逻辑 } } ``` 5. 在`MyMaterial.ts`文件的末尾,通过调用`Cesium.Material.registerType`方法将自定义的材质注册到Cesium中: ```typescript Cesium.Material.registerType(MyMaterial, 'MyMaterial'); ``` 6. 现在,可以在其他地方使用`MyMaterial`来创建和应用自定义材质了: ```typescript const myMaterial = new MyMaterial({ // 在这里设置材质的参数 }); // 在这里应用材质到需要的对象上 ``` 以上是在Cesium使用TypeScript创建材质的基本步骤。你可以根据自己的需求进一步扩展和定制材质的属性和行为。请根据你的项目需求进行相应的调整和修改。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [cesium_demos:cesium样例库](https://download.csdn.net/download/weixin_42168830/18328631)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Cesium 材质模块开发流程——方式1](https://blog.csdn.net/u014556081/article/details/127299605)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值