在给定欧拉角的情况下,在 Blender Python 中获取定向光线上的 3D 点
Get 3D point on directional light ray in Blender Python given Euler angles
我正在尝试在 Blender 3D 中获取太阳光的 3D 点,以便我可以使用它在 Three JS 中指定定向光目标位置。我读过这个 How to convert Euler angles to directional vector? 我无法理解。请告诉我如何获得它。
我觉得这是个好问题。在 blender 中,由于单位向量从 z 轴开始(初始化时光点向下),我认为你可以使用总旋转矩阵的最后一列。给出计算总旋转矩阵的函数here。这是对函数的修改,它将 return 在光源方向上单位距离处的一个点:
def getCosinesFromEuler(roll,pitch,yaw):
Rz_yaw = np.array([
[np.cos(yaw), -np.sin(yaw), 0],
[np.sin(yaw), np.cos(yaw), 0],
[ 0, 0, 1]])
Ry_pitch = np.array([
[ np.cos(pitch), 0, np.sin(pitch)],
[ 0, 1, 0],
[-np.sin(pitch), 0, np.cos(pitch)]])
Rx_roll = np.array([
[1, 0, 0],
[0, np.cos(roll), -np.sin(roll)],
[0, np.sin(roll), np.cos(roll)]])
rotMat = Rz_yaw @ Ry_pitch @ Rx_roll
return rotMat @ np.array([0,0,1])
也可以这样称呼:
# assuming ob is the light object
roll = ob.rotation_euler.x
pitch = ob.rotation_euler.y
yaw = ob.rotation_euler.z
x,y,z = getCosinesFromEuler(roll,pitch,yaw)
而这个点(x,y,z)需要从光源物体的位置减去,得到射线上单位距离的点
我正在尝试在 Blender 3D 中获取太阳光的 3D 点,以便我可以使用它在 Three JS 中指定定向光目标位置。我读过这个 How to convert Euler angles to directional vector? 我无法理解。请告诉我如何获得它。
我觉得这是个好问题。在 blender 中,由于单位向量从 z 轴开始(初始化时光点向下),我认为你可以使用总旋转矩阵的最后一列。给出计算总旋转矩阵的函数here。这是对函数的修改,它将 return 在光源方向上单位距离处的一个点:
def getCosinesFromEuler(roll,pitch,yaw):
Rz_yaw = np.array([
[np.cos(yaw), -np.sin(yaw), 0],
[np.sin(yaw), np.cos(yaw), 0],
[ 0, 0, 1]])
Ry_pitch = np.array([
[ np.cos(pitch), 0, np.sin(pitch)],
[ 0, 1, 0],
[-np.sin(pitch), 0, np.cos(pitch)]])
Rx_roll = np.array([
[1, 0, 0],
[0, np.cos(roll), -np.sin(roll)],
[0, np.sin(roll), np.cos(roll)]])
rotMat = Rz_yaw @ Ry_pitch @ Rx_roll
return rotMat @ np.array([0,0,1])
也可以这样称呼:
# assuming ob is the light object
roll = ob.rotation_euler.x
pitch = ob.rotation_euler.y
yaw = ob.rotation_euler.z
x,y,z = getCosinesFromEuler(roll,pitch,yaw)
而这个点(x,y,z)需要从光源物体的位置减去,得到射线上单位距离的点