62 constexpr float UNIT_M4[4][4] = {
72 CLOG_ERROR(&
LOG,
"USDTransformWriter: couldn't create xformable");
76 float parent_relative_matrix[4][4];
79 float matrix_world[4][4];
80 copy_m4_m4(matrix_world, context.matrix_world);
92 mul_m4_m4m4(matrix_world, mat, context.matrix_world);
95 mul_m4_m4m4(parent_relative_matrix, context.parent_matrix_inv_world, matrix_world);
98 mul_m4_m4m4(parent_relative_matrix, context.parent_matrix_inv_world, context.matrix_world);
106 if (context.object) {
107 auto prim = xform.GetPrim();
134 if (xformOps_.is_empty()) {
137 xformOps_.append(xf.AddTranslateOp());
138 xformOps_.append(xf.AddRotateXYZOp());
139 xformOps_.append(xf.AddScaleOp());
142 xformOps_.append(xf.AddTranslateOp());
143 xformOps_.append(xf.AddOrientOp());
144 xformOps_.append(xf.AddScaleOp());
147 xformOps_.append(xf.AddTransformOp());
151 xformOps_.append(xf.AddTransformOp());
156 if (xformOps_.is_empty()) {
163 if (xformOps_.size() == 1) {
164 pxr::GfMatrix4d mat_val(xf_matrix);
167 else if (xformOps_.size() == 3) {
182 pxr::GfVec3d loc_val(loc);
185 pxr::GfVec3f rot_val(
rot);
188 pxr::GfVec3f scale_val(scale);
192 pxr::GfVec3d loc_val(loc);
195 pxr::GfQuatf quat_val(quat[0], quat[1], quat[2], quat[3]);
198 pxr::GfVec3f scale_val(scale);