Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.07.13;
Скачать: CL | DM;

Вниз

Изменение камеры и т.д.   Найти похожие ветки 

 
MovieMaker   (2008-05-18 17:53) [0]

Вот что интересно. Возможно ли какимто боком "влезть" в игру и там поменять отдалить допустим камеру изменить угол  и т.д? Если там движек использует например Direct3D


 
Renegat   (2008-05-18 19:02) [1]

ДвижОк там может использовать хоть DX, хоть OGL, хоть даже GDI. Всё дело в том, что без реверсирования программы ты ниразу не поймёшь где что можно изменить, чтобы поуправлять двигом извне. Вывод: OllyDBG в руки и вперёд.


 
MovieMaker   (2008-05-19 01:26) [2]

че ток так??
Ведь вообще поидеи если игрушка 3D, то еслиб разработчик хотел мог крутить камеру у себя как хочет.
Как представляю себе это я. Камера передвигается ведь не просто так. А выполняется какаято функция типа MoveCam(x,y,z,angel1,angel2) или это както по другому делается? И можно перехватить эту функцию, сплайсингом там, и менять на что нам нада? или я совсем не так думаю?
Вот как это все устроено? в конечном ведь итоге за положение камеры отвечает "Драйвер"(хоть DX, хоть OGL, хоть даже GDI) и там гдето есть функция.. определяющая её положение?

Нужно это все для студии создания ВидеоРоликов к Играм.. еслиб можно было изменять положение камеры...цены бы этому не было. Далеко не в каждой топовой игре есть чето типа HLTV, хотя даже к ней придумали расширение для смещение камеры.


 
Германн ©   (2008-05-19 02:11) [3]


> MovieMaker   (19.05.08 01:26) [2]
>
> че ток так??
> Ведь вообще поидеи если игрушка 3D, то еслиб разработчик
> хотел мог крутить камеру у себя как хочет.

Разработчик явно говорил не на таком языке.


 
Renegat   (2008-05-19 09:14) [4]

> выполняется какаято функция типа MoveCam(x,y,z,angle1,angle2)

Так-то оно так. Только вот каким образом ты без полной отладки екзешника игры (и плюс её многокилометровых библиотек!) собираешься понять, где она расположена и каков формат её вызова?


 
МистерТ   (2008-05-19 12:42) [5]

"Драйвер"(хоть DX, хоть OGL) получает только одну команду, "установить матрицу трансформации". Причем функция одна и для перемещения объекта (персонаж, NPC и т.п.) и для камеры, различаются только параметры. Эти параметры задаются "движком" и не факт, что у него на камеру заведен отдельный класс или функция.


 
@!!ex ©   (2008-05-19 16:00) [6]

> [0] MovieMaker   (18.05.08 17:53)

Не подвигаешь камеру  из вне. Игру переписать проще, чем в машкодах найти устаноку камеры.


 
Sapersky   (2008-05-19 16:30) [7]

В принципе можно, перехватывая функцию установки видовой/проекционной матрицы (IDirect3DDevice.SetTransform). Пробовал делать таким образом "снайперский прицел" в любой игре - но выяснилось, что хотя картинка и приближается, управление оказывается слишком дискретным. Перехватывать ещё и DirectInput было совсем уж лениво - на этом всё и закончилось.

Опять же, при махинациях с камерой практически неизбежно начинают глючить механизмы игровых движков, непосредственно не связанные с API - расчёт видимой области, выбор LOD"ов для моделей и т.п. С какой-то конкретной игрой может и повезти - если она не хранит отдельно все матрицы, а при необходимости получает их через GetTransform. Но чаще, AFAIK, хранят отдельно.


 
Style ©   (2008-05-19 16:34) [8]


> MovieMaker   (18.05.08 17:53)


Читер чтоля?

Прикольно конечно, я всегда мечтал в контру играть на 2х мониторах, чтобы во втором задний вид отображался.

А так в целом - брось ты эту затею, плохо это все - не честно )


 
@!!ex ©   (2008-05-19 16:35) [9]

> В принципе можно, перехватывая функцию установки видовой/проекционной
> матрицы (IDirect3DDevice.SetTransform).

У мну камера через мировую матрицу выставляется...
Так что не так то просто найти универсальное решение. да и для одной игры - тоже не просто.


 
MovieMaker   (2008-05-27 15:17) [10]

Серию видеороликов делать нада будет в скором времени для гонок типа NFS ну и там разных еще.
Sapersky а исходников не осталося?? оч...нада мб докручу чего..(


 
@!!ex ©   (2008-05-27 20:11) [11]

> [10] MovieMaker   (27.05.08 15:17)
> Серию видеороликов делать нада будет в скором времени для
> гонок типа NFS ну и там разных еще.

Круче и качественней будет сделать ролик в том же Максе или Блендере.


 
MovieMaker   (2008-05-29 02:49) [12]

Моделлеры наши делают и в Максе и в Майе... дело не в этом. КонтрСтрайк можно полностью все модели собрать сцену. А вот как с другими быть..


 
Sapersky   (2008-05-29 11:15) [13]

Делалось на основе примера к библиотеке madCodeHook, вроде бы HookDirect3D он назывался.
Но для создания роликов этот метод плохо подходит. Даже при относительно невинном подкручивании "фокусного расстояния" камеры в Ил-2 лезли неслабые артефакты, связанные (как уже говорилось в [7]) с тем, что игра не "чувствует" изменение параметров камеры. Положение/направление камеры с учётом [9], возможно, вообще не получится изменить.
ИМХО, лучше смотреть в сторону [не]официальных инструментов для модифицирования игры. Пресловутое "расширение для смещение камеры HLTV" наверняка с помощью таких инструментов сделано, а не перехватом API.


 
ds   (2008-05-29 11:17) [14]

перехватывать SetTransform не поможет. В любой более-менее современной игре используются шейдеры.


 
Renegat   (2008-05-29 11:29) [15]

Более того, из-за отсечения по пирамиде видимости, там куда мы "неофициальными методами" развернули камеру, может вообще ничего не отрисоваться :)


 
ds   (2008-05-29 11:53) [16]

Точно, об этом я не подумал)) View frustum, окклюдеры, порталы, и бог знает
какие технологии. Нет, если уж менять насильно, то только подменив сам код класса камеры. Или можно "насильно" перемещать персонажа. В любом случае не зная устройство всей системы может что-то выйти только в самых примитивных играх


 
Sapersky   (2008-05-29 12:11) [17]

перехватывать SetTransform не поможет. В любой более-менее современной игре используются шейдеры.

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


 
@!!ex ©   (2008-05-29 18:36) [18]

> [14] ds   (29.05.08 11:17)
> перехватывать SetTransform не поможет. В любой более-менее
> современной игре используются шейдеры.

И как это связано?
ИМХо вы бредите.


> [17] Sapersky   (29.05.08 12:11)
> перехватывать SetTransform не поможет. В любой более-менее
> современной игре используются шейдеры.
>
> Да, это не учёл, т.к. вертексными шейдерами не занимался
> и думал, что матрицы им передаются через SetTransform.

Они и передаются. Что в GL что в DX. шейдер - это замена стандартного конвейера, и работает она как стандартный конвеер.
Да, можно нспиать шейдер, который будет стандартные матрицы игнорировать. Но я никогда в жизни не видел, чтобы так делали. Ибо это просто глупо и нафиг не надо.


 
Sapersky   (2008-06-02 16:32) [19]

Посмотрел примеры из DX SDK - в DX8 матрицы передаются через константные регистры (SetVertexShaderConstant), в DX9 через интерфейс эффектов, что-то вроде:
g_pEffect.SetMatrix("g_mWorldViewProjection", mWorldViewProjection);
Работает это, скорее всего, через те же SetVertexShaderConstant, т.к. имена не фиксированные, если их поменять в шейдере и программе - всё нормально работает. SetTransform в примерах либо вообще нет, либо есть, но можно безболезненно отключить. При попытке его перехватить - ошибка.
Опять же, в документации по DX8-шейдерам нет такого понятия, как "стандартные матрицы". Только константные (+временные, адресные) регистры, данные вершины, выходные регистры.



Страницы: 1 вся ветка

Текущий архив: 2008.07.13;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.012 c
15-1211959878
Azize
2008-05-28 11:31
2008.07.13
Веб-сайты, которые изменили мир. Топ-15


2-1213435120
Kaer
2008-06-14 13:18
2008.07.13
Как избавиться от "Out of memory"?


2-1213494964
DJ_UZer
2008-06-15 05:56
2008.07.13
SynEdit добавление текста


15-1211704704
Kostafey
2008-05-25 12:38
2008.07.13
С днем рождения ! 25 мая


15-1211874362
версия для печати
2008-05-27 11:46
2008.07.13
Замена множества компонент в проекте