Форум: "Прочее";
Текущий архив: 2008.07.13;
Скачать: [xml.tar.bz2];
ВнизИзменение камеры и т.д. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.007 c