webgl在一个坐标轴上围绕另一个对象旋转对象
问题描述:
我试图围绕另一个对象旋转对象,同时保持自己的旋转。我有每个对象旋转完成即时通讯只是不知道如何旋转另一个对象周围的对象。例如,我有一个名为Planets [Sun,Mercury]的数组。我想让太阳静止不动,让水银在一个轴上围绕太阳旋转。webgl在一个坐标轴上围绕另一个对象旋转对象
目前我有太阳和水银自行旋转,这是由: 首先改变弧度弧度。
function degToRad(degrees)
{
return degrees * Math.PI/180;
}
我drawScene函数
然后()我旋转矩阵:
mat4.rotate(mvMatrix, degToRad(rCube), [0, 1, 0]);
,然后最后当我动画场景我移动使用对象:
var lastTime = 0;
function animate() {
var timeNow = new Date().getTime();
if (lastTime != 0)
{
var elapsed = timeNow - lastTime;
rCube -= (75 * elapsed)/1000.0;
}
lastTime = timeNow;
}
反正我有可以将原点传递到
mat4.rotate(mvMatrix, degToRad(rCube), [0, 1, 0]);
使它像:
mat4.rotate(mvMatrix, ObjectToRotateAround, degToRad(rCube), [0, 1, 0]);
我感觉好像我没有解释我的代码。如果你想看看它可以在这里找到: https://copy.com/iIXsTtziJaJztzbe
答
我认为你需要做一个矩阵操作序列和矩阵操作的顺序很重要。
在这种情况下,您可能需要的是先将水星转化为Sun的位置,然后进行旋转,然后进行第一次翻译。我自己还没有实现分层对象,所以我不想混淆你。但这里是我实现轨道摄像机的代码偏航功能可使相机围绕目标点,你会发现它有用:
yaw: function(radian){
this.q = quat.axisAngle(this.q, this.GLOBALUP, radian);
vec3.rotateByQuat(this.dir, this.dir, this.q);
vec3.cross(this.side,this.GLOBALUP,this.dir);
vec3.normalize(this.side,this.side);
this.pos[0] = this.target[0] - this.dir[0] * this.dist;
this.pos[1] = this.target[1] - this.dir[1] * this.dist;
this.pos[2] = this.target[2] - this.dir[2] * this.dist;
}
凡this.dir是单位向量总是从指明了方向照相机瞄准并且this.dist是照相机和目标之间的距离。您可以使用矩阵旋转而不是四元数旋转。
编辑:只需添加方向可以通过取两个对象的位置差异来计算,然后对其进行归一化。