better debugging output, clearer comments

This commit is contained in:
David Rose 2001-05-24 15:28:40 +00:00
parent 88a61bb536
commit 811dbe5dd5
1 changed files with 37 additions and 22 deletions

View File

@ -283,7 +283,7 @@ write_hprs(Datagram &datagram, const LVecBase3f *array, int length) {
#ifndef NDEBUG
if (_quality >= 104) {
// If quality level is at least 104, we don't even convert hpr at
// all.
// all. This is just for debugging.
vector_float h, p, r;
h.reserve(length);
@ -303,6 +303,7 @@ write_hprs(Datagram &datagram, const LVecBase3f *array, int length) {
}
if (_quality >= 103) {
// If quality level is 103, we convert hpr to a table of matrices.
// This is just for debugging.
vector_float
m00, m01, m02,
m10, m11, m12,
@ -354,7 +355,7 @@ write_hprs(Datagram &datagram, const LVecBase3f *array, int length) {
compose_matrix(mat, LVecBase3f(1.0, 1.0, 1.0), array[i]);
LOrientationf rot(mat);
rot.normalize();
rot.normalize(); // This may not be necessary, but let's not take chances.
if (rot.get_r() < 0) {
// Since rot == -rot, we can flip the quarternion if need be to
@ -370,26 +371,40 @@ write_hprs(Datagram &datagram, const LVecBase3f *array, int length) {
rot.set(-rot.get_r(), -rot.get_i(), -rot.get_j(), -rot.get_k());
}
// This is a debug severity, and not a warning or error, because
// (a) some small errors in hpr are usually acceptable, and (b)
// sometimes two different hpr trios actually represent the same
// rotation, e.g. (180, 0, -180) vs. (0, 0, 0).
if (mathutil_cat.is_debug()) {
#ifdef NOTIFY_DEBUG
if (mathutil_cat.is_warning()) {
LMatrix3f mat2;
rot.extract_to_matrix(mat2);
LVecBase3f scale, hpr;
bool success = decompose_matrix(mat2, scale, hpr);
nassertv(success);
if (!array[i].almost_equal(hpr, 0.001) ||
!scale.almost_equal(LVecBase3f(1.0, 1.0, 1.0), 0.001)) {
mathutil_cat.debug()
<< "Converted hpr to quaternion incorrectly!\n"
<< " Source hpr: " << array[i] << "\n"
<< " Quaternion: " << rot << "\n"
<< " Which represents: hpr " << hpr << " scale "
<< scale << "\n";
}
if (!mat.almost_equal(mat2, 0.0001)) {
LVecBase3f hpr1, hpr2;
LVecBase3f scale;
bool d1 = decompose_matrix(mat, scale, hpr1);
bool d2 = decompose_matrix(mat2, scale, hpr2);
mathutil_cat.warning()
<< "Converted hpr to quaternion incorrectly!\n"
<< " Source hpr: " << array[i];
if (d1) {
mathutil_cat.warning(false)
<< ", or " << hpr1 << "\n";
} else {
mathutil_cat.warning(false)
<< ", incorrectly converted to the non-ortho matrix:\n";
mat2.write(mathutil_cat.warning(false), 4);
}
mathutil_cat.warning(false)
<< " Quaternion: " << rot << "\n";
if (d2) {
mathutil_cat.warning(false)
<< " Which represents: hpr " << hpr2 << " scale "
<< scale << "\n";
} else {
mathutil_cat.warning(false)
<< " Which is incorrectly converted to the following non-ortho matrix:\n";
mat2.write(mathutil_cat.warning(false), 4);
}
}
}
#endif
qr.push_back(rot.get_r());
qi.push_back(rot.get_i());
@ -398,7 +413,7 @@ write_hprs(Datagram &datagram, const LVecBase3f *array, int length) {
}
// If quality is at least 102, we write all four quat components,
// instead of just the three.
// instead of just the three. This is just for debugging.
#ifndef NDEBUG
if (_quality >= 102) {
write_reals(datagram, &qr[0], length);
@ -531,7 +546,7 @@ read_hprs(DatagramIterator &di, vector_LVecBase3f &array) {
#ifndef NDEBUG
if (_quality >= 104) {
// If quality level is at least 104, we don't even convert hpr to
// quat.
// quat. This is just for debugging.
vector_float h, p, r;
bool okflag = true;
okflag =
@ -550,7 +565,7 @@ read_hprs(DatagramIterator &di, vector_LVecBase3f &array) {
}
if (_quality >= 103) {
// If quality level is 103, we read in a table of 3x3 rotation
// matrices.
// matrices. This is just for debugging.
vector_float
m00, m01, m02,
m10, m11, m12,