I wanted to do it for long 
I'm very glad you finally did it — yourself. It means there are two OpenGL developers in this project — you and me, rather than me alone.

That was a pragmatic decision of my own.
I can hardly believe this. I lost my peace of mind, my rest, and my sleep. I do not know how I can carry on programming in C++. From my point of view as a compiler developer, this is an obvious compiler or probably C++ FPU math specification bug that must have been revealed years, if not decades, ago.
Is this the first time in your C++ practice that you encounter this particular kind of bug and use this very tactics to correct it?
We must compute the exact individual mesh centerpoint, based on the rotation axis being used.
We can't use the centerpoint computed by CalcMeshBounds.
No, this is not so. It is
your code that yields illogical results, not mine — and I can prove it. Recalculation of AABB or sphere center point on the fly is ridiculous and never done. The tactics used in calcMeshBounds() is industry standard and may not be questioned. Please read further below.
Perhaps the problem is because we are using pointers ... code optimization performed by the compiler
No, it works in the exact same way with all project-wide and file-specific optimizations switched off. Moreover, it works the same also in Intel C++ compiler.
(yes Patrice, the ObjReader solution can be recompiled as-is in the most recent Intel System Studio)Because negate failed...
No, it does not fail. It does exactly what it is supposed to do.
Use zTrace() to check the values of
pMesh->centerPoint[0] and
rx in the Corsair model.
(Y also fails while Z is correct, which results in visible eccentricity of the propeller)pMesh->centerPoint[0] is
-0.000127, and -pMesh->centerPoint[0] yields 0.000127
as expected.
rx = pMesh->centerPoint[0] > 0.0f ? -1.0f : 1.0f yields rx = 1.000000 and leads to non-reversal of the pMesh->centerPoint[0] sign, which is logically, trigonometrically, and spatially
incorrect. In order to work as it "works", there must be a matching mirror bug somewhere that writes the center point X value into pMesh->centerPoint[0] selectively with a
wrong sign.
Or such a situation may also occur if the [0,0,0] and pMesh->centerPoint[0,1,2] are in fact given in different coordinate systems, and pMesh->centerPoint should first be e.g. multiplied by the inverse modelview matrix prior to sign reversal, whereby your
> ? : and
* +/- 1.0f actually emulates such matrix multiplication.
This is why I was, and still am, asking you: where did you get that hack from? One must be very, very smart indeed to take such a "pragmatic decision" by intuition having very little practical OpenGL background...