DirectxTK SpriteBatch и Viewport Центрирование

Я использую DirectXTK для C ++ и интенсивно использую функцию спрайта.

Я пытаюсь разработать движок изометрической визуализации. Я уже получил изометрический рендеринг для правильной работы. Наряду со смещением. Однако я сталкиваюсь с одной большой проблемой.

Я не могу понять, как отцентрировать центр камеры в мире (0,0) или любой другой координате.

И после введения этой матрицы преобразования, сгенерированной непосредственно из камеры, в SpriteBatch.Begin ()

Matrix Camera::getTransformMatrix() {

Matrix Transform = Transform.CreateTranslation(Vector3(World_Pos.x, World_Pos.y, 0));
Matrix Rotation = Rotation.CreateRotationZ(0);
Matrix Scale = Scale.CreateScale(ZoomFactor, ZoomFactor, 1);
return  Transform * Rotation * Scale;
}

Кажется, ничего не происходит. Это с мировой позицией Камеры, установленной в (0,0), и мировой позицией спрайта, установленной в (0,0).

Это результирующее изображение.

http://i.imgur.com/Bep7l5a.png

Я отключил альфа-смешивание и смещения спрайтов по причинам отладки.

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

0

Решение

Помните, что преобразование по умолчанию для окна просмотра экрана все еще применяется, если вы предоставляете пользовательское преобразование для SpriteBatch, Преобразование по умолчанию делает SpriteBatch работать с координатами пикселей, начиная с верхнего левого угла экрана.

Если вы хотите, чтобы пользовательское преобразование использовалось «как есть» без объединения с окончательным преобразованием видового экрана, вы можете использовать этот особый случай для обработки ориентации:

spriteBatch->SetRotation(DXGI_MODE_ROTATION_UNSPECIFIED);

Обязательно прочитайте вики.

1

Другие решения

Я нашел свой ответ. Тем, кто сталкивается с этой проблемой, а также. вам нужно будет компенсировать тот факт, что порт просмотра необходимо перевести в центр (0,0) к центру экрана.

То есть матрица, которая вам нужна …

Просмотр * Перевод (ширина * .05, высота * .05)

Где Вид — это обратная матрица произведения масштаба вашего мира, вращения мира и трансформации мира.

Такое, что произведение конечной матрицы преобразования мира F и матрицы представления V удовлетворяет …

I = Р * V

Я это тождественная матрица.

1

По вопросам рекламы [email protected]