kroonk
вобщем матрица проекции такая:
(возможно для DX ее придется транспонировать)
| near/w 0 0 0 |
| 0 near/h 0 0 |
| 0 0 -1 -2*near |
| 0 0 -1 0 |
где w=near*tan(fov/2), где fov-угол обзора по горизонтали (в радианах)
h=w*aspect, aspect=высота экрана / ширина экрана
D3DXMATRIX m; memset(&m,0,sizeof( D3DXMATRIX)); m._11=1./tan( fov*PI/360); // fov-угол обзора по горизонтали в градусах m._22=m._11*screenWidth/screenHeight; m._33=-1; m._34=-2.*near; m._43=-1; // либо наоборот, попробуй сам // m._34=-1; // m._43=-2.*near;
Я тут придумал способ передвижения без тряски. Если точности double и float не хватает для операций с дробными числами то можно сделать два вектора в одном целые числа в другом дробные и вектор передвижения прибавлять к вектору где только дробные числа если дробные числа во втором векторе становятся больше 1.0f то из них вычитать целые числа и прибавлять их к числам 1-ого вектора. А при отрисовке делать две матрицы перемещения в одну записывать положение точки управляемой первым "целым" вектором, а в другую положение точки управляемой вторым "дробным" вектором после этого сделать общую матрицу перемещения и она будет равна первой матрице умноженной на вторую. А теперь у меня 2 вопроса 1-ый как из дробного числа к примеру 1.5f получить 2 числа 1.0f и 0.5f и 2-ой вопрос будет ли это вообще работать?
kroonk
1. Вроде есть функции получения целой части
2. Хз, зависит от кривизны рук. ИМХО неэффективно делать вычитание при > 1.0f, лучше где то 10000.0, когда точность начинает падать. Если 1 int64 = 10000m, то координаты выходят в диапазоне 92233720368547758080km … 92233720368547758070km
И да... Пользуйся знаками препинания, читать трудно.
Правка - используй восьмибайтовый int, у обычного то диапазон порядка -2kk ... 2kk
-Eugene-
> Вроде есть функции получения целой части
а что это за функции?
kroonk
Схема такая
1e7*x1+y1 + (1e7*x2+y2)=1e7*x3+y3
x3=x1+x2
y3=y1+y2
если y3>1e7
y3=y3-1e7
x3=x3+1
Многоразрядная арифметика, проще реализвать для целых чисел, главное аккуратно сделай, чтобы большие числа не "глотали" меньшие
Использовать просто - 1e7*x+y, если x=0 (в одной системе с нами) потери точности не случится (надо проверить), иначе младшая часть и не важна для результата
Ну и то что я тебе раньше писал о нескольких циклах отрисовки
Сейчас реализовал свой способ тряска уменьшилась в 2 раза но неизвестно почему осталась.
kroonk
амортизаторы поставь ;)
У меня такое ощущение что я что-то сделал не так и забыл про это и из-за этого тряска. Иначе почему-же камера использующая координаты объекта не трясётся а сам объект трясётся?
kroonk
^_^
объект трясёцца !
Какие при этом координаты у камеры и у объекта который сошолл сума и трясёцца !
выложи
kroonk
гдето осталась потеря точности, ищи
Назови свою игру "Трясущийся Космос" )
Aslan
> Назови свою игру "Трясущийся Космос"
скорее трясущийся корабль ведь камера, background, планета всё спокойно.
Всё я уже не знаю что делать буду создавать игру в стиле X3 земной конфликт там сектора максимум 100 километров наверное по этому тряски и нет.
kroonk
Может у него эпилепсия ????
А точнее: Если камера достаточно далеко от центра и с ней достаточно близко расположена модель , то она будет трястись.
Выше тебе написали решение проблемы (Neptune).
Просто не допускай , чтобы камера залетала далеко.
kroonk
Просто сделай вычитание координат нормально
Покажи код
Тема в архиве.