Ejemplo n.º 1
0
 def test_ComputeCorners(self):
     f = Gf.Frustum()
     f.projectionType = f.Orthographic
     f.Transform(Gf.Matrix4d(Gf.Vec4d(3, 2, 1, 1)))
     corners = f.ComputeCorners()
     self.assertEqual(corners[0], Gf.Vec3d(-3, -2, -1))
     self.assertEqual(corners[1], Gf.Vec3d(3, -2, -1))
     self.assertEqual(corners[2], Gf.Vec3d(-3, 2, -1))
     self.assertEqual(corners[3], Gf.Vec3d(3, 2, -1))
     self.assertEqual(corners[4], Gf.Vec3d(-3, -2, -10))
     self.assertEqual(corners[5], Gf.Vec3d(3, -2, -10))
     self.assertEqual(corners[6], Gf.Vec3d(-3, 2, -10))
     self.assertEqual(corners[7], Gf.Vec3d(3, 2, -10))
Ejemplo n.º 2
0
    def test_Serialization(self):
        f = Gf.Frustum(Gf.Vec3d(3, 4, 5),
                       Gf.Rotation((1, 2, 3), 40),
                       Gf.Range2d(Gf.Vec2d(-0.2, -0.3), Gf.Vec2d(0.2, 0.33)),
                       Gf.Range1d(10, 100),
                       Gf.Frustum.Perspective,
                       viewDistance=20)

        f2 = eval(repr(f))

        f3 = Gf.Frustum(rotation=Gf.Rotation((1, 2, 3), 40),
                        nearFar=Gf.Range1d(10, 100),
                        projectionType=Gf.Frustum.Perspective,
                        position=Gf.Vec3d(3, 4, 5),
                        viewDistance=20,
                        window=Gf.Range2d(Gf.Vec2d(-0.2, -0.3),
                                          Gf.Vec2d(0.2, 0.33)))

        self.assertAlmostEqual(f, f2)
        self.assertAlmostEqual(f, f3)
        self.assertAlmostEqual(f.viewDistance, 20.0)
        self.assertAlmostEqual(f2.viewDistance, 20.0)
Ejemplo n.º 3
0
    def test_ConformFrustum(self):
        frustum = Gf.Frustum()
        frustum.window = Gf.Range2d(Gf.Vec2d(-1.2, -1.0), Gf.Vec2d(1.0, 1.5))

        CameraUtil.ConformWindow(frustum, CameraUtil.Crop, 1.3333)

        self._IsClose(frustum.window.min, Gf.Vec2d(-1.2, -0.575020625515638))
        self._IsClose(frustum.window.max, Gf.Vec2d(1.0, 1.075020625515638))

        frustum.window = Gf.Range2d(Gf.Vec2d(-1.2, -1.0), Gf.Vec2d(1.0, 1.5))
        CameraUtil.ConformWindow(frustum, CameraUtil.DontConform, 1.3333)
        self._IsClose(frustum.window.min, Gf.Vec2d(-1.2, -1.0))
        self._IsClose(frustum.window.max, Gf.Vec2d(1.0, 1.5))
Ejemplo n.º 4
0
    def test_Projection(self):
        f = Gf.Frustum()
        f.SetPerspective(10, True, 20, 30, 40)
        self.assertEqual(f.GetPerspective(True), (10, 20, 30, 40))
        self.assertEqual(f.GetFOV(True), 10)
        f.SetPerspective(10, False, 20, 30, 40)
        self.assertEqual(f.GetPerspective(False), (10, 20, 30, 40))
        self.assertEqual(f.GetFOV(False), 10)
        self.assertEqual(f.GetFOV(), 10)
        f = Gf.Frustum()
        f.projectionType = f.Orthographic
        self.assertIsNone(f.GetPerspective(True))
        self.assertEqual(f.GetFOV(True), 0.0)
        self.assertEqual(f.GetFOV(False), 0.0)

        self.assertEqual(Gf.Frustum.GetReferencePlaneDepth(), 1.0)

        f.SetOrthographic(10, 20, 30, 40, 50, 60)
        self.assertEqual(f.GetOrthographic(), (10, 20, 30, 40, 50, 60))
        self.assertEqual(f.GetFOV(), 0.0)
        f = Gf.Frustum()
        f.projectionType = f.Perspective
        self.assertEqual(len(f.GetOrthographic()), 0)
Ejemplo n.º 5
0
    def test_ConstructFromMatrix(self):
        m = Gf.Matrix4d(0.9987016645043332, -0.035803686178599,
                        -0.036236464677155, 0.0, 0.0362364646771555,
                        0.999278702502407, 0.011357524061459, 0.0,
                        0.0358036861785999, -0.012655859557126,
                        0.999278702502407, 0.0, 3.0, -6.0, 5.0, 1.0)

        f = Gf.Frustum(m, Gf.Range2d(Gf.Vec2d(-0.22,
                                              -0.2), Gf.Vec2d(0.2, 0.33)),
                       Gf.Range1d(20, 90), Gf.Frustum.Perspective)

        f = Gf.Frustum(m, Gf.Range2d(Gf.Vec2d(-0.22,
                                              -0.2), Gf.Vec2d(0.2, 0.33)),
                       Gf.Range1d(20, 90), Gf.Frustum.Perspective)

        corners = f.ComputeCorners()
        results = (Gf.Vec3d(-2.255306906099, -9.58646139968125,
                            -14.8715637017144),
                   Gf.Vec3d(6.133787075736, -9.88721236358150,
                            -15.1759500050026),
                   Gf.Vec3d(-1.871200380521, 1.00589284684426,
                            -14.7511739466630),
                   Gf.Vec3d(6.517893601314, 0.70514188294401,
                            -15.0555602499511),
                   Gf.Vec3d(-20.648881077448, -22.13907629856565,
                            -84.4220366577152),
                   Gf.Vec3d(17.102041840815, -23.49245563611677,
                            -85.7917750225117),
                   Gf.Vec3d(-18.920401712348, 25.52651781079917,
                            -83.8802827599836),
                   Gf.Vec3d(18.830521205915, 24.17313847324806,
                            -85.2500211247801))

        self.assertEqual(len(corners), len(results))
        for i in range(len(results)):
            self.assertTrue(Gf.IsClose(corners[i], results[i], 0.0001))
Ejemplo n.º 6
0
    def test_ComputeNarrowedFrustum(self):
        f = Gf.Frustum()
        f.projectionType = f.Orthographic
        f.Transform(Gf.Matrix4d(Gf.Vec4d(3,2,1,1)))
        narrowF = f.ComputeNarrowedFrustum(Gf.Vec2d(0, 0), Gf.Vec2d(0.1, 0.1))
        self.assertTrue(Gf.IsClose(narrowF.window.min, Gf.Vec2d(-0.3, -0.2), 0.0001))
        self.assertTrue(Gf.IsClose(narrowF.window.max, Gf.Vec2d(0.3, 0.2), 0.0001))

        narrowF = f.ComputeNarrowedFrustum(Gf.Vec3d(0, 0, -1), Gf.Vec2d(0.1, 0.1))
        self.assertTrue(Gf.IsClose(narrowF.window.min, Gf.Vec2d(-0.3, -0.2), 0.0001))
        self.assertTrue(Gf.IsClose(narrowF.window.max, Gf.Vec2d(0.3, 0.2), 0.0001))

        # Given a point behind the eye should get the same frustum back
        narrowF = f.ComputeNarrowedFrustum(Gf.Vec3d(0, 0, 1), Gf.Vec2d(0.1, 0.1))
        self.assertTrue(Gf.IsClose(narrowF.window.min, Gf.Vec2d(-3.0,-2.0), 0.0001))
        self.assertTrue(Gf.IsClose(narrowF.window.max, Gf.Vec2d(3.0,2.0), 0.0001))
Ejemplo n.º 7
0
    def test_Properties(self):
        f = Gf.Frustum()
        f.position = Gf.Vec3d(1, 2, 3)
        self.assertEqual(f.position, Gf.Vec3d(1, 2, 3))

        f.rotation = Gf.Rotation(Gf.Vec3d(1, 1, 1), 30)
        self.assertEqual(f.rotation, Gf.Rotation(Gf.Vec3d(1, 1, 1), 30))

        f.window = Gf.Range2d(Gf.Vec2d(0, 1), Gf.Vec2d(2, 3))
        self.assertEqual(f.window, Gf.Range2d(Gf.Vec2d(0, 1), Gf.Vec2d(2, 3)))

        f.nearFar = Gf.Range1d(1, 2)
        self.assertEqual(f.nearFar, Gf.Range1d(1, 2))

        f.viewDistance = 10
        self.assertEqual(f.viewDistance, 10)

        f.projectionType = Gf.Frustum.Orthographic
        self.assertEqual(f.projectionType, Gf.Frustum.Orthographic)
        f.projectionType = Gf.Frustum.Perspective
        self.assertEqual(f.projectionType, Gf.Frustum.Perspective)
Ejemplo n.º 8
0
    def test_ComputePickRay(self):
        f = Gf.Frustum()
        f.window = Gf.Range2d(Gf.Vec2d(3, 3), Gf.Vec2d(4, 4))
        f.ComputeNarrowedFrustum(Gf.Vec2d(3, 3), Gf.Vec2d(100, 100))

        r = Gf.Frustum().ComputePickRay(Gf.Vec2d(2, 2))
        self.assertTrue(
            Gf.IsClose(r.startPoint, Gf.Vec3d(2. / 3, 2. / 3, -1. / 3),
                       0.00001))
        self.assertTrue(
            Gf.IsClose(r.direction, Gf.Vec3d(2. / 3, 2. / 3, -1. / 3),
                       0.00001))

        f = Gf.Frustum()
        f.projectionType = f.Orthographic
        r = f.ComputePickRay(Gf.Vec2d(2, 2))
        self.assertTrue(Gf.IsClose(r.startPoint, Gf.Vec3d(2, 2, -1), 0.00001))
        self.assertTrue(Gf.IsClose(r.direction, Gf.Vec3d(0, 0, -1), 0.00001))

        r = Gf.Frustum().ComputePickRay(Gf.Vec3d(0, 0, -2))
        self.assertTrue(Gf.IsClose(r.startPoint, Gf.Vec3d(0, 0, -1), 0.00001))
        self.assertTrue(Gf.IsClose(r.direction, Gf.Vec3d(0, 0, -1), 0.00001))

        r = Gf.Frustum().ComputePickRay(Gf.Vec3d(2, 2, -1))
        self.assertTrue(
            Gf.IsClose(r.startPoint, Gf.Vec3d(2. / 3, 2. / 3, -1. / 3),
                       0.00001))
        self.assertTrue(
            Gf.IsClose(r.direction, Gf.Vec3d(2. / 3, 2. / 3, -1. / 3),
                       0.00001))

        f = Gf.Frustum()
        f.projectionType = f.Orthographic
        r = f.ComputePickRay(Gf.Vec3d(2, 2, -2))
        self.assertTrue(Gf.IsClose(r.startPoint, Gf.Vec3d(2, 2, -1), 0.00001))
        self.assertTrue(Gf.IsClose(r.direction, Gf.Vec3d(0, 0, -1), 0.00001))
Ejemplo n.º 9
0
 def test_Position(self):
     f1 = Gf.Frustum()
     f2 = Gf.Frustum()
     f1.position = Gf.Vec3d(1, 0, 0)
     f2.position = Gf.Vec3d(0, 1, 0)
     self.assertNotEqual(f1, f2)
Ejemplo n.º 10
0
 def test_Operators(self):
     f1 = Gf.Frustum()
     f2 = Gf.Frustum(f1)
     self.assertEqual(f1, f2)
Ejemplo n.º 11
0
 def test_Str(self):
     f = Gf.Frustum()
     f.projectionType = f.Perspective
     self.assertTrue(len(str(f)))
     f.projectionType = f.Orthographic
     self.assertTrue(len(str(f)))
Ejemplo n.º 12
0
    def test_EmptyFrustumIntersection(self):
        self.assertFalse(Gf.Frustum().Intersects(Gf.BBox3d()))
        self.assertTrue(Gf.Frustum().Intersects(
            Gf.BBox3d(Gf.Range3d(Gf.Vec3d(-1, -1, -1), Gf.Vec3d(1, 1, 1)))))
        self.assertTrue(Gf.Frustum().Intersects(Gf.Vec3d(0, 0, -1)))
        self.assertFalse(Gf.Frustum().Intersects(Gf.Vec3d(0, 0, 0)))

        self.assertFalse(Gf.Frustum().Intersects(Gf.Vec3d(), Gf.Vec3d(1, 1, 1),
                                                 Gf.Vec3d(0, 0, 1)))
        self.assertTrue(Gf.Frustum().Intersects(Gf.Vec3d(),
                                                Gf.Vec3d(-1, -1, -1),
                                                Gf.Vec3d(0, 0, 1)))

        self.assertFalse(Gf.Frustum().Intersects(Gf.Vec3d(0, 100, -100), \
                                        Gf.Vec3d(-100,-100,100), \
                                        Gf.Vec3d(100,-100,100)))
        self.assertTrue(Gf.Frustum().Intersects(Gf.Vec3d(0, 10, 100), \
                                    Gf.Vec3d(-100,-10,-10), \
                                    Gf.Vec3d(100,-10,-10)))
        self.assertTrue(Gf.Frustum().Intersects(Gf.Vec3d(0, 1, 1), \
                                    Gf.Vec3d(50,0,-50), \
                                    Gf.Vec3d(-50,0,-50)))

        self.assertTrue(Gf.Frustum().Intersects(Gf.Vec3d(),
                                                Gf.Vec3d(-1, -1, -1),
                                                Gf.Vec3d(0, 0, 1)))

        self.assertTrue(Gf.Frustum().Intersects(Gf.Vec3d(0, 0, 0),
                                                Gf.Vec3d(1, 1, -1)))
        self.assertTrue(Gf.Frustum().Intersects(Gf.Vec3d(-100, 0, -1),
                                                Gf.Vec3d(100, 0, -1)))
        self.assertTrue(Gf.Frustum().Intersects(Gf.Vec3d(0, 100, -1),
                                                Gf.Vec3d(0, -100, -1)))
        self.assertFalse(Gf.Frustum().Intersects(Gf.Vec3d(-100, 0, 1),
                                                 Gf.Vec3d(100, 0, -1)))
        self.assertFalse(Gf.Frustum().Intersects(Gf.Vec3d(0, 0, 0),
                                                 Gf.Vec3d(1, 1, 1)))
Ejemplo n.º 13
0
 def test_ComputeLookAtPoint(self):
     f = Gf.Frustum()
     self.assertEqual(f.ComputeLookAtPoint(), Gf.Vec3d(0, 0, -5))
     f.projectionType = f.Orthographic
     self.assertEqual(f.ComputeLookAtPoint(), Gf.Vec3d(0, 0, -5))
Ejemplo n.º 14
0
 def test_ComputeViewFrame(self):
     f = Gf.Frustum()
     (side, up, view) = f.ComputeViewFrame()
     self.assertEqual(side, Gf.Vec3d(1, 0, 0))
     self.assertEqual(up, Gf.Vec3d(0, 1, 0))
     self.assertEqual(view, Gf.Vec3d(0, 0, -1))