@Test(expected = ArithmeticException.class) public void testBadInvert() { final Matrix3 mat3A = new Matrix3(0, 0, 0, 0, 0, 0, 0, 0, 0); mat3A.invertLocal(); }
@Override public void computeNormalMatrix(final boolean modelIsUniformScale) { final Matrix3 normal = Matrix3.fetchTempInstance(); final FloatBuffer dst = _matrixStore.get(RenderMatrixType.Normal); dst.clear(); final Matrix4 model = Matrix4.fetchTempInstance(); final FloatBuffer modelBuff = _matrixStore.get(RenderMatrixType.Model); modelBuff.clear(); model.fromFloatBuffer(modelBuff); if (modelIsUniformScale) { // normal matrix is just the 3x3 of the model matrix model.toMatrix3(normal); } else { // normal matrix is the inverse transpose of the 3x3 model matrix model.toMatrix3(normal); try { normal.invertLocal().transposeLocal(); } catch (final ArithmeticException ex) { // silently ignore for now - non invertable } } normal.toFloatBuffer(dst); } }
newMatrix.multiplyDiagonalPost(_scale, newMatrix).invertLocal(); newMatrix.invertLocal();
newMatrix.multiplyDiagonalPost(_scale, newMatrix).invertLocal(); newMatrix.invertLocal();
@Override public ResultSample doInverse3Test(final int count, final int maxCount, final long timeOutMS) { final Matrix4 mat = a3dMatrixRandom(); final Matrix3 m1 = new Matrix3( // mat.getM00(), mat.getM01(), mat.getM02(), // mat.getM10(), mat.getM11(), mat.getM12(), // mat.getM20(), mat.getM21(), mat.getM22()); mat.setIdentity(); final long start = System.currentTimeMillis(); int loopCount = 0; while (System.currentTimeMillis() - start < timeOutMS && loopCount != maxCount) { ++loopCount; for (int i = 0; i < count; ++i) { m1.invertLocal(); } } return populateResult(System.currentTimeMillis() - start, loopCount, mat.set(m1).toArray(null)); }
@Test public void testInvert() { final Matrix3 mat3A = new Matrix3().applyRotationX(MathUtils.QUARTER_PI); final Matrix3 inverted = mat3A.invert(null); assertEquals(Matrix3.IDENTITY, mat3A.multiply(inverted, null)); assertEquals(mat3A, inverted.invertLocal()); }