Jump to content
    1. Welcome to GTAForums!

    1. GTANet.com

    1. GTA Online

      1. The Criminal Enterprises
      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. Support

    3. Suggestions

*DO NOT* SHARE MEDIA OR LINKS TO LEAKED COPYRIGHTED MATERIAL. Discussion is allowed.

Get Offset From Entity Given World Coords (general calculation)


NModds
 Share

Recommended Posts

Hi all,


I just wanted to share a general equation for implementing relative distance or offset from entity given world coords (hash: 0x2274BC1C4885E333). I thought it was as straight forward as the difference of two vectors but it's not. I put in a bunch of numbers on my screen and realized it was using a dot product of directions.

Here is my implementation:

 

 

public Vector3 RelativeDistance(Vector3 Origin, Vector3 Rotation, Vector3 Position){    Vector3 RightVector = RelativeRightVector(Rotation);    Vector3 ForwardVector = RotationToDirection(Rotation);    return new Vector3(-1 * Vector3.Dot(RightVector, (Origin - Position)), -1 * Vector3.Dot(ForwardVector, (Origin - Position)), Position.Z - Origin.Z);}public Vector3 RelativeRightVector(Vector3 Rotation)//source is from scripthookdotnet{   double num = Math.Cos(Rotation.Y * (Math.PI / 180.0));   return new Vector3((float)(Math.Cos(-Rotation.Z * (Math.PI / 180.0)) * num), (float)(Math.Sin(Rotation.Z * (Math.PI / 180.0)) * num), (float)Math.Sin(-Rotation.Y * (Math.PI / 180.0)));}public Vector3 RotationToDirection(Vector3 Rotation)//I forgot where I got this from, I had it for a long time{   float z = Rotation.Z;   float num = z * 0.0174532924f;   float x = Rotation.X;   float num2 = x * 0.0174532924f;   float num3 = Math.Abs((float)Math.Cos((double)num2));   return new Vector3   {     X = (-(float)Math.Sin(num)) * num3,     Y = (float)Math.Cos(num) * num3,     Z = (float)Math.Sin(num2)   };} 

 

 

Edited by nm710
Link to comment
Share on other sites

  • 3 years later...

Since GTAForums mangled the code, here it is again, but less mangled (and in C++, and assuming all rotations are in radians).

 

template <typename Vector3T>
Vector3T RotationToDirection(Vector3T rot) {
    auto rotZ = (rot.z);
    auto rotX = (rot.x);
    auto multXY = abs(cos(rotX));
    Vector3T v{};
    v.x = -sin(rotZ) * multXY;
    v.y = cos(rotZ) * multXY;
    v.z = sin(rotX);
    return v;
}

template <typename Vector3T>
Vector3T RelativeRightVector(Vector3T rot) {
    auto num = cos(rot.y);
    Vector3T v{};
    v.x = cos(-rot.z) * num;
    v.y = sin(rot.z) * num;
    v.z = sin(-rot.y);
    return v;
}

template <typename Vector3T>
Vector3T GetRelativeOffsetGivenWorldCoords(Vector3T position1, Vector3T position2, Vector3T rot) {
    Vector3T right = RelativeRightVector(rot);
    Vector3T forward = RotationToDirection(rot);

    Vector3T v{};
    v.x = -1 * Dot(right, (position1 - position2));
    v.y = -1 * Dot(forward, (position1 - position2));
    v.z = position2.z - position1.z;
    return v;
}


Honestly, why'd they go and delete all newlines from code blocks?

Edited by ikt
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.