2014-10-23 2 views
0

Я пытаюсь создать прыгающий шар, который может перемещаться в координатах x, y и z. Сначала мяч начинает пару единиц по оси Y над началом. Мне удалось выяснить, как заставить мяч отскочить вверх и вниз в плоскости y, но у меня проблемы с выяснением того, что я делаю неправильно, когда я пытаюсь добавить траектории x и z.Отскок анимации с OpenGL

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, мой шар имеет прыгающую анимацию, но только движется вверх и вниз.

ответ

0

Сравнения для г и х координат оглядываться назад:

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 стен.

Например для координатного г, логика может выглядеть следующим образом:

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

То же самое и для других координат.

Смежные вопросы