ПрограммированиеФорумГрафика

Тряска объектов. (5 стр)

Страницы: 1 2 3 4 5 6 7 Следующая »
#60
21:11, 28 июня 2011

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;
#61
11:02, 29 июня 2011

Я тут придумал способ передвижения без тряски. Если точности double и float не хватает для операций с дробными числами то можно сделать два вектора в одном целые числа в другом дробные и вектор передвижения прибавлять к вектору где только дробные числа если дробные числа во втором векторе становятся больше 1.0f то из них вычитать целые числа и прибавлять их к числам 1-ого вектора. А при отрисовке делать две матрицы перемещения в одну записывать положение точки управляемой первым "целым" вектором, а в другую положение точки управляемой вторым "дробным" вектором после этого сделать общую матрицу перемещения и она будет равна первой матрице умноженной на вторую. А теперь у меня 2 вопроса 1-ый как из дробного числа к примеру 1.5f получить 2 числа 1.0f и 0.5f и 2-ой вопрос будет ли это вообще работать?

#62
11:12, 29 июня 2011

kroonk
1. Вроде есть функции получения целой части
2. Хз, зависит от кривизны рук. ИМХО неэффективно делать вычитание при > 1.0f, лучше где то 10000.0, когда точность начинает падать. Если 1 int64 = 10000m, то координаты выходят в диапазоне 92233720368547758080km … 92233720368547758070km

И да... Пользуйся знаками препинания, читать трудно.
Правка - используй восьмибайтовый int, у обычного то диапазон порядка -2kk ... 2kk

#63
11:16, 29 июня 2011

-Eugene-
> Вроде есть функции получения целой части
а что это за функции?

#64
11:27, 29 июня 2011

http://tinyurl.com/4x9xzhh

#65
11:29, 29 июня 2011

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 (в одной системе с нами) потери точности не случится (надо проверить), иначе младшая часть и не важна для результата
Ну и то что я тебе раньше писал о нескольких циклах отрисовки

#66
11:33, 29 июня 2011

Сейчас реализовал свой способ тряска уменьшилась в 2 раза но неизвестно почему осталась.

#67
11:44, 29 июня 2011

kroonk
амортизаторы поставь ;)

#68
11:50, 29 июня 2011

У меня такое ощущение что я что-то сделал не так и забыл про это и из-за этого тряска. Иначе почему-же камера использующая координаты объекта не трясётся а сам объект трясётся?

#69
11:54, 29 июня 2011

kroonk
^_^ 

объект трясёцца !

Какие при этом координаты у камеры и у объекта который сошолл сума и трясёцца !

выложи

#70
11:57, 29 июня 2011

kroonk
гдето осталась потеря точности, ищи
Назови свою игру "Трясущийся Космос" )

#71
12:15, 29 июня 2011

Aslan
> Назови свою игру "Трясущийся Космос"
скорее трясущийся корабль ведь камера, background, планета всё спокойно.

#72
12:32, 29 июня 2011

Всё я уже не знаю что делать буду создавать игру в стиле X3 земной конфликт там сектора максимум 100 километров наверное по этому тряски и нет.

#73
12:34, 29 июня 2011

kroonk
Может у него эпилепсия ????

А  точнее: Если камера достаточно далеко от центра и  с  ней достаточно близко расположена модель , то она будет трястись.
Выше тебе написали решение проблемы (Neptune).
Просто не допускай , чтобы камера залетала далеко.

#74
13:15, 29 июня 2011

kroonk
Просто сделай вычитание координат нормально
Покажи код

Страницы: 1 2 3 4 5 6 7 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.