forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Алгоритмика (http://forum.boolean.name/forumdisplay.php?f=21)
-   -   камера для гонок (http://forum.boolean.name/showthread.php?t=1829)

jimon 02.11.2006 23:43

камера для гонок
 
помогите псевдокодом :)
ну или идеи киньте
надо камера примерно как в nfs .. ну или что нить нормальное

щас update камеры работает на немного страшноватом коде
но он работает :)

Код:

irr::core::matrix4 camera_base_projection;
camera_base_projection.setTranslation(irr::core::vector3df(-4.0f,2.0f,0.0f));

NxMat34 pose = player->getGlobalPose();

const NxVec3 pos = pose.t;
const NxMat33 orient = pose.M;

irr::core::matrix4 irrMat;

orient.getColumnMajorStride4(&irrMat.M[0]);

irr::core::vector3df rot = irrMat.getRotationDegrees();

pos.get(&irrMat.M[12]);

irrMat.M[3] = irrMat.M[7] = irrMat.M[11] = 0.0f;
irrMat.M[15] = 1.0f;

irr::core::matrix4 irrMat2;

irrMat2.setRotationDegrees(rot);

irrMat2.setTranslation(irrMat.getTranslation());

irrMat2 *= camera_base_projection;

irr::core::vector3df pos_c = irrMat2.getTranslation();

irr::core::vector3df target(pose.t.x,pose.t.y,pose.t.z);

target += camera->getTarget() * 0.0005f;

camera->setPosition(pos_c);
camera->setTarget(target);

ps. матричные операции зло, запутатся нефиг делать...

alcoSHoLiK 03.11.2006 00:03

Re: камера для гонок
 
В алгоритмике нежелательно приводить как пример код на каком-либо языке программирования. Или формулы, или псевдокод - чтобы было понятно, что там у тебя происходит.

jimon 03.11.2006 00:54

Re: камера для гонок
 
ну вот слегка перевел на русский язык :)
но думаю от етого код стал еще запутанее :-)

Код:

матрица положения камеры - ставим ей трансляцию от игрока в локальных координатах

получаем матрицу игрока (physx еще)
получаем от туда положение и матрицу поворота (3 на 3)

суем матрицу поворота в буферную матрицу
суем в ету матрицу положение игрока

множим буферную матрицу на матрицу матрицу положения камеры
результат возвратим в буферную матрицу

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

ставим положение и вектор направления камере


ЛысыЙ_Чук-Иванчук 04.11.2006 21:17

Re: камера для гонок
 
Разгон камера отходит,
Тормоз камера подходит,
Поворот в право, видно правую сторону,
Поворот в лево, левую,
Даеш назад камера плавно перетекает на перед,

P.S. Как в GTA

jimon 05.11.2006 00:54

Re: камера для гонок
 
vlad
ето я и без тебя придумал :)
теперь переведи ето все в псевдокод управления матрицами ...
или вот задача - дано вектор положения игрока
надо получить вектор положения камеры, так что дерзай

Taugeshtu 21.05.2007 17:57

Re: камера для гонок
 
Не думаю, что тема ещё актуальна, но всё-таки...
Такие предложения (сразу не пинать, лучше грамотно объяснить, почему это плохая идея):
Креатим трёхмерный(или двухмерный, там по ситуациим надо смотреть) массив со, скажем, сотней ячеек в каждую сторону.

Прогоняем без рендера эту сотню циклов, каждый раз забивая в ячейку положение предмета + некоторое отклонение(чтобы когда предмет остановится, не было того, что называется "camera inside")

Номер ячейки (он и по X, и по Y один и тот же, так что есть резон юзать не трёхмерку, а три линейки) за каждый проход увеличиваем на один, если номер достиг значения 100 (я вот не помню, как я делал в блитце - сотня там, 99, может 101... завтра наверно блитц-код дам. если тема будет востребована) то обнуляем номер.

А теперь - вминание! Для того, чтобы камера таким макаром следила за обжектом, помещаем её в точку с координатами:
сам_х=х(номер+1)
сам_у=у(номер+1)
сам_z=z(номер+1)
Или для трёхмерки:
PositionEntity cam,coordinats(номер+1,номер+1,номер+1)

Вот такой трактат (-:
Теперь я буду рад услышать ваши комментарии.

HolyDel 22.05.2007 01:44

Re: камера для гонок
 
имхо плохой вариант. годиться тока для старых машин, кторые дымились при вычислении sin/cos.
вопрос не стоял в том как сдеать ету камеру.
вопрпос стоял в том, как ето сделать в матрицах, если дан вектор машины.
а надо получить проекционную матрицу, если я правильно понял.


Часовой пояс GMT +4, время: 16:11.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot