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

    1. Red Dead Redemption 2

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

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

      1. Recruitment
    2. Events

    1. GTA Online

      1. Diamond Casino & Resort
      2. DLC
      3. Find Lobbies & Players
      4. Guides & Strategies
      5. Vehicles
      6. Content Creator
      7. Help & Support
    2. Grand Theft Auto Series

    3. GTA 6

    4. GTA V

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

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

    7. GTA Vice City Stories

    8. GTA Liberty City Stories

    9. GTA San Andreas

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

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

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

      1. GTA Advance
      2. GTA 2
      3. GTA
    13. 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. 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

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.
Note: Your post will require moderator approval before it will be visible.

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  

  • 2 Users Currently Viewing
    0 members, 0 Anonymous, 2 Guests

×
×
  • Create New...

Important Information

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