Я использую 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, это было бы здорово.
Помните, что преобразование по умолчанию для окна просмотра экрана все еще применяется, если вы предоставляете пользовательское преобразование для SpriteBatch
, Преобразование по умолчанию делает SpriteBatch
работать с координатами пикселей, начиная с верхнего левого угла экрана.
Если вы хотите, чтобы пользовательское преобразование использовалось «как есть» без объединения с окончательным преобразованием видового экрана, вы можете использовать этот особый случай для обработки ориентации:
spriteBatch->SetRotation(DXGI_MODE_ROTATION_UNSPECIFIED);
Обязательно прочитайте вики.
Я нашел свой ответ. Тем, кто сталкивается с этой проблемой, а также. вам нужно будет компенсировать тот факт, что порт просмотра необходимо перевести в центр (0,0) к центру экрана.
То есть матрица, которая вам нужна …
Просмотр * Перевод (ширина * .05, высота * .05)
Где Вид — это обратная матрица произведения масштаба вашего мира, вращения мира и трансформации мира.
Такое, что произведение конечной матрицы преобразования мира F и матрицы представления V удовлетворяет …
I = Р * V
Я это тождественная матрица.