java - OpenGL逼真的汽车运动
问题描述
我有一个问题很久了......在我的OpenGL游戏中,你可以在图片中看到,是一辆有高度地形的汽车。
所以为了计算汽车的角度,我创建了 4 个盒子,它们跟随在汽车周围,所以它们相对于汽车的旋转始终具有相同的位置。所以我的算法工作得很好,但是当我转向汽车时,它变得毫无用处,因为我只是围绕笛卡尔坐标系的静态 X 和 Z 轴旋转。有人知道如何“移动”实心轴,所以我可以像自定义轴一样旋转吗?或者我的第二个想法是关于 Xrotation 和 zrotation 之间的插值......
请帮助:(
这是我的代码:
Vector3f x1 = new Vector3f(26, cubex1.getPosition().y, 0);
Vector3f x2 = new Vector3f(0, cubex2.getPosition().y, 0);
Vector3f xdif = new Vector3f(x1.x - x2.x, x1.y - x2.y, x1.z - x2.z);
float anglex = -(float) Math.toDegrees(cubex1.getPosition().angle(xdif, new Vector3f(1, 0, 0)));
if(cubex1.getPosition().y < cubex2.getPosition().y){
super.setRotX(-anglex);
}else{
super.setRotX(anglex);
}
Vector3f z1 = new Vector3f(0, cubez1.getPosition().y, 14);
Vector3f z2 = new Vector3f(0, cubez2.getPosition().y, 0);
Vector3f zdif = new Vector3f(z1.x - z2.x, z1.y - z2.y, z1.z - z2.z);
float anglez = -(float) Math.toDegrees(cubez1.getPosition().angle(zdif, new Vector3f(0, 0, 1)));
super.setRotZ(anglearoundplayer / anglez);
if(cubez1.getPosition().y < cubez2.getPosition().y){
super.setRotZ(-anglez);
}else{
super.setRotZ(anglez);
}
我正在使用不同框的向量来获取与平面相关的角度...
解决方案
推荐阅读
- vue.js - 如何创建带有导航抽屉和可调整大小内容的 Vuetify 容器?
- python - Pandas:如何计算一列的滚动窗口(按日期分组)并计算另一列的不同值?
- firebase - 为什么我通过简单的 Firebase 发布请求获得权限被拒绝 401 - Firebase 安全规则 - REST API
- go - 在 DDD 中,一个实体和存储库可以从多个表中提取吗?
- html - 引导程序 v4.4 | 折叠 - 过渡不起作用
- dynamics-crm - Dynamics365CE 工作流程:检查值是否已存在并更新记录
- javascript - 用 morris.js 放多行
- node.js - 如何使用 child_process 在相同和不同的终端上运行命令?
- django - 有没有办法在运行时生成 SearchVector 字段内容?
- angular - 从模板调用组件时,Angular / 将数据发送到组件