def testInverse(self) : # test verified with matlab # 1,0,0,0,0,0.4, -0.4, 0 ,0 , 0.1 , 0.4 0 ,0,0,0,1 test=pyngl.Mat4(1,0,0,0,0,2,2,0,0,-0.5,2,0,0,0,0,1) test=test.inverse() result=pyngl.Mat4(1,0,0,0,0,0.4,-0.4,0,0,0.1,0.4,0,0,0,0,1) self.assertTrue(test==result)
def testAdjacentWithMat4(self) : t1=pyngl.Mat4() t2=pyngl.Mat4() t1.rotateX(45.0) t2.rotateY(35.0) test=t1.adjacent(t2) result=pyngl.Mat4(0.819152,0,-0.573577,0,0,1,0,0,0.573577,0,0.819152,0,0,0,0,1) self.assertTrue(test==result)
def testPlus(self) : t1=pyngl.Mat4() t2=pyngl.Mat4() t1.rotateX(45.0) t2.rotateY(35.0) res=t1+t2 result=pyngl.Mat4(1.81915,0,-0.573577,0,0,1.70711,0.707107,0,0.573577,-0.707107,1.52626,0,0,0,0,2) self.assertTrue(res == result)
def testMat4xMat4(self) : t1=pyngl.Mat4() t2=pyngl.Mat4() t1.rotateX(45.0) t2.rotateY(35.0) test=t2*t1 result=pyngl.Mat4(0.819152,0,-0.573577,0,0.40558,0.707107,0.579228,0,0.40558,-0.707107,0.579228,0,0,0,0,1) self.assertTrue(test == result)
def testMat4xEquals(self) : test=pyngl.Mat4() t2=pyngl.Mat4() test.rotateX(45.0) t2.rotateY(35.0) test*=t2 result=pyngl.Mat4(0.819152,0.40558,-0.40558,0,0,0.707107,0.707107,0,0.573577,-0.579228,0.579228,0,0,0,0,1) self.assertTrue(test == result)
def testSetUniform(self): # note how the API changes here to be more pythonic as # we have no pass by reference here shader = pyngl.ShaderLib.instance() shaderName = 'TestUniform' self.assertTrue( shader.loadShader(shaderName, sourcedir + 'testUniformVertex.glsl', sourcedir + 'testUniformFragment.glsl', pyngl.ErrorExit.OFF)) shader.use(shaderName) shader.setUniform('testFloat', 2.25) result = shader.getUniform1f('testFloat') self.assertAlmostEqual(result, 2.25, delta=3) shader.setUniform("testVec2", 0.5, 2.0) resultVec2 = shader.getUniformVec2("testVec2") self.assertAlmostEqual(resultVec2.m_x, 0.5, delta=3) self.assertAlmostEqual(resultVec2.m_y, 2.0, delta=3) x, y = shader.getUniform2f("testVec2") self.assertAlmostEqual(resultVec2.m_x, 0.5, delta=3) self.assertAlmostEqual(resultVec2.m_y, 2.0, delta=3) shader.setUniform('testVec3', 0.5, 2.0, -22.2) resultF1, resultF2, resultF3 = shader.getUniform3f('testVec3') self.assertAlmostEqual(resultF1, 0.5, delta=3) self.assertAlmostEqual(resultF2, 2.0, delta=3) self.assertAlmostEqual(resultF3, -22.2, delta=3) resultVec3 = shader.getUniformVec3('testVec3') self.assertAlmostEqual(resultVec3.m_x, 0.5, delta=3) self.assertAlmostEqual(resultVec3.m_y, 2.0, delta=3) self.assertAlmostEqual(resultVec3.m_z, -22.2, delta=3) shader.setUniform('testVec4', 0.5, 2.0, -22.2, 1230.4) resultF1, resultF2, resultF3, resultF4 = shader.getUniform4f( 'testVec4') self.assertAlmostEqual(resultF1, 0.5, delta=3) self.assertAlmostEqual(resultF2, 2.0, delta=3) self.assertAlmostEqual(resultF3, -22.2, delta=3) self.assertAlmostEqual(resultF4, 1230.4, delta=3) resultVec4 = shader.getUniformVec4('testVec4') self.assertAlmostEqual(resultVec4.m_x, 0.5, delta=3) self.assertAlmostEqual(resultVec4.m_y, 2.0, delta=3) self.assertAlmostEqual(resultVec4.m_z, -22.2, delta=3) self.assertAlmostEqual(resultVec4.m_w, 1230.4, delta=3) shader.setUniform('testMat2', pyngl.Mat2()) result = shader.getUniformMat2('testMat2') self.assertTrue(result == pyngl.Mat2()) shader.setUniform('testMat3', pyngl.Mat3()) result = shader.getUniformMat3('testMat3') self.assertTrue(result == pyngl.Mat3()) shader.setUniform('testMat4', pyngl.Mat4()) result = shader.getUniformMat4('testMat4') self.assertTrue(result == pyngl.Mat4())
def testSetAt(self) : test=pyngl.Mat4() value=0.0 for y in range(0,4) : for x in range(0,4) : test.setAtXY(x,y,value) value+=1.0 result=pyngl.Mat4(0,4,8,12,1,5,9,13,2,6,10,14,3,7,11,15) self.assertTrue(test==result)
def testMat4xEquals2(self) : test=pyngl.Mat4() t2=pyngl.Mat4() test.rotateX(45.0) t2.rotateY(35.0) test*=t2 r=pyngl.Mat4() r.rotateX(45.0) self.assertTrue(test == (r*t2))
def testMat4xReal(self) : test=pyngl.Mat4() value=0.0 for y in range(0,4) : for x in range(0,4) : test.setAtXY(x,y,value) value+=1.0 test*=4.2 result=pyngl.Mat4(0,16.8,33.6,50.4,4.2,21,37.8,54.6,8.4,25.2,42,58.8,12.6,29.4,46.2,63) self.assertTrue(test==result)
def testOuter(self): a = pyngl.Vec4(1.0, 2.0, 3.0, 4.0) b = pyngl.Vec4(5.0, 6.0, 7.0, 8.0) outer = a.outer(b) result = pyngl.Mat4(5, 6, 7, 8, 10, 12, 14, 16, 15, 18, 21, 24, 20, 24, 28, 32) self.assertTrue(outer == result)
def Mat4xVec4(self) : t1=pyngl.Mat4() test=pyngl.Vec4(2,1,2,1) t1.rotateX(45.0) test=t1*test result=pyngl.Vec4(2,-0.707107,2.12132,1) self.assertTrue(test==result)
def Vec4xMat4(self) : t1=pyngl.Mat4() test=pyngl.Vec4(2,1,2,1) t1.rotateX(45.0) test=test*t1 result=pyngl.Vec4(2,2.12132,0.707107,1) self.assertTrue(test==result)
def testrotateX(self) : test=pyngl.Mat4() test.rotateX(45.0) result=pyngl.Mat4(1,0,0,0,0,0.707107,0.707107,0,0,-0.707107,0.707107,0,0,0,0,1) self.assertTrue(test == result)
def testScale(self) : test=pyngl.Mat4() test.scale(1.0,2.0,3.0) result=pyngl.Mat4(1,0,0,0,0,2,0,0,0,0,3,0,0,0,0,1) self.assertTrue(test == result)
def testTranspose(self) : test=pyngl.Mat4() test.translate(1,2,3) test.transpose() result=pyngl.Mat4(1,0,0,1,0,1,0,2,0,0,1,3,0,0,0,1) self.assertTrue(test == result)
def testDeterminant(self) : test=pyngl.Mat4(1,0,0,0,0,2,2,0,0,-0.5,2,0,0,0,0,1) det=test.determinant() self.assertEqual(det,5.0)
def testdefaultCtor(self): test=pyngl.Mat4() result=pyngl.Mat4(1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0) self.assertTrue( test==result)
def testIdentity(self) : test=pyngl.Mat4(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16) test.identity() result=pyngl.Mat4(1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0) self.assertTrue( test==result)
def testAdjacent(self) : test=pyngl.Mat4(1,0,0,0,0,2,2,0,0,-0.5,2,0,0,0,0,1) test=test.adjacent() result=pyngl.Mat4(5,0,0,0,0,2,0.5,0,0,-2,2,0,0,0,0,5) self.assertTrue(test==result)
def testrotateY(self) : test=pyngl.Mat4() test.rotateY(25.0) result=pyngl.Mat4(0.906308,0,-0.422618,0,0,1,0,0,0.422618,0,0.906308,0,0,0,0,1) self.assertTrue(test == result)
def testAssignOperator(self) : test=pyngl.Mat4(2.0) copy=test result=pyngl.Mat4(2,0,0,0,0,2,0,0,0,0,2,0,0,0,0,1) self.assertTrue( copy==result)
def testrotateZ(self) : test=pyngl.Mat4() test.rotateZ(-36.0) result=pyngl.Mat4(0.809017,-0.587785,0,0,0.587785,0.809017,0,0,0,0,1,0,0,0,0,1) self.assertTrue(test == result)
def testCopyCtor(self) : test=pyngl.Mat4(2.0) copy=pyngl.Mat4(test) result=pyngl.Mat4(2,0,0,0,0,2,0,0,0,0,2,0,0,0,0,1) self.assertTrue( copy==result)
def glmToNGL(self, m): return pyngl.Mat4(m[0][0], m[0][1], m[0][2], m[0][3], m[1][0], m[1][1], m[1][2], m[1][3], m[2][0], m[2][1], m[2][2], m[2][3], m[3][0], m[3][1], m[3][2], m[3][3])
def testSizeof(self): test=pyngl.Mat4() self.assertTrue( test.sizeof()==16*ctypes.sizeof(ctypes.c_float))
def testFloatCtor(self) : test=pyngl.Mat4(2.0) result=pyngl.Mat4(2,0,0,0,0,2,0,0,0,0,2,0,0,0,0,1) self.assertTrue( test==result)
def testNull(self) : test=pyngl.Mat4() test.null() result=pyngl.Mat4(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) self.assertTrue( test==result)