Как найти видовую матрицу OpenGL/DirectX?

Тема в разделе "WASM.GRAPHICS", создана пользователем LastNoob, 20 июн 2022.

  1. LastNoob

    LastNoob Member

    Публикаций:
    0
    Регистрация:
    28 янв 2018
    Сообщения:
    80
    Нашел один ресурс по теме видовых матриц, попробовал найти в другом процессе такую же видовую матрицу и запутался, не уверен, что корректно ее считываю, дальнейшем использую в функции по типу WordlToScreenPoint отсюда:
    https://github.com/remizovm/keng_esp_hack/blob/master/esp.c

    Функция возвращает 1, но результат некорректен, полагаю, что неправильно нашел видовую матрицу.
    Пробовал искать видовую матрицу по этому видео
    Судя по всему при движении вперед/назад без задействования углов камеры должны меняться 3 параметра, в случае с исследуемой программой меняются только два.

    [​IMG]

    Хотел бы поэкспериментировать на этом проекте выше.
    Как можно выловить видовую матрицу правильно, есть ли какая-то определенная функция, которая приедет к ней и какая? Пробовал внагулю искать параметры с формы примера посмотрел.

    Хотелось бы понять, как хранится видовая матрица, как на нее выйти в примере, где нет возможности увидеть значения на экране и может ли она быть другой - в градуса и тд?
    Есть ли стандартная структура, AOB scan?


    Ссылка на проект с уткой:
    http://www.songho.ca/opengl/files/OrbitCamera.zip
    --- Сообщение объединено, 20 июн 2022 ---
    все-таки на видео не совсем корректно описано, не во всех случаях если камера направлена вверх значение одного из элементов матрицы будет 1.0f, в случае, если камера не от первого лица, то ограничения величины могут быть меньше 1.0f по модулю
     
  2. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    875
    В Direct3D можно перехватить метод SetTransform интерфейса IDirect3DDevice9 для FFP. В DX10 и выше трансформации передаются непосредственно в шейдер, и как правило вычисляется уже итоговая WVP матрица. Сами трансформации (и не обязательно в виде матриц) в программах могут быть вообще в любом формате и в любом месте.
     
  3. aa_dav

    aa_dav Active Member

    Публикаций:
    0
    Регистрация:
    24 дек 2008
    Сообщения:
    462
    Да, в современных рендерах уже скоро как лет 20 добраться до матриц вида/проекции извне штука нетривиальная и для каждой программы надо копаться и корпеть отдельно.
    В OpenGL есть неплохой шанс добраться до нужного поиском вызовов функций glUniform* с матричным суффиксом, а в D3D - метода ID3D11DeviceContext::VSSetContantsBuffers. Но по каждому случаю надо разбираться отдельно с хорошим пониманием API и для чего всё это нужно и как работает.
     
  4. Sashasan

    Sashasan New Member

    Публикаций:
    0
    Регистрация:
    17 фев 2008
    Сообщения:
    23
    Адрес:
    Воронеж
    Видовая матрица это 3 вектора.xyz. Найти их через установку шейдерных констант наверное реально, только отсеять их от остальных констант довольно таки сложно, в каждой игре все индивидуально. Необязательно matViev будет установлена через вертекс шейдерные константы и не обязательно она будет одна. Также видовые матрицы могут используются в шадовмапах и прочих вычислениях. Отловить установку наверное реально в старых играх или современных, которые не используют шейдеры. В этаких играх есть функции, которые устанавливают видовую матрицу ее и отлавливать.