#1 12-01-2010 19:09

DimP
Registered: 23-03-2009
Posts: 51

Camera rotation matrix

Скажите пожалуйста есть ли ( должна быть ) camera rotation matrix наподобие player rotation matrix, что бы также синусы, косинусы и тд?
И еще вопрос в каких единицах измеряется поворот камеры по адресам 0xB6F248 и 0xB6F258 ?

Нашел на gtaforums.com "0xB6F99C to 0xB6F9DB = Camera Matrix (0xB6F99C + 0x30 = Xpos, etc...)" написано  read only, а есть ли перезаписываемая ?

Last edited by DimP (12-01-2010 21:10)

Offline

#2 13-01-2010 04:03

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

Re: Camera rotation matrix

Матрица точно такая же (и CEntity, и CCamera наследуются от CPlaceable)
Насчет read-only - попробуй. Возможно просто имелось в виду, что в следующем кадре позиция автоматически будет скорректирована (вообще, по внутренним структурам камеры не так много информации)

Offline

#3 13-01-2010 15:45

DimP
Registered: 23-03-2009
Posts: 51

Re: Camera rotation matrix

Я попробовал, если адреса заморозить то получается эффект копирования неба, или как объяснить не знаю smile Это не то. Мне нужно как-то сдвинуть камеру, на заданный синус и косинус (или на угол) относительно мировой системы координат. Может можно использовать значения в 0xB6F248 и 0xB6F258 ? , но я не понимаю что они вообще означают sad

Все дошло что это угол в радианах smile

Last edited by DimP (14-01-2010 12:56)

Offline

#4 18-09-2010 10:19

BritishColonist
Registered: 30-09-2009
Posts: 72

Re: Camera rotation matrix

Где можно надыбать точные адреса памяти, используемые в опкодах санни билдера? Такая информация где-то вообще есть?
Хочется перенести пару скриптов на удобный мне Delphi.
Собственно, интересующие опкоды:
04C4:
86BD:

Нужны собственно адреса функций, то есть, такие, чтобы заново можно было создать эти функции в дельфях и использовать, как обычные функции дельфи (я видел, так делали и на дельфи, и на си).

Last edited by dragonforce (18-09-2010 10:22)

Offline

#5 18-09-2010 17:35

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Camera rotation matrix

Где можно надыбать точные адреса памяти, используемые в опкодах санни билдера? Такая информация где-то вообще есть?

Открываем базу в IDA, при активной вкладке "IDA View_A" жмём Search - Text и вводим то, что надо найти: opcode_04C4 (или opcode_06BD)

Last edited by Den_spb (18-09-2010 17:38)

Offline

#6 18-09-2010 18:29

Alien
Registered: 12-10-2008
Posts: 564

Re: Camera rotation matrix

Зачем Search? У всех опкодов унифицированные имена:

@@opcode_%04X

Соответственно, достаточно нажать G, ввести @@opcode_04C4 и попадешь на нужный адрес.

Offline

#7 18-09-2010 20:07

BritishColonist
Registered: 30-09-2009
Posts: 72

Re: Camera rotation matrix

Да, найти получается.
Теперь тогда ещё вопрос. В саннике используются хэндлы, т.е. переменные, могут хранить в себе игрока/машину/объект/любое значение. Подобный хэндл - просто число?
А то нужно передать теперь параметры в дельфях. Мне следует найти адрес начала струкруты этого игрока/машины/объекта?

var
  StoreActorPos: Procedure (player: dword; var x,y,z:single; _x,_y,_z: single);cdecl;
...
 var
  x,y,z : single;
  PLAYER_ACTOR: dword;
begin
  GetWindowThreadProcessId(Wnd,@PId); //внедрение в процесс игры
  PHandle:=OpenProcess(PROCESS_ALL_ACCESS,false,PId); // <- ALL_ACCESS
  @StoreActorPos:=Ptr($0048BA97); //адрес процедуры
  ReadProcessMemory(PHandle,Ptr(CPed),@PLAYER_ACTOR,4,rw); //считываем указатель на адрес структуры игрока
  ReadProcessMemory(PHandle,Ptr(PLAYER_ACTOR),@PLAYER_ACTOR,4,rw); //читаем этот адрес
  If PLAYER_ACTOR<>0 Then
   Begin
     StoreActorPos(PLAYER_ACTOR,x,y,z,0.0,0.0,0.0); // <- здесь вылет
     Edit4.Text:=Format('%8.4f %8.4f %8.4f',[x,y,z]);
   End;
  Closehandle(PHandle);
end;

AcessViolation при вызове процедуры. Разве что-то не так?

Last edited by dragonforce (18-09-2010 22:27)

Offline

#8 19-09-2010 09:59

Sw[ee]t
From: Нижний Новгород
Registered: 16-02-2009
Posts: 686
Website

Re: Camera rotation matrix

listener wrote:

Матрица точно такая же (и CEntity, и CCamera наследуются от CPlaceable)

Значит все субъекты игрового мира имеют след. иерархию:

CWorld->CPlaceable->CEntity-><класс>

Offline

#9 19-09-2010 15:57

Alien
Registered: 12-10-2008
Posts: 564

Re: Camera rotation matrix

@dragonforce - нельзя вызвать функцию чужого процесса.

@StoreActorPos:=Ptr($0048BA97); //адрес процедуры

@StoreActorPos будет указывать на нечто, находящееся в адресном пространстве твоего процесса, а не процесса игры.

Offline

#10 19-09-2010 20:05

BritishColonist
Registered: 30-09-2009
Posts: 72

Re: Camera rotation matrix

Оу. А если делать в виде asi, то можно будет вызывать функцию процесса игры?

Offline

Board footer

Powered by FluxBB