Beispiel #1
0
    def initialize(self):

        self.setWindowTitle('Directional Light')
        self.setWindowSize(800, 800)

        self.renderer = Renderer()
        self.renderer.setViewportSize(800, 800)
        self.renderer.setClearColor(0.25, 0.25, 0.75)

        self.scene = Scene()

        self.camera = PerspectiveCamera()
        self.camera.transform.setPosition(0, 1, 7)
        self.camera.transform.lookAt(0, 0, 0)
        self.cameraControls = FirstPersonController(self.input, self.camera)

        ambientLight = AmbientLight(color=[0.1, 0.1, 0.2])
        self.scene.add(ambientLight)

        self.directionalLight = DirectionalLight(position=[2, 3, 0],
                                                 direction=[-1, -1, 0])
        self.scene.add(self.directionalLight)
        self.scene.add(DirectionalLightHelper(self.directionalLight))

        gridTexture = OpenGLUtils.initializeTexture("images/color-grid.png")
        lightMaterial = SurfaceLightMaterial(color=[1, 1, 1],
                                             texture=gridTexture)

        self.cube = Mesh(BoxGeometry(), lightMaterial)
        self.cube.transform.translate(1.5, 0, 0, Matrix.LOCAL)
        self.scene.add(self.cube)

        self.sphere = Mesh(SphereGeometry(), lightMaterial)
        self.sphere.transform.translate(-1.5, 0, 0, Matrix.LOCAL)
        self.scene.add(self.sphere)
    def initialize(self):

        self.setWindowTitle('OBJ Model Loader')
        self.setWindowSize(800, 800)

        self.renderer = Renderer()
        self.renderer.setViewportSize(800, 800)
        self.renderer.setClearColor(0.25, 0.25, 0.25)

        self.scene = Scene()

        self.camera = PerspectiveCamera()
        self.camera.transform.setPosition(0, 3, 7)
        self.camera.transform.lookAt(0, 0, 0)
        self.cameraControls = FirstPersonController(self.input, self.camera)

        ambientLight = AmbientLight(strength=0.25)
        directionalLight = DirectionalLight(direction=[-1, -1, -1])
        self.scene.add(ambientLight)
        self.scene.add(directionalLight)

        self.floorMesh = GridHelper(size=12,
                                    divisions=4,
                                    gridColor=[1, 1, 1],
                                    centerColor=[1, 0, 0])
        self.floorMesh.transform.rotateX(-3.14 / 2, Matrix.LOCAL)
        self.scene.add(self.floorMesh)

        mushroomTexture = OpenGLUtils.initializeTexture("models/mushroom.png")
        self.mushroom = Mesh(
            OBJGeometry("models/mushroom.obj", smoothNormals=True),
            SurfaceLightMaterial(texture=mushroomTexture))
        self.mushroom.transform.translate(-3, 0, 0)
        self.mushroom.transform.scaleUniform(0.8)
        self.scene.add(self.mushroom)

        fireflowerTexture = OpenGLUtils.initializeTexture(
            "models/fireflower.png")
        self.fireflower = Mesh(
            OBJGeometry("models/fireflower.obj", smoothNormals=False),
            SurfaceLightMaterial(texture=fireflowerTexture))
        self.fireflower.transform.scaleUniform(0.0005)
        self.scene.add(self.fireflower)

        starTexture = OpenGLUtils.initializeTexture("models/star.png")
        self.star = Mesh(OBJGeometry("models/star.obj", smoothNormals=False),
                         SurfaceLightMaterial(texture=starTexture))
        self.star.transform.translate(3, 0, 0)
        self.star.transform.scaleUniform(0.0005)
        self.scene.add(self.star)
    def initialize(self):

        self.setWindowTitle('Helpers')
        self.setWindowSize(800, 800)

        self.renderer = Renderer()
        self.renderer.setViewportSize(800, 800)

        self.scene = Scene()

        self.camera = PerspectiveCamera()
        self.camera.transform.setPosition(0, 1, 5)
        self.cameraControls = FirstPersonController(self.input, self.camera)

        self.scene.add(AmbientLight(strength=0.25))
        directionalLight = DirectionalLight(direction=[-1, -1, -1],
                                            position=[3, 4, -3])
        self.scene.add(directionalLight)
        self.scene.add(DirectionalLightHelper(directionalLight))

        floorMesh = GridHelper(size=10,
                               divisions=10,
                               gridColor=[0, 0, 0],
                               centerColor=[1, 0, 0])
        floorMesh.transform.rotateX(-3.14 / 2, Matrix.LOCAL)
        self.scene.add(floorMesh)

        gridTexture = OpenGLUtils.initializeTexture("images/color-grid.png")
        gridMaterial = SurfaceLambertMaterial(objTexture=gridTexture)
        self.cylinder = Mesh(
            CylinderGeometry(radiusTop=0.25, radiusBottom=1, heightSegments=6),
            gridMaterial)
        self.cylinder.transform.translate(0, 1, 0, Matrix.LOCAL)
        self.scene.add(self.cylinder)

        self.cylinder.add(AxesHelper(axisLength=2, lineWidth=4))

        self.scene.add(
            BoxHelper(self.cylinder, lineColor=[1, 1, 0], lineWidth=4))
        self.scene.add(
            VertexNormalHelper(self.cylinder,
                               lineLength=0.25,
                               lineColor=[0.5, 0.5, 1],
                               lineWidth=2))
Beispiel #4
0
    def initialize(self):

        self.setWindowTitle('Lots of Dynamically Lit Cubes')
        self.setWindowSize(800, 800)

        self.renderer = Renderer()
        self.renderer.setViewportSize(800, 800)
        self.renderer.setClearColor(0.25, 0.25, 0.25)

        # self.renderer.setFog( Fog(startDistance=2, endDistance=20, color=[0,0,0.15]) )

        self.scene = Scene()

        self.scene.add(AmbientLight(strength=0.25))
        self.scene.add(DirectionalLight(direction=[-1, -1, 0], color=[1, 0,
                                                                      0]))
        self.scene.add(DirectionalLight(direction=[1, 1, 0], color=[0, 0, 1]))

        self.camera = PerspectiveCamera()
        self.camera.transform.setPosition(0, 0, 15)
        self.camera.transform.lookAt(0, 0, 0)
        self.cameraControls = FirstPersonController(self.input, self.camera)

        self.boxList = []

        boxGeo = BoxGeometry(width=1, height=1, depth=1)
        boxTexture = OpenGLUtils.initializeTexture("images/color-grid.png")
        boxMat = SurfaceLightMaterial(texture=boxTexture)

        for i in range(100):
            box = Mesh(boxGeo, boxMat)
            box.transform.setPosition(random.uniform(-5, 5),
                                      random.uniform(-5, 5),
                                      random.uniform(10, -10))
            box.transform.rotateX(random.uniform(0, 6.28), Matrix.LOCAL)
            box.transform.rotateY(random.uniform(0, 6.28), Matrix.LOCAL)
            self.scene.add(box)
            self.boxList.append(box)
Beispiel #5
0
    def initialize(self):

        self.setWindowTitle('Shadows')
        self.setWindowSize(800,800)

        self.renderer = Renderer()
        self.renderer.setViewportSize(800,800)
        self.renderer.setClearColor(0.5,0.5,0.75)

        # to render shadows, the renderer has to do an additional pass
        #   to store depth data in a shadowmap texture;
        #   this is indicated by setting shadowMapEnabled to True.
        self.renderer.shadowMapEnabled = True
        
        self.scene = Scene() 

        self.camera = PerspectiveCamera()
        self.camera.transform.setPosition(0, 3, 5)
        self.camera.transform.lookAt(0, 1, 0)
        self.cameraControls = FirstPersonController(self.input, self.camera)

        self.scene.add( AmbientLight(strength=0.5) )
        
        # setup directional light that casts shadows
        directionalLight = DirectionalLight(position=[2,2,0], direction=[-2,-1,0])
        directionalLight.enableShadows(strength=0.5)
        # the tighter the fit on the shadow region,
        #   the better the shadow resolution will be.
        # adjust as necessary according to the contents of the scene
        directionalLight.shadowCamera.setViewRegion(
            left=-2, right=2, top=2, bottom=-2, near=10, far=0)
        self.scene.add( directionalLight )

        self.scene.add( DirectionalLightHelper(directionalLight) )
        self.scene.add( OrthographicCameraHelper(directionalLight.shadowCamera) )
        
        gridTexture  = OpenGLUtils.initializeTexture("images/color-grid.png")

        geo = QuadGeometry(width=4,height=4)
        mat = SurfaceLightMaterial(texture=gridTexture)
        
        floor = Mesh( geo, SurfaceLightMaterial(texture=gridTexture) )
        floor.transform.rotateX(-3.14/2)        
        floor.setReceiveShadow()
        self.scene.add( floor )

        # illustrate the contents of the shadowMap
        backWall = Mesh(geo,
            SurfaceBasicMaterial(texture=directionalLight.shadowRenderTarget.textureID))
        backWall.transform.translate(0,2,-2)
        self.scene.add(backWall)

        sideWall = Mesh(geo, mat)
        sideWall.transform.translate(-2,2,0)
        sideWall.transform.rotateY(3.14/2, Matrix.LOCAL)
        sideWall.setReceiveShadow()
        self.scene.add(sideWall)

        sphere = Mesh( SphereGeometry(radius=0.3), mat )
        sphere.transform.setPosition(1,2.1,0)
        sphere.setCastShadow()
        self.scene.add( sphere )
        
        self.box = Mesh( BoxGeometry(1,1,1), mat )
        self.box.transform.setPosition(0,1,0)
        self.box.setCastShadow()
        self.box.setReceiveShadow()
        self.scene.add( self.box )
    def initialize(self):

        self.setWindowTitle('Surface Geometry')
        self.setWindowSize(800, 800)

        self.renderer = Renderer()
        self.renderer.setViewportSize(800, 800)
        self.renderer.setClearColor(0.25, 0.25, 0.25)

        self.scene = Scene()

        self.camera = PerspectiveCamera()
        self.camera.transform.setPosition(0, 9, 12)
        self.camera.transform.lookAt(0, 0, 0)
        self.cameraControls = FirstPersonController(self.input, self.camera)

        self.scene.add(AmbientLight(strength=0.25))
        self.scene.add(DirectionalLight(direction=[-1, -1, -1]))

        gridTexture = OpenGLUtils.initializeTexture("images/color-grid.png")
        gridMaterial = SurfaceLambertMaterial(objTexture=gridTexture)

        self.meshList = []

        # pyramid, cone, cylinder, cylinder

        pyramid = Mesh(PyramidGeometry(numberSides=4), gridMaterial)
        pyramid.transform.translate(-4.5, 0, 4.5, Matrix.LOCAL)
        self.meshList.append(pyramid)

        cone = Mesh(ConeGeometry(), gridMaterial)
        cone.transform.translate(-1.5, 0, 4.5, Matrix.LOCAL)
        self.meshList.append(cone)

        cylinder2 = Mesh(CylinderGeometry(radiusTop=0.25, radiusBottom=1),
                         gridMaterial)
        cylinder2.transform.translate(1.5, 0, 4.5, Matrix.LOCAL)
        self.meshList.append(cylinder2)

        cylinder = Mesh(CylinderGeometry(), gridMaterial)
        cylinder.transform.translate(4.5, 0, 4.5, Matrix.LOCAL)
        self.meshList.append(cylinder)

        # Octahedron, Icosahedron, Prism, Cube

        octa = Mesh(OctahedronGeometry(), gridMaterial)
        octa.transform.translate(-4.5, 0, 1.5, Matrix.LOCAL)
        self.meshList.append(octa)

        icosa = Mesh(IcosahedronGeometry(), gridMaterial)
        icosa.transform.translate(-1.5, 0, 1.5, Matrix.LOCAL)
        self.meshList.append(icosa)

        prism = Mesh(PrismGeometry(numberSides=6), gridMaterial)
        prism.transform.translate(1.5, 0, 1.5, Matrix.LOCAL)
        self.meshList.append(prism)

        cube = Mesh(BoxGeometry(), gridMaterial)
        cube.transform.translate(4.5, 0, 1.5, Matrix.LOCAL)
        self.meshList.append(cube)

        # Circle, Ring, Hexagon, Quad

        circle = Mesh(CircleGeometry(), gridMaterial)
        circle.transform.translate(-4.5, 0, -1.5, Matrix.LOCAL)
        self.meshList.append(circle)

        ring = Mesh(RingGeometry(), gridMaterial)
        ring.transform.translate(-1.5, 0, -1.5, Matrix.LOCAL)
        self.meshList.append(ring)

        polygon = Mesh(PolygonGeometry(numberSides=6), gridMaterial)
        polygon.transform.translate(1.5, 0, -1.5, Matrix.LOCAL)
        self.meshList.append(polygon)

        quad = Mesh(QuadGeometry(), gridMaterial)
        quad.transform.translate(4.5, 0, -1.5, Matrix.LOCAL)
        self.meshList.append(quad)

        # Sphere, Torus, Tube(Helix), Tube(Knot)

        sphere = Mesh(SphereGeometry(), gridMaterial)
        sphere.transform.translate(-4.5, 0, -4.5, Matrix.LOCAL)
        self.meshList.append(sphere)

        torus = Mesh(TorusGeometry(), gridMaterial)
        torus.transform.translate(-1.5, 0, -4.5, Matrix.LOCAL)
        self.meshList.append(torus)

        curve1 = CurveFactory.makeHelix(radius=0.75)
        helix = Mesh(TubeGeometry(curve1, 0.1, 6), gridMaterial)
        helix.transform.translate(1.5, 0, -4.5, Matrix.GLOBAL)
        self.meshList.append(helix)

        curve2 = CurveFactory.makeTorusKnot(3, 5)
        knot = Mesh(TubeGeometry(curve2, 0.1, 6), gridMaterial)
        knot.transform.translate(4.5, 0, -4.5, Matrix.GLOBAL)
        self.meshList.append(knot)

        for mesh in self.meshList:
            self.scene.add(mesh)
    def initialize(self):

        self.setWindowTitle('Juggling Paths')
        self.setWindowSize(800, 800)

        self.renderer = Renderer()
        self.renderer.setViewportSize(800, 800)
        self.renderer.setClearColor(0.25, 0.25, 0.25)

        self.scene = Scene()

        self.camera = PerspectiveCamera()
        self.camera.transform.setPosition(0, 1, 5)
        self.camera.transform.lookAt(0, 0, 0)
        self.cameraControls = FirstPersonController(self.input, self.camera)

        self.scene.add(AmbientLight(strength=0.25))
        self.scene.add(DirectionalLight(direction=[-1, -1, -2]))

        starTexture = OpenGLUtils.initializeTexture("images/stars.jpg")
        stars = Mesh(SphereGeometry(200, 64, 64),
                     SurfaceBasicMaterial(texture=starTexture))
        self.scene.add(stars)

        floorMesh = GridHelper(size=10,
                               divisions=10,
                               gridColor=[0.5, 0.5, 0.5],
                               centerColor=[1, 1, 1])
        floorMesh.transform.rotateX(-3.14 / 2, Matrix.LOCAL)
        self.scene.add(floorMesh)

        ballGeometry = SphereGeometry(radius=0.1)
        self.ball1 = Mesh(ballGeometry,
                          SurfaceLambertMaterial(objColor=[1, 0.2, 0.2]))
        self.ball3 = Mesh(ballGeometry,
                          SurfaceLambertMaterial(objColor=[0.2, 1, 0.2]))
        self.ball2 = Mesh(ballGeometry,
                          SurfaceLambertMaterial(objColor=[0.2, 0.2, 1]))
        self.scene.add(self.ball1)
        self.scene.add(self.ball2)
        self.scene.add(self.ball3)

        handGeometry = BoxGeometry(width=0.4, height=0.1, depth=0.4)
        self.handL = Mesh(handGeometry,
                          SurfaceLambertMaterial(objColor=[0.9, 0.9, 0.9]))
        self.handR = Mesh(handGeometry,
                          SurfaceLambertMaterial(objColor=[0.9, 0.9, 0.9]))
        self.scene.add(self.handL)
        self.scene.add(self.handR)

        ballHeight = 3
        carryDepth = 0.5
        # all throw/catch occurs at y=0
        throwPosition = 2
        catchPosition = 3
        midPosition = (throwPosition + catchPosition) / 2

        A = [throwPosition, 0, 0]
        B = [-midPosition, ballHeight, 0]
        C = [-catchPosition, ballHeight, 0]
        D = [-catchPosition, 0, 0]
        E = [-catchPosition, -carryDepth, 0]
        F = [-midPosition, -carryDepth, 0]
        G = [-throwPosition, 0, 0]
        H = [midPosition, ballHeight, 0]
        I = [catchPosition, ballHeight, 0]
        J = [catchPosition, 0, 0]
        K = [catchPosition, -carryDepth, 0]
        L = [midPosition, -carryDepth, 0]

        curve1 = CurveFactory.makeCubicBezier(A, B, C, D)
        curve2 = CurveFactory.makeCubicBezier(D, E, F, G)
        curve3 = CurveFactory.makeCubicBezier(G, H, I, J)
        curve4 = CurveFactory.makeCubicBezier(J, K, L, A)

        self.ballCurve = Multicurve([curve1, curve2, curve3, curve4])
        self.handCurveL = Multicurve(
            [CurveFactory.makeLineSegment(G, D), curve2])
        self.handCurveR = Multicurve(
            [CurveFactory.makeLineSegment(A, J), curve4])

        # draw ball curve path  for illustration
        path = Mesh(
            CurveGeometry(self.ballCurve),
            LineDashedMaterial(color=[1, 1, 0.5],
                               dashLength=0.05,
                               gapLength=0.05,
                               lineWidth=1))
        self.scene.add(path)

        scale = 0.8
        airTime = 3 * scale
        holdTime = 1 * scale
        self.orbitTime = 2 * (airTime + holdTime)
        self.ballTimeTween = Tween(timeList=[
            0, airTime, airTime + holdTime, 2 * airTime + holdTime,
            self.orbitTime
        ],
                                   valueList=[0, 0.25, 0.50, 0.75, 1],
                                   loop=True)

        self.handTimeTween = Tween(
            timeList=[0, self.orbitTime / 3 - holdTime, self.orbitTime / 3],
            valueList=[0, 0.5, 1],
            loop=True)

        self.time = 0