Перейти к содержанию

[World of Warships] View matrix


Рекомендуемые сообщения

Доброго времени суток!

Нашел видовую матрицу такого вида:

0.71  -0.04 0.70 34.49

-0.88 -0.04 0.48 -519.52

-0.05 -0.93 0.36 -144.25

-0.07 0.88 0.47 -198.54

Находится по статичному адресу и больше  похожих структур от [-1,1] в первых трех столбцах не нашлось ,  циферки меняются при перемещении камеры все как надо,

пытаюсь переводить в экранные координаты с помощью:

Цитата

public ScreenVector WorldToScreen(float xPos, float yPos, float zPos)
        {
             float m11 = BitConverter.ToSingle(matrix, 0), m12 = BitConverter.ToSingle(matrix, 16), m13 = BitConverter.ToSingle(matrix, 32), m14 = BitConverter.ToSingle(matrix, 48);
            float m21 = BitConverter.ToSingle(matrix, 4), m22 = BitConverter.ToSingle(matrix, 20), m23 = BitConverter.ToSingle(matrix, 36), m24 = BitConverter.ToSingle(matrix, 52);
            float m31 = BitConverter.ToSingle(matrix, 8), m32 = BitConverter.ToSingle(matrix, 24), m33 = BitConverter.ToSingle(matrix, 40), m34 = BitConverter.ToSingle(matrix, 56);
            float m41 = BitConverter.ToSingle(matrix, 12), m42 = BitConverter.ToSingle(matrix, 28), m43 = BitConverter.ToSingle(matrix, 44), m44 = BitConverter.ToSingle(matrix, 60);

            float screenX = (m11 * xPos) + (m21 * yPos) + (m31 * zPos) + m41;
            float screenY = (m12 * xPos) + (m22 * yPos) + (m32 * zPos) + m42;
            float screenW = (m14 * xPos) + (m24 * yPos) + (m34 * zPos) + m44;

            float camX = rct.Right - rct.Left;
            float camY = rct.Bottom - rct.Top;

            float x = camX + (camX * screenX / screenW);
            float y = camY - (camY * screenY / screenW);

            if (screenW > 0.001f  //not behind us
        && rct.Left + x > rct.Left && rct.Left + x < rct.Right //not off the left or right of the window
        && rct.Top + y > rct.Top && rct.Top + y < rct.Bottom) //not off the top of bottom of the window
            {
                return new ScreenVector()
                {
                    Result = true,
                    X = x,
                    Y = y
                };
            }
            return new ScreenVector()
            {
                Result = false,
                X = x,
                Y = y
            };
            
        }

 

Вместо x y z ставлю 0 0 0 центр карты,но координаты получаются рандомными в основном за пределами окна

в чем может быть проблема??адрес матрицы неправильный ? или возможно она нестандартная какая-то?

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.