«добавление» двух углов - PullRequest
       15

«добавление» двух углов

3 голосов
/ 01 декабря 2010

Хорошо, я получил два угла. Один - это угол джойстика, а другой - угол обзора камеры. Угол камеры. Теперь я хочу, чтобы при нажатии на джойстик плеер отодвигался от камеры. Как бы я это сделал? И есть ли простой способ сделать это на Java или Ardor3d?

edit: Вот код того, как я получаю свои углы.

float camDegree = (float) Math.toDegrees(Math.atan2(
                     _canvas.getCanvasRenderer().getCamera().getLocation().getXf() - colladaNode.getTranslation().getXf(),
                     _canvas.getCanvasRenderer().getCamera().getLocation().getYf()) - colladaNode.getTranslation().getYf());

            player.angle = (float) Math.toDegrees(Math.atan2(padX, padY));
            Quaternion camQ = new Quaternion().fromAngleAxis(camDegree, Vector3.UNIT_Y);

1 Ответ

8 голосов
/ 01 декабря 2010

Должен сказать, что я не совсем понимаю ваш вопрос, но, похоже, речь идет о том, как реализовать управление камерой с помощью джойстика.

Самый важный совет, который я могу вам датьв том, что лучше не вычислять углы, а работать напрямую с векторами.

Предположим, что камера смотрит в направлении v (в некоторых типах игр этот вектор будет указывать прямона игрока, но не на все типы игр, и не всегда):

the look vector from a camera to a player can be resolved into vertical and horizontal components

Как правило, вам не важен вертикальный компонент этого вектора, поэтому удалите его, чтобы получитьгоризонтальный компонент, который я назову y по причинам, которые станут понятны позже:

y = v - ( v · вверх ) вверх

где вверх - единичный вектор, направленный вертикально вверх.

Мы можем найти горизонтальный вектор, перпендикулярный y , используя крестикoduct (и запоминание правила правой руки):

x = v × up

the vectors x and y form a horizontal coordinate basis

Теперь вы можете видеть, что y - это вектор в плоскости, направленной вперед (от камеры), а x - вектор в плоскости.направо (в сторону относительно камеры).Если вы нормализуете эти векторы:

= x / | x |

ŷ = y / | y |

, тогда вы можете использовать и ŷ какКоординатная основа для относительного движения камеры игрока.Если ваши значения джойстика Jx и Jy , переместите плеер на

s ( Jx + Jy ŷ )

где s - соответствующее скалярное значение, пропорциональное скорости игрока.

(Обратите внимание, что в этом ответе не было вычислено ни одного угла!)

...