Skip to content

Instantly share code, notes, and snippets.

@cmdr2
Created July 8, 2021 07:28
Show Gist options
  • Select an option

  • Save cmdr2/73924d11619531dacc2410eb5467cb7f to your computer and use it in GitHub Desktop.

Select an option

Save cmdr2/73924d11619531dacc2410eb5467cb7f to your computer and use it in GitHub Desktop.
3D world-to-local and local-to-world transform using Python (numpy and transforms3d)
# pip install transforms3d numpy
import transforms3d as t3d
import numpy as np
scene_transform = {"pos": [0,0,0], "rot": [0,0,0,1], "scale": [1,1,1]}
# https://forum.unity.com/threads/whats-the-math-behind-transform-transformpoint.107401/#post-709765
def local_to_world(p):
v = np.multiply(p, scene_transform["scale"])
v = t3d.quaternions.rotate_vector(v, scene_transform["rot"])
v += scene_transform["pos"]
return v
# https://forum.unity.com/threads/whats-the-math-behind-transform-transformpoint.107401/#post-709778
def world_to_local(p):
v = np.subtract(p, scene_transform["pos"])
v = np.divide(v, scene_transform["scale"])
q = t3d.quaternions.qinverse(scene_transform["rot"])
v = t3d.quaternions.rotate_vector(v, q)
return v
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment