Quantcast
Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
    1. Welcome to GTAForums!

    2. News

    1. Red Dead Redemption 2

    1. GTA Online

      1. After Hours
      2. Find Lobbies & Players
      3. Guides & Strategies
      4. Vehicles
      5. Content Creator
      6. Help & Support
    2. Crews

      1. Events
      2. Recruitment
    1. Grand Theft Auto Series

    2. GTA Next

    3. GTA V

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

      1. Episodes from Liberty City
      2. Multiplayer
      3. Guides & Strategies
      4. Help & Support
      5. GTA Mods
    5. GTA Chinatown Wars

    6. GTA Vice City Stories

    7. GTA Liberty City Stories

    8. GTA San Andreas

      1. Guides & Strategies
      2. Help & Support
      3. GTA Mods
    9. GTA Vice City

      1. Guides & Strategies
      2. Help & Support
      3. GTA Mods
    10. GTA III

      1. Guides & Strategies
      2. Help & Support
      3. GTA Mods
    11. Top Down Games

      1. GTA Advance
      2. GTA 2
      3. GTA
    12. Wiki

      1. Merchandising
    1. GTA Modding

      1. GTA V
      2. GTA IV
      3. GTA III, VC & SA
      4. Tutorials
    2. Mod Showroom

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

      1. DYOM
      2. OpenIV
      3. GTA: Underground
      4. GTA: Liberty City
      5. GTA: State of Liberty
    1. Red Dead Redemption

    2. Rockstar Games

    1. Off-Topic

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

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

    2. Site Suggestions

Sign in to follow this  
HeresOtis

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

Recommended Posts

HeresOtis

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

Share this post


Link to post
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

Share this post


Link to post
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
Sign in to follow this  

×

Important Information

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