Перейти к содержанию
Авторизация  

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

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

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

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 центр карты,но координаты получаются рандомными в основном за пределами окна

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

Поделиться сообщением


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

×

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

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