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

    1. GTA Online

      1. The Diamond Casino Heist
      2. Find Lobbies & Players
      3. Guides & Strategies
      4. Vehicles
      5. Content Creator
      6. Help & Support
    2. Red Dead Online

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

      1. Events
    1. Red Dead Redemption 2

      1. PC
      2. Gameplay
      3. Missions
      4. Help & Support
    2. Red Dead Redemption

    1. Grand Theft Auto Series

    2. GTA 6

    3. GTA V

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

      1. The Lost and Damned
      2. The Ballad of Gay Tony
      3. Guides & Strategies
      4. Help & Support
      5. GTA IV 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 SA Mods
    9. GTA Vice City

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

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

      1. GTA Advance
      2. GTA 2
      3. GTA
    1. GTA Mods

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

    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. DYOM
      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. 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
    3. Gangs

    1. News

    2. Forum Support

    3. 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
  • Like 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • 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.