Python 3.x 在给定欧拉角的情况下,在混合器Python中获取平行光线上的三维点

Python 3.x 在给定欧拉角的情况下,在混合器Python中获取平行光线上的三维点,python-3.x,blender,Python 3.x,Blender,我试图在Blender 3D中获得太阳光的3D点,这样我就可以用它来指定三个JS中的平行光目标位置。我从这本书里读到了,我无法理解。请告诉我如何得到它。我认为这是一个好问题。在blender中,由于单位向量从z轴开始(初始化时灯光向下),我认为可以使用总旋转矩阵的最后一列。给出了计算总旋转矩阵的函数。以下是对函数的修改,该函数将返回光源方向单位距离处的点: def getCosinesFromEuler(横滚、俯仰、偏航): Rz_偏航=np阵列([ [np.cos(偏航),-np.sin(偏航

我试图在Blender 3D中获得太阳光的3D点,这样我就可以用它来指定三个JS中的平行光目标位置。我从这本书里读到了,我无法理解。请告诉我如何得到它。

我认为这是一个好问题。在blender中,由于单位向量从z轴开始(初始化时灯光向下),我认为可以使用总旋转矩阵的最后一列。给出了计算总旋转矩阵的函数。以下是对函数的修改,该函数将返回光源方向单位距离处的点:

def getCosinesFromEuler(横滚、俯仰、偏航):
Rz_偏航=np阵列([
[np.cos(偏航),-np.sin(偏航),0],
[np.sin(偏航),np.cos(偏航),0],
[          0,            0, 1]])
Ry_间距=np阵列([
[np.cos(螺距),0,np.sin(螺距)],
[             0, 1,             0],
[-np.sin(螺距),0,np.cos(螺距)])
Rx_roll=np.array([
[1,            0,             0],
[0,np.cos(roll),-np.sin(roll)],
[0,np.sin(滚动),np.cos(滚动)])
rotMat=Rz_偏航@Ry_俯仰@Rx_滚转
返回rotMat@np.array([0,0,1])
可以这样称呼:

#假设ob是灯光对象
滚转=ob.旋转_.x
节距=ob.旋转_.y
偏航=ob.旋转×euler.z
x、 y,z=getCosinesFromEuler(横滚、俯仰、偏航)

这一点(x,y,z)需要从光对象的位置中减去,以获得光线上单位距离处的点。

欢迎使用Stackoverflow。请拿着这本书读一读