在给定欧拉角的情况下,在 Blender Python 中获取定向光线上的 3D 点
Posted
技术标签:
【中文标题】在给定欧拉角的情况下,在 Blender Python 中获取定向光线上的 3D 点【英文标题】:Get 3D point on directional light ray in Blender Python given Euler angles 【发布时间】:2021-07-31 16:50:08 【问题描述】:我正在尝试在 Blender 3D 中获取太阳光的 3D 点,以便我可以使用它来指定三个 JS 中的定向光目标位置。我已经阅读了这个How to convert Euler angles to directional vector? 我无法得到它。请告诉我如何获得它。
【问题讨论】:
欢迎来到 ***。请收下tour 并阅读How do I ask a good question? 【参考方案1】:我认为这是一个很好的问题。在搅拌机中,由于单位向量从 z 轴开始(初始化时灯光指向下方),我认为您可以使用总旋转矩阵的最后一列。计算总旋转矩阵的函数为here。以下是函数的修改,它将返回光源方向上单位距离处的点:
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 Python 中获取定向光线上的 3D 点的主要内容,如果未能解决你的问题,请参考以下文章
Matlab练习——rpy2tr函数与自己实现的ZYX欧拉角的结果不同的问题
使用goroslib库,订阅ROS消息并解析,找到相关的里程计Odometry类,并成功解析消息,使用golang实现四元数到欧拉角的转换
使用goroslib库,订阅ROS消息并解析,找到相关的里程计Odometry类,并成功解析消息,使用golang实现四元数到欧拉角的转换