def prender(self, obj, va, col, bright): """Render the obj and its images in bounded 3D space.""" self.prog['rot'].write( matrix44.create_from_matrix33(obj.rot, dtype=np.float32)) self.prog['pos'].write(obj.pos) self.prog['color'].write(color(col, bright)) va.render(moderngl.TRIANGLES)
def draw(self, time, frametime, target): # Enable depth testing and face fulling self.ctx.disable(moderngl.DEPTH_TEST | moderngl.CULL_FACE) cam_mat = self.sys_camera.view_matrix # Skybox sky_matrix = matrix44.create_from_matrix33( matrix33.create_from_matrix44(cam_mat)) self.sky_shader['m_mv'].write(sky_matrix.astype('f4').tobytes()) self.sky_sphere.render(self.sky_shader) self.ctx.enable(moderngl.DEPTH_TEST | moderngl.CULL_FACE) # Sun position self.sun_pos = cam_mat[3][0:3].astype('f4') # Sun self.sun_shader['m_mv'].write( self.sys_camera.view_matrix.astype('f4').tobytes()) self.sun_shader['m_proj'].write(self.projection_bytes) self.sun_shader['time'].value = time self.sun_shader['texture0'].value = 1 self.sun_texture.use(location=1) self.sun_sphere.render(self.sun_shader) # Earth self.earth.draw(time, frametime, target)
def test_create_from_matrix33(self): mat = np.array([[1., 2., 3.], [3., 4., 5.], [6., 7., 8.]]) result = matrix44.create_from_matrix33(mat) np.testing.assert_almost_equal(result[:3, :3], mat, decimal=5) orig = mat.copy() mat[0, 0] = 2. np.testing.assert_almost_equal(result[:3, :3], orig, decimal=5)
def test_multiply(self): m1 = Matrix44(np.arange(self._size)) m2 = Matrix44(np.arange(self._size)[::-1]) m = m1 * m2 self.assertTrue(np.array_equal(m, matrix44.multiply(m1, m2))) m1 = Matrix44(np.arange(self._size)) m2 = Matrix33(np.arange(9)) m = m1 * m2 self.assertTrue(np.array_equal(m, matrix44.multiply(m1, matrix44.create_from_matrix33(m2))))
def test_create_from_matrix33( self ): mat = matrix33.create_identity() result = matrix44.create_from_matrix33( mat ) expected = numpy.eye( 4 ) self.assertTrue( numpy.array_equal( result, expected ), "Matrix44 create_from_matrix33 incorrect" )
def test_multiply(self): m1 = Matrix44(np.arange(self._size)) m2 = Matrix44(np.arange(self._size)[::-1]) m = m1 * m2 self.assertTrue(np.array_equal(m, matrix44.multiply(m2, m1))) m1 = Matrix44(np.arange(self._size)) m2 = Matrix33(np.arange(9)) m = m1 * m2 self.assertTrue(np.array_equal(m, matrix44.multiply(matrix44.create_from_matrix33(m2), m1)))
def test_create_from_matrix33( self ): mat = np.array([ [1.,2.,3.], [3.,4.,5.], [6.,7.,8.] ]) result = matrix44.create_from_matrix33(mat) np.testing.assert_almost_equal(result[:3,:3], mat, decimal=5) orig = mat.copy() mat[0,0] = 2. np.testing.assert_almost_equal(result[:3,:3], orig, decimal=5)
def render(self, time=0, frametime=0, projection=None, modelview=None, target=None): self.ctx.enable_only(moderngl.NOTHING) sky_matrix = matrix44.create_from_matrix33( matrix33.create_from_matrix44(modelview)) self.prog['m_mv'].write(sky_matrix.astype('f4').tobytes()) self.prog['m_proj'].write(projection) self.texture.use(0) self.prog['intensity'] = self.track_intensity.time_value(time) self.sphere.render(self.prog)
def prep(self, shader, aspect_ratio, scale_val=None, angle=90.0): self.shader = shader self.shader.use() if scale_val: self.scale = scale_val view = matrix44.create_from_translation(Vector3(DEFAULT_VIEW)) self.shader.set_mat4('view', view) projection = matrix44.create_perspective_projection_matrix( angle, aspect_ratio, PROJECTION_NEAR, PROJECTION_FAR) self.shader.set_mat4('projection', projection) scale = matrix33.create_from_scale( Vector3([self.scale, self.scale, self.scale])) scale = matrix44.create_from_matrix33(scale) self.shader.set_mat4('scale', scale)
def test_matrix44(self): m1 = Matrix33.identity() * Matrix33.from_x_rotation(0.5) m = m1.matrix44 self.assertTrue(np.array_equal(m, matrix44.create_from_matrix33(m1)))