cesium 知乎_Cesium开发:在平面上播放视频

本文介绍了如何在Cesium中实现在平面上播放视频,通过创建一个包含video的Material并设置适当的几何和矩阵变换。代码示例中展示了在平面上创建视频的完整过程,包括矩阵变换、几何实例和材质外观的设置。注意Cesium内部的bug,需要避免直接将video元素作为构造函数参数。最后,调整相机视角以便观察播放的视频。
摘要由CSDN通过智能技术生成

Cesium的sancastle示例中有一个在球体上创建视频的例子,不过大家可能更需要一个在平面上创建视频,好应用到实际工程中去。

https://www.zhihu.com/video/1012029395518750720

代码比较简单,使用了Material Apperance,并且创建了一个包含video的Material。 需要注意的点是:new Cesium.Material的方式,把video作为构造函数参数传进去的做法不能用,Cesium有bug,内部没加对HtmlVideo的判断;

需要在html中增加如下代码:

Your browser does not support the video element.

然后js代码如下:

var viewer = new Cesium.Viewer('cesiumContainer');

var scene = viewer.scene;

var dimensions = new Cesium.Cartesian3(400000.0, 400000.0, 1.0);

var positionOnEllipsoid = Cesium.Cartesian3.fromDegrees(116.3912, 39.920);

var translateMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(positionOnEllipsoid);

var rotationXMatrix = Cesium.Matrix4.fromRotationTranslation(Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(-90.0)));

var rotationYMatrix = Cesium.Matrix4.fromRotationTranslation(Cesium.Matrix3.fromRotationY(Cesium.Math.toRadians(90.0)));

var scaleMatrix = Cesium.Matrix4.fromScale(dimensions);

var planeZModelMatrix = new Cesium.Matrix4();

Cesium.Matrix4.multiply(translateMatrix, scaleMatrix, planeZModelMatrix);

var planeXModelMatrix = new Cesium.Matrix4();

Cesium.Matrix4.multiply(translateMatrix, rotationXMatrix, planeXModelMatrix);

Cesium.Matrix4.multiply(planeXModelMatrix, scaleMatrix, planeXModelMatrix);

var planeYModelMatrix = new Cesium.Matrix4();

Cesium.Matrix4.multiply(translateMatrix, rotationYMatrix, planeYModelMatrix);

Cesium.Matrix4.multiply(planeYModelMatrix, scaleMatrix, planeYModelMatrix);

var videoElement = document.getElementById('trailer');

createPlane(planeZModelMatrix, new Cesium.Color(0.0, 0.0, 1.0, 1.0));

//createPlane(planeXModelMatrix, new Cesium.Color(1.0, 0.0, 0.0, 1.0));

//createPlane(planeYModelMatrix, new Cesium.Color(0.0, 1.0, 0.0, 1.0));

function createPlane(planeModelMatrix) {

// 创建平面

var planeGeometry = new Cesium.PlaneGeometry({

vertexFormat : Cesium.MaterialAppearance.VERTEX_FORMAT,

});

// 创建平面外轮廓

var planeOutlineGeometry = new Cesium.PlaneOutlineGeometry({

});

var planeGeometryInstance = new Cesium.GeometryInstance({

geometry : planeGeometry,

modelMatrix : planeModelMatrix

});

var material = Cesium.Material.fromType('Image');

material.uniforms.image = videoElement;

/* Cesium 1.47 有bug,以下代码会报错

var material = new Cesium.Material({

fabric : {

type : 'Image',

uniforms : {

image : videoElement

}

}

});

*/

scene.primitives.add(new Cesium.Primitive({

geometryInstances : planeGeometryInstance,

appearance : new Cesium.MaterialAppearance({

closed: false,

//translucent: false,

material: material

})

}));

var planeOutlineGeometryInstance = new Cesium.GeometryInstance({

geometry : planeOutlineGeometry,

modelMatrix : planeModelMatrix,

attributes : {

color : Cesium.ColorGeometryInstanceAttribute.fromColor(new Cesium.Color(1.0, 1.0, 1.0, 1.0))

}

});

scene.primitives.add(new Cesium.Primitive({

geometryInstances : planeOutlineGeometryInstance,

appearance : new Cesium.PerInstanceColorAppearance({

flat : true,

renderState : {

lineWidth : Math.min(2.0, scene.maximumAliasedLineWidth)

}

})

}));

}

viewer.camera.flyToBoundingSphere(new Cesium.BoundingSphere(positionOnEllipsoid, 300000));

点击czm6.com,查看更多内容。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值