我每次旋转之前都先为模型做了定位,就是执行了下面的代码,模型能够定位到我需要的点,然后再旋转就还是不见了。请问会不会是定位和旋转的处理逻辑有什么问题啊。
var cartographic = Cesium.Cartographic.fromCartesian(tileset.boundingSphere.center);
var newCartographic = Cesium.Cartographic.fromDegrees(newLongitude, newLatitude, newHeight);
var surface = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, cartographic.height);
var offset = Cesium.Cartesian3.fromRadians(newCartographic.longitude, newCartographic.latitude, newCartographic.height);
var translation = Cesium.Cartesian3.subtract(offset, surface, new Cesium.Cartesian3());
tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation);
然后我的模型是BentleyContextcapture直接导出的3dtile格式,虽然加载模型没问题,但还是会报“This tileset JSON uses the “content.url” property which has been deprecated. Use “content.uri” instead.”,也不知道是不是文件的原因。
var transformMat = Cesium.Matrix4.fromArray(m);
m是什么?求解答
let m = Cesium.Matrix4.clone(tileset.modelMatrix);
我每次旋转之前都先为模型做了定位,就是执行了下面的代码,模型能够定位到我需要的点,然后再旋转就还是不见了。请问会不会是定位和旋转的处理逻辑有什么问题啊。
var cartographic = Cesium.Cartographic.fromCartesian(tileset.boundingSphere.center);
var newCartographic = Cesium.Cartographic.fromDegrees(newLongitude, newLatitude, newHeight);
var surface = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, cartographic.height);
var offset = Cesium.Cartesian3.fromRadians(newCartographic.longitude, newCartographic.latitude, newCartographic.height);
var translation = Cesium.Cartesian3.subtract(offset, surface, new Cesium.Cartesian3());
tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation);
然后我的模型是BentleyContextcapture直接导出的3dtile格式,虽然加载模型没问题,但还是会报“This tileset JSON uses the “content.url” property which has been deprecated. Use “content.uri” instead.”,也不知道是不是文件的原因。
1. 你这么写,只能调整高度
2. 3dtile的json文件规则改过一次,最早文件路径的键值关键字用的url,后来改成了uri,你把json文件中的url批量替换成uri,就不会报这个问题了
对,我是想怎么同时调整高度并旋转,我调整完位置和高度后,旋转就不能实现。文档里面的效果好像也不能同时调整高度和旋转。不知道你那边有没有思路,还请赐教。
这篇文章就是做这个的撒,先把物体平移到球心,旋转后再平移回去
为什么将模型移至原点后还要对旋转矩阵进行两次倒转再进行操作?这一步不太能理解,能说明讲解下吗
不知道你测试过没?当给的angleX的值在130左右的时候就报错了
界面效果里面可以拖动修改anglex的角度,改到130,没报错
拿到项目中测试了,来回旋转后还是会飞走。
这个方法还是要改善或者有使用前提。
独立建工程试过没?
如果想做到单独沿模型的某个轴缩放应该怎么修改?我自己试了一下,模型会飞走。
function scale(value){
var m1 = Cesium.Matrix3.fromScale(new Cesium.Cartesian3(value, value, value));
trasnlate(m1);
}
new Cesium.Cartesian3(valuex, valuey, valuez) 自己构建一个
那请问如果想做到连续变换的话应该怎么做呢?比如我先沿x轴进行了旋转,再沿y轴旋转时是在之前沿x轴旋转后的状态下旋转。
矩阵相乘
请问是使用上一次旋转X轴的矩阵 乘 这一次旋转Y轴的矩阵吗
先转哪个就先乘哪个,你自己试一下就知道了
这么调整了,当改变旋转时候还是会飞走模型
http://cesium.xin/wordpress/archives/cesium-primitive-matrix.html
动态修改了角度,模型不见了?跪求大佬帮忙!
// …
let viewModel = {
height: 0,
rotateX: 0,
rotateY: 0,
rotateZ: 0
};
document.getElementById(“addRotateX”).addEventListener(“click”, function () {
viewModel.rotateX += 50;
changeRotateX(tileset, viewModel.rotateX);
});
// …
function changeRotateX(tileset, rotateX = Number(rotateX)) {
if (!tileset || isNaN(rotateX)) return;
let m1 = Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(rotateX) /*角度转弧度*/);
tileset.modelMatrix = Cesium.Matrix4.multiplyByMatrix3(tileset.modelMatrix, m1, new Cesium.Matrix4());
}
参考 http://cesium.xin/wordpress/archives/cesium-primitive-matrix.html
movetotile();这个函数在哪
movetotile内容就是viewer.zoomTo(tileset, new Cesium.HeadingPitchRange(0.0, -0.5, tileset.boundingSphere.radius * 2.0));
这里不需要,删掉就行,文章内已删掉
写的非常棒,很受用 ~ 已解决问题了 ~~~
发现在较新版本 cesium 1.99 依然是这样滴
倾斜摄影的 3dtiles 没问题,
建模软件生成的 3dtiles ,Cesium.Matrix4.multiplyByMatrix3(m,m1,m); 旋转模型消失
原来中心点在 地球的中心啊
怎么把平移加进去呢
已解决