예제 #1
0
파일: Car.py 프로젝트: aricwang88/autosim
    def initChassisByXml(self, physxScene, carNode):
        """ Loads chassis configuraiton from an xml file and applies to the car """
        # Start initializing the chassis ...
        chassisNode = carNode.getElementsByTagName('chassis')[0]
        bodyNode = chassisNode.getElementsByTagName('body')[0]

        bodyDesc = PhysxBodyDesc()
        bodyDesc.setMass(float(bodyNode.getAttribute('mass')))

        actorDesc = PhysxActorDesc()
        actorDesc.setName('Chassis')
        actorDesc.setBody(bodyDesc)
        actorDesc.setGlobalPos(
            readPoint3(chassisNode.getElementsByTagName('global-pos')[0]))

        boxShapeNodes = bodyNode.getElementsByTagName('boxshape')
        for boxNode in boxShapeNodes:
            shapeDesc = PhysxBoxShapeDesc()
            shapeDesc.setDimensions(
                readVec3(boxNode.getElementsByTagName('dimensions')[0]))
            shapeDesc.setLocalPos(
                readPoint3(boxNode.getElementsByTagName('local-pos')[0]))
            actorDesc.addShape(shapeDesc)

        self.chassis = physxScene.createActor(actorDesc)
        vMassCenter = readPoint3(
            chassisNode.getElementsByTagName('center-of-mass')[0])
        self.chassis.setCMassOffsetLocalPos(vMassCenter)
        self.massCenter = vMassCenter
        self.chassisModel = loader.loadModel(chassisNode.getAttribute('model'))
        self.chassisModel.reparentTo(render)
        for hideNode in chassisNode.getElementsByTagName('hide'):
            part = self.chassisModel.find(hideNode.getAttribute('part'))
            if part is not None:
                part.hide()
        for mirrorNode in chassisNode.getElementsByTagName('mirror'):
            mirror = self.chassisModel.find(mirrorNode.getAttribute('part'))
            if mirror is not None:
                self.setAsMirror(mirror)
예제 #2
0
    def initTrack(self):
        """ Loads the track model and the collision model for it. """
        kitchen = PhysxKitchen()

        trackCollision = loader.loadModel(
            "Resources/Models/TrackCollision.egg")
        fenceCollision = loader.loadModel(
            "Resources/Models/FenceCollision.egg")
        self.track = loader.loadModel("Resources/Models/Track.egg")

        triMeshDesc = PhysxTriangleMeshDesc()
        triMeshDesc.setFromNodePath(trackCollision)
        triMesh = kitchen.cookTriangleMesh(triMeshDesc)
        triMeshShapeDesc = PhysxTriangleMeshShapeDesc()
        triMeshShapeDesc.setMesh(triMesh)

        triMeshDesc2 = PhysxTriangleMeshDesc()
        triMeshDesc2.setFromNodePath(fenceCollision)
        triMesh2 = kitchen.cookTriangleMesh(triMeshDesc2)
        triMeshShapeDesc2 = PhysxTriangleMeshShapeDesc()
        triMeshShapeDesc2.setMesh(triMesh2)

        actor = PhysxActorDesc()
        actor.setName('trackcollision')
        actor.addShape(triMeshShapeDesc)
        actor.addShape(triMeshShapeDesc2)
        self.physxtrack = self.physxScene.createActor(actor)

        self.track.reparentTo(render)
        loader.loadModel("Resources/Models/Fence.egg").reparentTo(self.track)
        loader.loadModel("Resources/Models/Rocks.egg").reparentTo(self.track)

        linfog = Fog("Fog")
        linfog.setColor(Vec4(0.8, 0.85, 0.8, 1))
        linfog.setExpDensity(0.003)
        self.track.attachNewNode(linfog)
        render.setFog(linfog)