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

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