public void UpdateOBB(OBBStructureMode mode) { Matrix4x4 m = transform.localToWorldMatrix; if (MathUtil.IsOnlyContainTranslation(matrix, m) && this.mode == mode) { Vector3 translation = MathUtil.GetTranslation(matrix, m); transformCenter += translation; } else { if (mode == OBBStructureMode.Eigen) { StructureOBB(mode, m); } else if (mode == OBBStructureMode.AABB) { if (this.mode != mode) { StructureOBB(mode, m); } UpdateOBB(m); } this.mode = mode; } matrix = m; }
public void UpdateOBB(OBBStructureMode mode) { Matrix4x4 m = transform.localToWorldMatrix; if (MathUtil.IsOnlyContainTranslation(matrix, m) && this.mode == mode) { Vector3 translation = MathUtil.GetTranslation(matrix, m); transformCenter += translation; } else { if (mode == OBBStructureMode.Eigen) { StructureOBB(mode, m); } else if (mode == OBBStructureMode.AABB) { if (this.mode != mode) { StructureOBB(mode, m); } for (int i = 0; i < 3; i++) { Vector3 tmp = Vector3.zero; tmp[i] = 1; axis[i] = m * tmp; } transformCenter = m * MathUtil.Vector4(center, 1); Vector3 scale; if (MathUtil.IsContainScale(m, out scale)) { for (int i = 0; i < 3; i++) { axis[i] /= scale[i]; transformRadius[i] = radius[i] * scale[i]; } } else { transformRadius = radius; } } this.mode = mode; } matrix = m; }
void StructureOBB(OBBStructureMode mode, Matrix4x4 local2world) { switch (mode) { case OBBStructureMode.Eigen: EigenOBB(local2world); break; case OBBStructureMode.AABB: AABBOBB(); break; } transformCenter = center; transformRadius = radius; }
public OBB(Transform transform, OBBStructureMode mode) { this.transform = transform; this.mode = mode; switch (mode) { case OBBStructureMode.Eigen: matrix = transform.localToWorldMatrix; break; case OBBStructureMode.AABB: matrix = Matrix4x4.identity; break; } StructureOBB(mode, matrix); }