使用OpenGL弹跳动画

时间:2014-10-23 03:32:13

标签: java opengl animation

我正在尝试创建一个可以在x,y和z坐标中移动的弹跳球。球最初在原点上方的y轴上开始几个单位。我已经设法弄清楚如何让我的球在y平面上上下跳动,但每当我尝试添加x和z轨迹时,我都会弄清楚我做错了什么。

double initialVelocity = userInputY;
double initVelX = userInputX;
double initVelZ = userInputZ;
double speed = 1/500.0;
double time = 0;
double x, y, z =0;
if (time == 0){
    velocity+= initialVelocity;
    }
time += speed
velocity = velocity - 9.8 * speed;
if (y+velocity < 0.1){ //collision detection against the floor
    velocity *= -1;
}
if (z + initVelZ < 100){ //Collision detection for ceiling of 100 units
    initVelZ *= -1;
}
if (x + initVelX < 50){ //Collision detection for if ball moves 50 units away from origin in x
    initVelX *= -1;
}
else{
     y += velocity;
     x += initVelX;
     z += initVelZ;
}
gl.gltranslated(x, y, z);
glu.gluSphere() //not really that important to specify

当我只使用我的y变量时,我的球有一个弹跳动画,但只能上下移动。

1 个答案:

答案 0 :(得分:0)

z和x坐标的比较向后看:

if (z + initVelZ < 100){ //Collision detection for ceiling of 100 units
    initVelZ *= -1;
}
if (x + initVelX < 50){ //Collision detection for if ball moves 50 units away from origin in x
    initVelX *= -1;
}

每次发现新位置范围内时,这会反转速度。但是当新职位最终范围之外时,他们需要被颠倒。

另外,您可能需要测试每个坐标方向两端墙壁的碰撞情况,以便球体可以从所有6个墙壁上反弹。

例如对于z坐标,逻辑可能如下所示:

if (z + initVelZ < 0.0 || z + initVelZ > 100.0) {
    initVelZ *= -1.0;
}

其他坐标也一样。