三维物体模型的仿射变换矩阵
代码及演示
dev_get_window (WindowHandle)
* 创建一个3*4*5的长方体三维模型,注意是使用点云创建
X:=[0,0,3,3,0,0,3,3]
Y:=[0,4,0,4,0,4,0,4]+1
Z:=[0,0,0,0,5,5,5,5]
gen_object_model_3d_from_points (X, Y, Z, ObjectModel3D)
convex_hull_object_model_3d (ObjectModel3D, ObjectModel3DConvexHull)
* 分别沿X、Y、Z方向平移
hom_mat3d_identity (HomMat3DIdentity)
hom_mat3d_translate (HomMat3DIdentity, -4, 0, 0, HomMat3DTranslate)
affine_trans_object_model_3d (ObjectModel3DConvexHull, HomMat3DTranslate, ObjectModel3DAffineTransX)
hom_mat3d_translate (HomMat3DIdentity, 0, -5, 0, HomMat3DTranslate)
affine_trans_object_model_3d (ObjectModel3DConvexHull, HomMat3DTranslate, ObjectModel3DAffineTransY)
hom_mat3d_translate (HomMat3DIdentity, 0, 0, -6, HomMat3DTranslate)
affine_trans_object_model_3d (ObjectModel3DConvexHull, HomMat3DTranslate, ObjectModel3DAffineTransZ)
visualize_object_model_3d (WindowHandle, \
[ObjectModel3DConvexHull,ObjectModel3DAffineTransX,ObjectModel3DAffineTransY,ObjectModel3DAffineTransZ], \
[], [0,0,250,0,0,0,0], \
['disp_pose','color_0','color_1','color_2','color_3','alpha'], \
['true','green','blue','gray','red',0.7], \
[], [], [], PoseOut)
* 分别绕X、Y、Z轴旋转,px,py,pz是移动旋转轴的位置
* 例如绕Z轴旋转,如果想移动旋转轴位置,可以改变px,py,而改变pz则是没有任何作用的
hom_mat3d_identity (HomMat3DIdentity)
hom_mat3d_rotate (HomMat3DIdentity, rad(-45), 'x', 0, 0, 0, HomMat3DRotate)
affine_trans_object_model_3d (ObjectModel3DConvexHull, HomMat3DRotate, ObjectModel3DAffineTransRX)
hom_mat3d_rotate (HomMat3DIdentity, rad(90), 'y', 5, 5, 5, HomMat3DRotate)
affine_trans_object_model_3d (ObjectModel3DConvexHull, HomMat3DRotate, ObjectModel3DAffineTransRY)
hom_mat3d_rotate (HomMat3DIdentity, rad(90), 'z', 0, 2, 0, HomMat3DRotate)
affine_trans_object_model_3d (ObjectModel3DConvexHull, HomMat3DRotate, ObjectModel3DAffineTransRZ)
visualize_object_model_3d (WindowHandle, \
[ObjectModel3DConvexHull,ObjectModel3DAffineTransRX,ObjectModel3DAffineTransRY,ObjectModel3DAffineTransRZ], \
[], [0,0,250,0,0,0,0], \
['disp_pose','color_0','color_1','color_2','color_3','alpha'], \
['true','green','blue','gray','red',0.7], \
[], [], [], PoseOut)
* 缩放 SX,SY,SZ设置缩放比例,px,py,pz设置缩放中心
hom_mat3d_identity (HomMat3DIdentity)
hom_mat3d_scale (HomMat3DIdentity, 2, 2, 2, 8, 0, 0, HomMat3DScale)
affine_trans_object_model_3d (ObjectModel3DConvexHull, HomMat3DScale, ObjectModel3DAffineTransS)
visualize_object_model_3d (WindowHandle, \
[ObjectModel3DConvexHull,ObjectModel3DAffineTransS], \
[], [0,0,250,0,0,0,0], \
['disp_pose','color_0','color_1','alpha'], \
['true','green','blue',0.7], \
[], [], [], PoseOut)