Jump to content
    1. Welcome to GTAForums!

    1. GTANet.com

    1. GTA Online

      1. Los Santos Drug Wars
      2. Updates
      3. Find Lobbies & Players
      4. Guides & Strategies
      5. Vehicles
      6. Content Creator
      7. Help & Support
    2. Red Dead Online

      1. Blood Money
      2. Frontier Pursuits
      3. Find Lobbies & Outlaws
      4. Help & Support
    3. Crews

    1. Grand Theft Auto Series

      1. Bugs*
      2. St. Andrews Cathedral
    2. GTA VI

    3. GTA V

      1. Guides & Strategies
      2. Help & Support
    4. GTA IV

      1. The Lost and Damned
      2. The Ballad of Gay Tony
      3. Guides & Strategies
      4. Help & Support
    5. GTA San Andreas

      1. Classic GTA SA
      2. Guides & Strategies
      3. Help & Support
    6. GTA Vice City

      1. Classic GTA VC
      2. Guides & Strategies
      3. Help & Support
    7. GTA III

      1. Classic GTA III
      2. Guides & Strategies
      3. Help & Support
    8. Portable Games

      1. GTA Chinatown Wars
      2. GTA Vice City Stories
      3. GTA Liberty City Stories
    9. Top-Down Games

      1. GTA Advance
      2. GTA 2
      3. GTA
    1. Red Dead Redemption 2

      1. PC
      2. Help & Support
    2. Red Dead Redemption

    1. GTA Mods

      1. GTA V
      2. GTA IV
      3. GTA III, VC & SA
      4. Tutorials
    2. Red Dead Mods

      1. Documentation
    3. Mod Showroom

      1. Scripts & Plugins
      2. Maps
      3. Total Conversions
      4. Vehicles
      5. Textures
      6. Characters
      7. Tools
      8. Other
      9. Workshop
    4. Featured Mods

      1. Design Your Own Mission
      2. OpenIV
      3. GTA: Underground
      4. GTA: Liberty City
      5. GTA: State of Liberty
    1. Rockstar Games

    2. Rockstar Collectors

    1. Off-Topic

      1. General Chat
      2. Gaming
      3. Technology
      4. Movies & TV
      5. Music
      6. Sports
      7. Vehicles
    2. Expression

      1. Graphics / Visual Arts
      2. GFX Requests & Tutorials
      3. Writers' Discussion
      4. Debates & Discussion
    1. Announcements

    2. Forum Support

    3. Suggestions

[C++| Source] Camera Matrix (Right, Forward, Up, Position)


HeresOtis
 Share

Recommended Posts

I have adapted this from ScripthookDotNet source. All credits to them.

GTA V Coordinate Systemx +ve = right, -ve = left | pitchy +ve = front, -ve = behind | rollz +ve = up, -ve = down | yaw
#include <Psapi.h>uintptr_t FindPattern(const char *pattern, const char *mask){	MODULEINFO module = {};	GetModuleInformation(GetCurrentProcess(), GetModuleHandle(nullptr), &module, sizeof(MODULEINFO));	auto *address = reinterpret_cast<const char *>(module.lpBaseOfDll), *address_end = address + module.SizeOfImage;	const auto mask_length = static_cast<size_t>(strlen(mask) - 1);	for (size_t i = 0; address < address_end; address++)	{		if (*address == pattern[i] || mask[i] == '?')		{			if (mask[i + 1] == '\0')			{				return reinterpret_cast<uintptr_t>(address) - mask_length;			}			i++;		}		else		{			i = 0;		}	}	return 0;}struct Vec3{	float x, y, z;};void GetGameplayCameraVectors(){	uintptr_t address = FindPattern("\x48\x8B\xC7\xF3\x0F\x10\x0D", "xxxxxxx") - 0x1D;	address = address + *reinterpret_cast<int*>(address) + 4;	uint64_t* _gamePlayCameraAddr = reinterpret_cast<uint64_t*>(*reinterpret_cast<int*>(address + 3) + address + 7);	Vec3 right = *(Vec3*)(*_gamePlayCameraAddr + 0x1F0);		// right.x = *(float*)(*_gamePlayCameraAddr + 0x1F0);	// right.y = *(float*)(*_gamePlayCameraAddr + 0x1F4);	// right.z = *(float*)(*_gamePlayCameraAddr + 0x1F8);	Vec3 forward = *(Vec3*)(*_gamePlayCameraAddr + 0x200);	// forward.x = *(float*)(*_gamePlayCameraAddr + 0x200);	// forward.y = *(float*)(*_gamePlayCameraAddr + 0x204);	// forward.z = *(float*)(*_gamePlayCameraAddr + 0x208);	Vec3 up = *(Vec3*)(*_gamePlayCameraAddr + 0x210);	// up.x = *(float*)(*_gamePlayCameraAddr + 0x210);	// up.y = *(float*)(*_gamePlayCameraAddr + 0x214);	// up.z = *(float*)(*_gamePlayCameraAddr + 0x218);	Vec3 pos = *(Vec3*)(*_gamePlayCameraAddr + 0x220);		// pos.x = *(float*)(*_gamePlayCameraAddr + 0x220);	// pos.y = *(float*)(*_gamePlayCameraAddr + 0x224);	// pos.z = *(float*)(*_gamePlayCameraAddr + 0x228);}
Edited by HeresOtis
Link to comment
Share on other sites

unknown modder

You've turned not nice looking code I wrote in the shvdn source and made it worse.

A nicer way of doing it would be to define a matrix struct

struct alignas(0x10) vector3_t {	float x;	float y;	float z;	// float w;//probably not important};struct alignas(0x10) matrix_t {	vector3_t right;	vector3_t forward;	vector3_t up;	vector3_t position;};

then just return the pointer to that matrix. If you wanna be really smart you can define the vector3_t as a xmm register for faster operations on them

Edited by unknown modder
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • 1 User Currently Viewing
    0 members, 0 Anonymous, 1 Guest

×
×
  • Create New...

Important Information

By using GTAForums.com, you agree to our Terms of Use and Privacy Policy.