J'ouvre un handle sur le processus et je lis la memoire, ouep. Pour la geometrie ce sont des fichiers serveurs, generables a partir des trucs du client, avec des versions moins detaillees. ca sert pour la collision
l'interet de ce truc c'est que ca me permet de surveiller la geometrie du terrain cote serveur pendant que je joue, histoire de voir si y a des erreurs quelque part. si j'ai le temps j'ajouterai des cylindres pour symboliser les entites (j'ai deja acces a une liste avec l'ensemble des pnj/joueurs/objets) visibles a l'ecran, et eventuellement recast pour la navigation
using OpenTK;
using System;
namespace MeshViewer.Memory
{
public sealed class CGCamera_C
{
public IntPtr BaseAddress => Game.Read<IntPtr>(Game.Read<IntPtr>(0xAD7A10) + 0x80D0, true);
public float X => Game.Read<float>(BaseAddress + 0x8, true);
public float Y => Game.Read<float>(BaseAddress + 0xC, true);
public float Z => Game.Read<float>(BaseAddress + 0x10, true);
public Vector3 XYZ => new Vector3(X, Y, Z);
public Matrix3 Matrix => Game.Read<Matrix3>(BaseAddress + 0x14, true);
public float FoV => Game.Read<float>(BaseAddress + 0x38, true);
public Vector3 Up => Matrix.Row2;
public Vector3 Right => Matrix.Row1;
public Vector3 Forward => Matrix.Row0;
public Matrix4 Projection => Matrix4.CreatePerspectiveFieldOfView(FoV * 0.6f, AspectRatio, NearClip, FarClip);
public Matrix4 View => Matrix4.LookAt(XYZ, XYZ + Forward, Vector3.UnitZ);
public float AspectRatio { get; set; } = 800.0f / 600.0f;
public float NearClip { get; set; } = 0.1f; // Game.Read<float>(0xE8909C + 44); // CVar (nearClip)
public float FarClip { get; set; } = 1000.0f; // Game.Read<float>(0xE890A0 + 44); // CVar (farClip)
}
}
pour l'instant je travaille sur une vieille version du jeu, je suis pas sur de pouvoir faire quelque chose qui fonctionne a coup de pattern scanning parce que ca va etre honteusement lent sans m'injecter dans le jeu. .. dans l'ideal ca devrait pouvoir tourner sur toutes les versions
[edit] j'ai aussi beaucoup de problemes de z-fighting, je me demande si j'ai pas un probleme au niveau des draw instancies, avec des matrices de transformation en double.