64 if (context.is_point_proto || context.is_point_instance) {
68 constexpr float UNIT_M4[4][4] = {
78 CLOG_ERROR(&
LOG,
"USDTransformWriter: couldn't create xformable");
82 float parent_relative_matrix[4][4];
85 float matrix_world[4][4];
86 copy_m4_m4(matrix_world, context.matrix_world);
98 mul_m4_m4m4(matrix_world, mat, context.matrix_world);
104 float scale_mat[4][4];
106 mul_m4_m4m4(matrix_world, scale_mat, matrix_world);
109 mul_m4_m4m4(parent_relative_matrix, context.parent_matrix_inv_world, matrix_world);
112 mul_m4_m4m4(parent_relative_matrix, context.parent_matrix_inv_world, context.matrix_world);
124 if (context.object) {
125 auto prim = xform.GetPrim();
145 const pxr::UsdGeomXformable &xf)
153 if (xformOps_.is_empty()) {
156 xformOps_.append(xf.AddTranslateOp());
157 xformOps_.append(xf.AddRotateXYZOp());
158 xformOps_.append(xf.AddScaleOp());
161 xformOps_.append(xf.AddTranslateOp());
162 xformOps_.append(xf.AddOrientOp());
163 xformOps_.append(xf.AddScaleOp());
166 xformOps_.append(xf.AddTransformOp());
170 xformOps_.append(xf.AddTransformOp());
175 if (xformOps_.is_empty()) {
182 if (xformOps_.size() == 1) {
183 pxr::GfMatrix4d mat_val(parent_relative_matrix);
186 else if (xformOps_.size() == 3) {
201 pxr::GfVec3d loc_val(loc);
204 pxr::GfVec3f rot_val(
rot);
207 pxr::GfVec3f scale_val(scale);
211 pxr::GfVec3d loc_val(loc);
214 pxr::GfQuatf quat_val(quat[0], quat[1], quat[2], quat[3]);
217 pxr::GfVec3f scale_val(scale);