|
还没有账号?赶快去注册吧!
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 Harlotte 于 2024-5-9 20:27 编辑
如下,我完成了以下几个函数用于实现转换坐标系,实测可用。
- var test1 = new Vector3f(-4260,-41,4667);
- function render(ctx, state, train) {
- let iii = getTrainLocalPositionFromWorldPosition(test1,train.lastCarPosition[0],train.lastCarRotation[0]);
- let rrr = vectMirrorFlip(train.lastCarRotation[0]);
- 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
|
|