通过JS实现对世界指定坐标渲染模型与坐标系变换
本帖最后由 Harlotte 于 2024-5-9 20:27 编辑如下,我完成了以下几个函数用于实现转换坐标系,实测可用。
var test1 = new Vector3f(-4260,-41,4667);
function render(ctx, state, train) {
let iii = getTrainLocalPositionFromWorldPosition(test1,train.lastCarPosition,train.lastCarRotation);
let rrr = vectMirrorFlip(train.lastCarRotation);
matxuan = new Matrices();
matxuan.translate(iii.x(),iii.y(),iii.z());
matxuan.rotateX(rrr.x());
matxuan.rotateY(rrr.y());
matxuan.rotateZ(rrr.z());
ctx.drawCarModel(models["yan1"], 0, matxuan);
}
function getWorldPositionFromTrainLocalPosition(localPosition , wordpost , wordrotate){//转换列车局部坐标到世界坐标
let mat = new Matrix4f();
mat.rotateX(wordrotate.x());
mat.rotateY(wordrotate.y());
mat.rotateZ(wordrotate.z());
mat.translate(localPosition.x(),localPosition.y(),localPosition.z());
return vectadd(wordpost,mat.getTranslationPart())
}
function getTrainLocalPositionFromWorldPosition(localPosition , wordpost , wordrotate){//转换世界坐标到列车局部坐标
let mat = new Matrix4f();
mat.rotateX(-wordrotate.x());
mat.rotateY(-wordrotate.y());
mat.rotateZ(-wordrotate.z());
mat.translate(localPosition.x()-wordpost.x(),localPosition.y()-wordpost.y(),localPosition.z()-wordpost.z());
return mat.getTranslationPart();
}
function vectMirrorFlip(vect){//镜像翻转
return new Vector3f(-vect.x(),-vect.y(),-vect.z());
}
function vectadd(v1,v2){//向量相加
return new Vector3f(v1.x()+v2.x(),v1.y()+v2.y(),v1.z()+v2.z());
}第一段:声明一个世界坐标与一个简单的应用方式
第二段:一个将列车坐标系转为世界坐标系的函数
第三段:一个将世界坐标系转为列车坐标系的函数
第四段:一个辅助函数,将vector3f的向量反转
第五段:一个辅助函数,将vector3f的向量相加
但现在仍存在一些问题,如通过示例方法渲染的模型在列车运行时会存在一定抖动,这与render函数内的逻辑复杂程度有关,延迟会使获取的坐标、旋转有差异。可能使其运行在一个新的js函数会有改进。但其仅仅是会有抖动,幅度不超过0.2m?
希望各位可以将此玩出花来!
令附:欢迎入群来玩我的追加包群836291719
2024年5月9日
Aphrodite
我倒觉得可以setTimeout(()=>{while(true){;}},1)之类的开个异步解决,但这样又要遇到著名的锁问题了(js可没synchonorous关键字用) ShentongMetro 发表于 2024-5-10 16:41
我倒觉得可以setTimeout(()=>{while(true){;}},1)之类的开个异步解决,但这样又要遇到著名的锁问题了(js可 ...
zbx说那个获取坐标的因为运行次数不是和帧率同步的所以会有偏差(哭 Harlotte 发表于 2024-5-10 18:21
zbx说那个获取坐标的因为运行次数不是和帧率同步的所以会有偏差(哭
这样啊
(想到复杂的解决方案:根据列车方向和瞬时速度预估列车位置然后相对
ShentongMetro 发表于 2024-5-11 18:05
这样啊
(想到复杂的解决方案:根据列车方向和瞬时速度预估列车位置然后相对
...
好好好好好好好好好
页:
[1]