Нашел один ресурс по теме видовых матриц, попробовал найти в другом процессе такую же видовую матрицу и запутался, не уверен, что корректно ее считываю, дальнейшем использую в функции по типу WordlToScreenPoint отсюда: https://github.com/remizovm/keng_esp_hack/blob/master/esp.c Функция возвращает 1, но результат некорректен, полагаю, что неправильно нашел видовую матрицу. Пробовал искать видовую матрицу по этому видео Судя по всему при движении вперед/назад без задействования углов камеры должны меняться 3 параметра, в случае с исследуемой программой меняются только два. Хотел бы поэкспериментировать на этом проекте выше. Как можно выловить видовую матрицу правильно, есть ли какая-то определенная функция, которая приедет к ней и какая? Пробовал внагулю искать параметры с формы примера посмотрел. Хотелось бы понять, как хранится видовая матрица, как на нее выйти в примере, где нет возможности увидеть значения на экране и может ли она быть другой - в градуса и тд? Есть ли стандартная структура, AOB scan? Ссылка на проект с уткой: http://www.songho.ca/opengl/files/OrbitCamera.zip --- Сообщение объединено, 20 июн 2022 --- все-таки на видео не совсем корректно описано, не во всех случаях если камера направлена вверх значение одного из элементов матрицы будет 1.0f, в случае, если камера не от первого лица, то ограничения величины могут быть меньше 1.0f по модулю
В Direct3D можно перехватить метод SetTransform интерфейса IDirect3DDevice9 для FFP. В DX10 и выше трансформации передаются непосредственно в шейдер, и как правило вычисляется уже итоговая WVP матрица. Сами трансформации (и не обязательно в виде матриц) в программах могут быть вообще в любом формате и в любом месте.
Да, в современных рендерах уже скоро как лет 20 добраться до матриц вида/проекции извне штука нетривиальная и для каждой программы надо копаться и корпеть отдельно. В OpenGL есть неплохой шанс добраться до нужного поиском вызовов функций glUniform* с матричным суффиксом, а в D3D - метода ID3D11DeviceContext::VSSetContantsBuffers. Но по каждому случаю надо разбираться отдельно с хорошим пониманием API и для чего всё это нужно и как работает.
Видовая матрица это 3 вектора.xyz. Найти их через установку шейдерных констант наверное реально, только отсеять их от остальных констант довольно таки сложно, в каждой игре все индивидуально. Необязательно matViev будет установлена через вертекс шейдерные константы и не обязательно она будет одна. Также видовые матрицы могут используются в шадовмапах и прочих вычислениях. Отловить установку наверное реально в старых играх или современных, которые не используют шейдеры. В этаких играх есть функции, которые устанавливают видовую матрицу ее и отлавливать.