Возможно, моя математика ржавая, или я просто застрял в своем ящике после того, как так долго пытался решить эту проблему, в любом случае мне нужна ваша помощь.
Справочная информация: Я делаю 2D-игру на C # с использованием XNA.В этой игре я хочу, чтобы камера могла увеличивать и уменьшать масштаб, чтобы всегда была видна определенная часть объектов.Излишне говорить, что объекты движутся в двух измерениях, а камера движется в трех .
Ситуация: В настоящее время я использую базовую тригонометриючтобы рассчитать высоту камеры для отображения всех объектов.Я также помещаю камеру между этими объектами.
Это выглядит примерно так:
1. Переберите все объекты, чтобы найти внешние края наших объектов: farRight, farLeft, farUp, farDown.
2. Когдамы знаем, какие края должны быть показаны, вычислим центр, также известный как положение камеры:
CenterX = farLeft + (farRight - farLeft) * 0.5f;
CenterY = farUp + (farDown - farUp) * 0.5f;
3. Проведите по нашим краям, чтобы найти наибольшее значение по сравнению с положением нашей камерытаким образом самое дальнее расстояние от центра экрана.
4. Используя наибольшее значение расстояния, мы можем легко вычислить необходимую высоту, чтобы показать все эти объекты (точки):
float T = 90f - Constants.CAMERA_FIELDOFVIEW * 0.5f;
float height = (float)Math.Tan(MathHelper.ToRadians(T)) * (length);
Пока все хорошо, камера отлично позиционируется на основе расчетов.
Проблема:
a) Моя цель рендеринга - 1280 * 720 с полем зрения45 градусов, так что на оси X всегда видно немного больше, на 560 пикселей больше.Это не проблема сама по себе, а более серьезная на б) ...
б) Я хочу, чтобы камера была немного дальше, чем она есть, чтобы можно было увидеть немного больше о происходящемза самой дальней точкой.Конечно, это происходит на оси X, но это технически результат моей ошибочной логики.Я хочу иметь возможность видеть больше как по осям X, так и по оси Y и контролировать это поведение.
Вопрос
Хм, поясню.Я хотел бы получить некоторые сведения о способе позиционирования самой камеры, создавая это состояние:
Объекты не будут ближе, чем, скажем ... 150 пикселей к краю оси X и 100пикселей до края оси Y.Для этого камера должна располагаться вдоль оси Z так, чтобы поле обзора охватывало все это.
Мне не нужна помощь с кодированием, только математика и логика вычисления высоты моегокамера.Как вы, наверное, видите, мне тяжело оборачивать это в своей голове, и еще труднее пытаться объяснить это вам.
Если кто-то там имел дело с этим или просто лучше меня по математикеЯ буду признателен за все, что вы скажете!:)