Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Three.js 如何将Physi.js用于复杂的组几何体?_Three.js - Fatal编程技术网

Three.js 如何将Physi.js用于复杂的组几何体?

Three.js 如何将Physi.js用于复杂的组几何体?,three.js,Three.js,我使用three.js创建了一个模型车,现在,我需要使用Physi.js来添加物理效果。但是我的模型车太复杂了,很多例子都是这样做的: var geometry = new THREE.CubeGeometry(4, 4, 4); var material = new Physijs.createMaterial(new THREE.MeshPhongMaterial({ color: 0x4d6dad

我使用three.js创建了一个模型车,现在,我需要使用Physi.js来添加物理效果。但是我的模型车太复杂了,很多例子都是这样做的:

var geometry = new THREE.CubeGeometry(4, 4, 4);
                var material = new Physijs.createMaterial(new THREE.MeshPhongMaterial({
                    color: 0x4d6dad
                }));
                var mesh = new Physijs.BoxMesh(geometry, material, 1);
                mesh.position.set(1.5, 10, 15);
                mesh.rotation.y = Math.PI / 4;
                scene.add(mesh);
如你们所见,我们可以创建立方体、球体等形状……但我的车太复杂了,我如何才能使它具有物理效果? 我的车就是这样的:

这些是代码的一部分: 函数ModleCar(){


你看了吗?是的,我看了,这辆车是由立方体和圆柱体制成的,车身是一个立方体,它是这样创建的:
var geometry=new THREE.CubeGeometry(4,4,4);var material=new Physijs.createMaterial(new THREE.MeshPhongMaterial({color:0x4d6dad}));var mesh=new Physijs.BoxMesh(几何体、材质、1);
但我的车身是由许多立方体和其他几何体组成的,我不知道如何使它具有物理特性?在这种情况下,最好有一个JSFIDLE或codepen示例,这样其他人就更容易理解代码中的内容
    var carMain = new THREE.Object3D();


    var meshGray = new THREE.MeshPhongMaterial({
        color:0x4F4F4F,
        side:THREE.DoubleSide
    });
    var meshYellow = new THREE.MeshPhongMaterial({
        color:new THREE.Color('#FAF808'),
        side:THREE.DoubleSide
    });
    var meshBlue = new THREE.MeshLambertMaterial({
        color:new THREE.Color('#000042')
    });
    var meshWhite = new THREE.MeshPhongMaterial({
        color:new THREE.Color('#E8E8E8'),
        side:THREE.DoubleSide
    });
    var meshTest = new THREE.MeshPhongMaterial({
        color:0x000000,
        wireframe:true
    });
    var meshLightFront = new THREE.MeshBasicMaterial({
        color:0xffffff
    });
    var meshBackLight = new THREE.MeshLambertMaterial({
        color:new THREE.Color('#840000')
    });
    var meshLicencePlate = new THREE.MeshBasicMaterial({
        color:new THREE.Color('#DCBA20'),
        side:THREE.DoubleSide
    });
    var meshBlackLine = new THREE.MeshBasicMaterial({
        color:0x000000,
        wireframe:true
    });
    var meshRed = new THREE.MeshStandardMaterial({
        color:0xff0000
    });
    function drawCarBody(){
        var shape = new THREE.Shape();
        shape.moveTo(10,10);
        shape.splineThru([
            new THREE.Vector2(10.2,11.8),
            new THREE.Vector2(12,12)
        ])
        shape.lineTo(18,12);
        shape.splineThru([
            new THREE.Vector2(19.8,11.8),
            new THREE.Vector2(20,10)
        ])
        shape.lineTo(20,4);
        shape.lineTo(10,4);
        shape.lineTo(10,10);
        return shape;
    }
    var optionsCarBody = {
        amount:25,
        bevelThickness:1,
        bevelSize:1,
        beveSegments:20,
        steps:20,
        curveSegments:20
    }

    var carBodyOutside = setExtMaterial(drawCarBody,optionsCarBody,meshYellow);
    carBodyOutside.position.set(-10,-3,15);
    carBodyOutside.rotation.y = Math.PI/2;

    //carMain.add(carBodyOutside);
    var carBodyInside = new THREE.Mesh(new THREE.CubeGeometry(25,6.8,11.6),meshYellow);
    //carMain.add(carBodyInside);
    carBodyInside.position.set(3,5.18,0)


    var meshFloor = new THREE.MeshLambertMaterial({
        color:new THREE.Color('#840000')
    });
    var carFloor = new THREE.Object3D;
    var carFloor1 = new THREE.Mesh(new THREE.CubeGeometry(17.6,0.5,11.6),meshFloor);
    var carFloor2 = new THREE.Mesh(new THREE.CubeGeometry(3.6,0.5,11.6),meshFloor);
    var carFloor3 = new THREE.Mesh(new THREE.CubeGeometry(5,0.5,9.3),meshFloor);
    carFloor.add(carFloor1);
    carFloor1.translateX(-3.1);
    carFloor.add(carFloor2);
    carFloor2.translateX(11.3);
    carFloor.add(carFloor3);
    carFloor3.translateX(7.4);
    carFloor3.translateZ(-1.14);
    var footstep = new THREE.Mesh(new THREE.CubeGeometry(4,1,1),meshYellow);
    carFloor.add(footstep);
    footstep.translateX(7.6);
    footstep.translateZ(4);
    footstep.translateY(-1.3);

    var meshChair = new THREE.MeshPhongMaterial({
        color:new THREE.Color('#198DE9')
    })
    var meshChairHandrail = new THREE.MeshPhongMaterial({
        color:new THREE.Color('#EE890C')
    })
    function addChair(direction){
        var chairTrestle = new THREE.Mesh(new THREE.CubeGeometry(4.2,1,0.5),meshGray);
        chairTrestle.translateY(0.8);
        //chair座椅,单个座椅
        var chair = new THREE.Object3D();
        chairTrestle.add(chair);
        var chairBackrest = new THREE.Mesh(new THREE.CubeGeometry(1.8,2.3,0.2),meshChair);
        chair.add(chairBackrest);
        chairBackrest.translateY(1.8);
        chairBackrest.rotation.x = -Math.PI/15;
        chairBackrest.translateZ(-1);
        var chairCushion = new THREE.Mesh(new THREE.CubeGeometry(1.8,1.5,0.2),meshChair);
        chair.add(chairCushion);
        chairCushion.rotation.x = Math.PI/2;
        chairCushion.translateZ(-0.5);
        var chairBackrestTop = new THREE.Mesh(new THREE.CylinderGeometry(0.2,0.2,1.8,15,1),meshChair);
        chairBackrest.add(chairBackrestTop);
        chairBackrestTop.translateY(1);
        chairBackrestTop.rotation.z = Math.PI/2;
        chair.translateX(-1)
        var chairHandrail = new THREE.Mesh(new THREE.CubeGeometry(0.26,1.5,0.2),meshChairHandrail);
        chairHandrail.translateY(1.1)
        chairHandrail.rotation.x = Math.PI/2;

        var chairHandrailLeft = chairHandrail.clone();
        chairHandrailLeft.translateX(-1.95);

        var chairHandrailRight = chairHandrail.clone();
        chairHandrailRight.translateX(1.95);

        switch(direction){
            case "l": chairTrestle.add(chairHandrailLeft);break;
            default : chairTrestle.add(chairHandrailRight);
        }
        chairTrestle.add(chairHandrail);

        var chair2 = chair.clone();
        chairTrestle.add(chair2);
        chair2.translateX(2);

        carFloor.add(chairTrestle);
        chairTrestle.rotation.y = Math.PI/2;
        return chairTrestle;
    }
    var chairRight1 = addChair();
    chairRight1.translateX(-3.6);
    chairRight1.translateZ(-10);




    var chairDriver = new THREE.Mesh(new THREE.CubeGeometry(1.6,1.3,1.6),meshGray)
    carFloor.add(chairDriver);
    chairDriver.translateX(9.3);
    chairDriver.translateZ(-4);
    chairDriver.translateY(1);
    chairDriver.rotation.y = Math.PI/2;

    var chairDriverCushion = new THREE.Mesh(new THREE.CubeGeometry(2.5,2.5,0.3),meshChair);
    chairDriver.add(chairDriverCushion);
    chairDriverCushion.translateY(0.52);
    chairDriverCushion.rotation.x = Math.PI/2;

    var chairDriverBackrest = new THREE.Mesh(new THREE.CubeGeometry(2.5,2.7,0.3),meshChair);
    chairDriver.add(chairDriverBackrest);
    chairDriverBackrest.translateY(1.8);
    chairDriverBackrest.translateZ(-1.3);
    chairDriverBackrest.rotation.x = -Math.PI/18;

    var chairDriverBackrestTop = new THREE.Mesh(new THREE.CylinderGeometry(0.3,0.3,2.3,15,1),meshChair);
    chairDriverBackrest.add(chairDriverBackrestTop);
    chairDriverBackrestTop.translateY(1.2);
    chairDriverBackrestTop.rotation.z = Math.PI/2;

    var steeringWheel = new THREE.Mesh(new THREE.TorusGeometry(0.6,0.1,20,30),meshGray);
    carFloor.add(steeringWheel);
    steeringWheel.translateX(11.5);
    steeringWheel.translateY(3);
    steeringWheel.translateZ(-4);
    steeringWheel.rotation.x = Math.PI/2;
    steeringWheel.rotation.z = Math.PI;
    steeringWheel.rotation.y = Math.PI/4;

    var steeringWheelInsidBar1 = new THREE.Mesh(new THREE.CylinderGeometry(0.1,-0.1,1.2,15,1),meshGray);
    steeringWheel.add(steeringWheelInsidBar1);

    var steeringWheelInsidBar2 = new THREE.Mesh(new THREE.CylinderGeometry(0,0.1,0.6,30,30),meshGray);
    steeringWheel.add(steeringWheelInsidBar2);
    steeringWheelInsidBar2.translateX(0.2);
    steeringWheelInsidBar2.rotation.z = Math.PI/2;

    var steeringWheelPole = new THREE.Mesh(new THREE.CylinderGeometry(0.1,0.1,2,15,1),meshGray);
    steeringWheel.add(steeringWheelPole);
    steeringWheelPole.rotation.x = Math.PI/2;
    steeringWheelPole.translateY(1);

    carMain.add(carFloor);
    carFloor.position.set(2.7,2,0);

    function drawCarHeadTopHead(){
        var shape = new THREE.Shape();
        shape.moveTo(10,10);
        shape.splineThru([
            new THREE.Vector2(10.2,11.8),
            new THREE.Vector2(12,12)
        ])
        shape.lineTo(18,12);
        shape.splineThru([
            new THREE.Vector2(19.8,11.8),
            new THREE.Vector2(20,10)
        ])
        shape.lineTo(20,10);
        shape.lineTo(10,10);
        return shape;
    }
    var optionsCarHeadTopHead = {
        amount:2,
        bevelThickness:0.1,
        bevelSize:1,
        beveSegments:20,
        steps:20,
        curveSegments:20
    }
    var carHeadTopHead = setExtMaterial(drawCarHeadTopHead,optionsCarHeadTopHead,meshYellow);
    carHeadTopHead.rotation.y = Math.PI/2;
    carHeadTopHead.translateX(-15);
    carHeadTopHead.translateY(-3);
    carHeadTopHead.translateZ(15);

    var carHeadTopHeadDel = new THREE.Mesh(new THREE.CubeGeometry(3,3,15),meshGray);
    carHeadTopHeadDel.translateZ(0);
    carHeadTopHeadDel.translateY(6.8);
    carHeadTopHeadDel.translateX(16.3);
    carHeadTopHead = subtract(carHeadTopHead,carHeadTopHeadDel,meshYellow);

    //carMain.add(carHeadTopHeadDel)
    carMain.add(carHeadTopHead);

    function drawCarHeadBottom(){
        var shape = new THREE.Shape();
        shape.moveTo(10,12);
        shape.bezierCurveTo(10,16,20,16,20,12);
        shape.lineTo(10,12);
        return shape;
    }
    var optionsCarHeadBottom = {
        amount:2.1,
        bevelThickness:0.3,
        bevelSize:1,
        beveSegments:60,
        steps:20,
        curveSegments:60
    }


    var wheelOutsideBR = new THREE.Object3D();
    carMain.add(wheelOutsideBR);
    wheelOutsideBR.add(wheelOut);
    wheelOutsideBR.position.set(15,-0.2,6);

    var wheelOutsideAR = wheelOutsideBR.clone();
    carMain.add(wheelOutsideAR);
    wheelOutsideAR.translateX(-21.1);

    var wheelOutsideAL = wheelOutsideAR.clone();
    carMain.add(wheelOutsideAL);
    wheelOutsideAL.translateZ(-12);
    wheelOutsideAL.rotation.y = Math.PI;

    var wheelOutsideBL = wheelOutsideAL.clone();
    carMain.add(wheelOutsideBL);
    wheelOutsideBL.translateX(-21.1);

    var loader = new THREE.STLLoader();
    loader.load("../model/Ban.stl",function(obj){
        objectSTL = new THREE.Mesh(obj,meshWheel);
        objectSTL.scale.set(0.03,0.03,0.03);
        var o1 = objectSTL.clone();
        var o2 = o1.clone();
        var o3 = o2.clone();
        wheelOutsideBR.add(objectSTL);
        wheelOutsideAR.add(o1);
        wheelOutsideAL.add(o2);
        wheelOutsideBL.add(o3);
        objectSTL.translateZ(-0.3);
        o1.translateZ(-0.3);
        o2.translateZ(-0.3);
        o3.translateZ(-0.3);
    });

                                            console.log(3);
    //门窗
    var meshGlass = new THREE.MeshStandardMaterial({
        color:new THREE.Color('#0CF5F7'),
        transparent:true,
        opacity:0.4,
        side:THREE.FrontSide
    });
    //汽车前窗户
    var windowFront = new THREE.Mesh(new THREE.CubeGeometry(1,5,9),meshTest);
    windowFront.position.set(16,6,0);
    //添加前窗玻璃
    function drawFrontGlass(){
        var shape = new THREE.Shape();
        shape.moveTo(20,20);
        shape.quadraticCurveTo(30,30.1,40,20);
        shape.moveTo(40,19.1);
        shape.quadraticCurveTo(30,30.1,20,19.9);
        shape.moveTo(20,20);
        return shape;
    }
    var optionsFrontGlass = {
        amount:10,
        bevelThickness:0,
        bevelSize:1,
        beveSegments:60,
        steps:1,
        curveSegments:60
    }
    var frontGlass = setExtMaterial(drawFrontGlass,optionsFrontGlass,meshGlass);
    frontGlass.scale.set(0.41,0.1,0.6);
    frontGlass.translateX(14);
    frontGlass.translateY(8.5);
    frontGlass.translateZ(12.3);
    frontGlass.rotation.x = Math.PI/2;
    frontGlass.rotation.z = -Math.PI/2;
    carMain.add(frontGlass);

    var windowRight = new THREE.Mesh(new THREE.CubeGeometry(23,4,1),meshGray);
    //carMain.add(windowRight);
    windowRight.position.set(2.5,6,6);
    var rightGlass = new THREE.Mesh(new THREE.CubeGeometry(17.4,4,0.1),meshGlass);
    carMain.add(rightGlass);
    rightGlass.translateZ(5.8);
    rightGlass.translateY(6);
    rightGlass.translateX(-0.5);
    var rightGlassSmall = new THREE.Mesh(new THREE.CubeGeometry(1.8,4,0.1),meshGlass);
    carMain.add(rightGlassSmall);
    rightGlassSmall.translateZ(5.8);
    rightGlassSmall.translateY(6);
    rightGlassSmall.translateX(13.3);

    var windowRightBar1 = new THREE.Mesh(new THREE.CubeGeometry(0.5,4,0.2),meshYellow);
    carMain.add(windowRightBar1);
    windowRightBar1.position.set(-3.3,6,5.9);

    var windowRightBar2 = windowRightBar1.clone();
    windowRightBar2.translateX(5.8);
    carMain.add(windowRightBar2);

    var windowRightBar3 = windowRightBar2.clone();
    windowRightBar3.translateX(5.6);
    carMain.add(windowRightBar3);

    var windowRightBar4 = windowRightBar3.clone();
    windowRightBar4.translateX(4.4);
    carMain.add(windowRightBar4);

    var doorRight = new THREE.Mesh(new THREE.CubeGeometry(4,7.5,3),meshGray);
    //carMain.add(doorRight);
    doorRight.position.set(10.3,4.28,5);

    var doorcaseBody = new THREE.Object3D();
    carMain.add(doorcaseBody);
    doorcaseBody.position.set(10.2,7.75,5.8)
    //门框
    var doorcaseTop = new THREE.Mesh(new THREE.CubeGeometry(4,0.5,0.2),meshYellow);
    doorcaseBody.add(doorcaseTop);
    var doorcaseBottom = doorcaseTop.clone();
    doorcaseBody.add(doorcaseBottom);
    doorcaseBottom.translateY(-7);
    var doorcaseLeft = new THREE.Mesh(new THREE.CubeGeometry(0.5,7,0.2),meshYellow);
    doorcaseBody.add(doorcaseLeft);
    doorcaseLeft.translateX(-1.75);
    doorcaseLeft.translateY(-3.5);
    var doorcaseRight = doorcaseLeft.clone();
    doorcaseBody.add(doorcaseRight);
    doorcaseRight.translateX(3.5);
    //门玻璃
    var doorGlass = new THREE.Mesh(new THREE.CubeGeometry(4,7.5,0.1),meshGlass);
    doorcaseBody.add(doorGlass);
    doorGlass.translateY(-3.5);
    //门滑道抓手
    var doorSlidewayHandTop = new THREE.Mesh(new THREE.CubeGeometry(0.1,0.1,0.8),meshWhite);
    doorcaseBody.add(doorSlidewayHandTop);
    doorSlidewayHandTop.translateY(0.35);
    doorSlidewayHandTop.translateZ(-0.3)
    var doorSlidewayHandTop2 = new THREE.Mesh(new THREE.CubeGeometry(0.1,0.1,0.1),meshWhite);
    doorSlidewayHandTop.add(doorSlidewayHandTop2);
    doorSlidewayHandTop2.translateZ(0.35);
    doorSlidewayHandTop2.translateY(-0.05)
    var doorSlidewayHandBottom = doorSlidewayHandTop.clone();
    doorcaseBody.add(doorSlidewayHandBottom);
    doorSlidewayHandBottom.rotation.z = Math.PI;
    doorSlidewayHandBottom.translateY(7.7);
    //门滑道
    var doorSlidewayTop = new THREE.Mesh(new THREE.CubeGeometry(4.6,0.2,0.1),meshBlue);
    carMain.add(doorSlidewayTop);
    doorSlidewayTop.translateZ(6);
    doorSlidewayTop.translateY(8.1);
    doorSlidewayTop.translateX(8.2);
    var doorSlidewayBottom = doorSlidewayTop.clone();
    carMain.add(doorSlidewayBottom);
    doorSlidewayBottom.translateY(-7.65);

    var windowLeft = new THREE.Mesh(new THREE.CubeGeometry(18,4,1),meshGray);
    //carMain.add(windowLeft);
    windowLeft.position.set(0,6,6)
    windowLeft.translateZ(-12);
    var leftGlass = new THREE.Mesh(new THREE.CubeGeometry(18,4,0.1),meshGlass);
    carMain.add(leftGlass);
    leftGlass.translateZ(-5.8);
    leftGlass.translateY(6);
    leftGlass.translateX(0);

    var windowLeftBar1 = windowRightBar1.clone();
    windowLeftBar1.translateZ(-11.8);
    carMain.add(windowLeftBar1);

    var windowLeftBar2 = windowRightBar2.clone();
    windowLeftBar2.translateZ(-11.8);
    carMain.add(windowLeftBar2);

    var windowLeftBar3 = windowRightBar3.clone();
    windowLeftBar3.translateZ(-11.8);
    windowLeftBar3.scale.x = 3.7;
    carMain.add(windowLeftBar3);

    function drawDoorLeft(){
        var shape = new THREE.Shape();
        shape.moveTo(10,7);
        shape.lineTo(13,7);
        shape.lineTo(13,3.2);
        shape.lineTo(12,2.5)
        shape.lineTo(11.7,2);
        shape.lineTo(10,2);
        shape.lineTo(10,7);
        return shape;
    }
    var optionsDoorLeft = {
        amount:1,
        bevelThickness:0,
        bevelSize:1,
        beveSegments:1,
        steps:1,
        curveSegments:30
    }
    var doorLeftHole = setExtMaterial(drawDoorLeft,optionsDoorLeft,meshTest);
    //carMain.add(doorLeftHole);
    doorLeftHole.translateZ(-6.9);
    //司机门窗户
    var dirverDoorWindow = new THREE.Mesh(new THREE.CubeGeometry(4,4,1),meshChair);
    //carMain.add(dirverDoorWindow);
    dirverDoorWindow.position.set(11.5,5.5,-5.8)

    var driverGlass = new THREE.Mesh(new THREE.CubeGeometry(4,4,0.1),meshGlass);
    carMain.add(driverGlass);
    driverGlass.position.set(11.5,5.5,-5.7)

    //后面窗户
    var windowBack = new THREE.Mesh(new THREE.CubeGeometry(3,4,9),meshTest);
    //carMain.add(windowBack);
    windowBack.translateX(-10);
    windowBack.translateY(6.5);
    var backGlass = new THREE.Mesh(new THREE.CubeGeometry(0.1,4,9),meshGlass);
    carMain.add(backGlass);
    backGlass.position.set(-10.8,6.5,0)

    //停车指示牌
    var stopIndicatePlate = new THREE.Mesh(new THREE.CylinderGeometry(0.2,0.2,1,15,1),meshWhite);
    carMain.add(stopIndicatePlate);
    stopIndicatePlate.translateZ(-6.2);
    stopIndicatePlate.translateY(3);
    stopIndicatePlate.translateX(8);
    var PlatePoint = new THREE.Object3D();
    stopIndicatePlate.add(PlatePoint);
    var plate1 = new THREE.Mesh(new THREE.CubeGeometry(1,0.5,0.1),meshWhite);
    PlatePoint.add(plate1);
    plate1.translateX(-0.5);
    var plate2 = new THREE.Mesh(new THREE.CircleGeometry(1,6),createImageMesh("../image/stopplatepic.png"));
    var plate3 = plate2.clone();
    PlatePoint.add(plate3);
    PlatePoint.add(plate2);
    plate3.rotation.y = Math.PI;
    plate3.translateX(1.8);
    plate2.translateX(-1.8);

    //前面车灯
    var carLightFront = new THREE.Mesh(new THREE.CylinderGeometry(1,1,2,15,1,true),meshYellow);
    carMain.add(carLightFront);
    carLightFront.rotation.z = Math.PI/2;
    carLightFront.translateY(-17);
    carLightFront.translateZ(-5);
    carLightFront.translateX(1.2);
    var carLightFrontInside = new THREE.Mesh(new THREE.CylinderGeometry(1,1,1.6,15,1),meshLightFront);
    carLightFront.add(carLightFrontInside);
    carLightFrontInside.translateZ(0.1);
    //添加车灯光线
    var carFrontLight = new THREE.SpotLight(new THREE.Color("#FFFF7D"));
    carMain.add(carFrontLight);
    carFrontLight.position.set(17.5,1,-5.5);
    carFrontLight.angle = Math.PI/6;
    carFrontLight.decay = 1;
    carFrontLight.distance = 100;
    carFrontLight.penumbra = 1;
    carFrontLight.power = 10;
    var carLightTarget = new THREE.Object3D();
    carMain.add(carLightTarget);
    carLightTarget.position.set(50,-1.8,-5.4)
    carFrontLight.target = carLightTarget;

    var carLightFrontRight = carLightFront.clone();
    carMain.add(carLightFrontRight);
    carLightFrontRight.translateZ(10);
    carLightFrontRight.rotation.x = Math.PI;
    var carFrontLightRight = carFrontLight.clone();
    carMain.add(carFrontLightRight);
    carFrontLightRight.translateZ(11);
    var carLightTargetRight = carLightTarget.clone();
    carMain.add(carLightTargetRight);
    carFrontLightRight.target = carLightTargetRight;
    carLightTargetRight.position.set(50,-1.8,5.4);

    //汽车尾灯
    var lightBackPoint = new THREE.Object3D();
    carMain.add(lightBackPoint);
    addPoint(lightBackPoint);
    lightBackPoint.position.set(-9.8,2,3.8);

    function drawLightBack(){
        var shape = new THREE.Shape();
        shape.moveTo(0,0);
        //shape.quadraticCurveTo(1,1,2,2);
        shape.lineTo(2,0);
        shape.lineTo(2,1);
        shape.lineTo(0,1);
        return shape;
    }
    var optionsLightBack = {
        amount:1,
        bevelThickness:2,
        bevelSize:1,
        beveSegments:60,
        steps:2,
        curveSegments:60
    }
    var lightBack = setExtMaterial(drawLightBack,optionsLightBack,meshBackLight);
    lightBackPoint.add(lightBack);
    lightBack.scale.set(0.7,0.7,0.5);
    lightBack.rotation.y = -Math.PI/2;
    var lightBackLeft = lightBack.clone();
    carMain.add(lightBackLeft);
    lightBackLeft.translateZ(9.8);
    lightBackLeft.translateX(-5);
    lightBackLeft.translateY(2);

    lightBack.normalsNeedUpdate = true;


    //后视镜
    var rearviewMirrorPoint = new THREE.Object3D();
    carMain.add(rearviewMirrorPoint);
    rearviewMirrorPoint.translateX(15);
    rearviewMirrorPoint.translateY(6);
    rearviewMirrorPoint.translateZ(-5.8);

    var rearviewPointsArray = [];
    rearviewPointsArray.push(new THREE.Vector3(10,3.8,0));
    rearviewPointsArray.push(new THREE.Vector3(12,3.8,0));
    rearviewPointsArray.push(new THREE.Vector3(12,1.5,0));
    rearviewPointsArray.push(new THREE.Vector3(12,0,0));
    rearviewPointsArray.push(new THREE.Vector3(10,0,0));
    var rearviewTrestle = new THREE.TubeGeometry(
        new THREE.SplineCurve3(rearviewPointsArray),80,0.1
    )
    var rearviewMesh = new THREE.Mesh(rearviewTrestle,meshGray);
    rearviewMirrorPoint.add(rearviewMesh);
    rearviewMesh.scale.set(1,1,1);
    rearviewMesh.rotation.y = Math.PI/6;
    rearviewMesh.position.set(-8.5,-2,5);
    var rearviewMirror = new THREE.Mesh(new THREE.SphereGeometry(1.6,30,30,0,Math.PI*2,0,Math.PI/5),meshGray);
    rearviewMirrorPoint.add(rearviewMirror);
    rearviewMirror.rotation.z = -Math.PI/2;
    rearviewMirror.rotation.y = Math.PI/6;
    rearviewMirror.translateY(0.4);
    rearviewMirror.translateZ(0);

    var rearviewMirrorRight = rearviewMirrorPoint.clone();
    carMain.add(rearviewMirrorRight);
    rearviewMirrorRight.rotation.z = Math.PI;
    rearviewMirrorRight.rotation.y = Math.PI;
    rearviewMirrorRight.translateZ(-11.6);
    rearviewMirrorRight.translateX(0);
    rearviewMirrorRight.translateY(0.2);

    //添加车头文字标识
    var fontLoader = new THREE.FontLoader();
    fontLoader.load('../fonts/gentilis_bold.typeface.json',function(font){
        var optionsNumber = {
            size:1,
            height:0.5,
            font:font,
            weight:'normal',
            style:'normal',
            bevelThickness:2,
            bevelSize:2,
            bevelSegments:2,
            bevelEnable:true,
            curveSegments:12,
            steps:1
        }
        text = new THREE.Mesh(new THREE.TextGeometry("Lison's School Bus", optionsNumber),meshRed);
        carMain.add(text);
        text.scale.x = 0.8;
        text.rotation.y = Math.PI/2;
        text.position.set(16.76,8.6,4.4);
    })


    //车牌
    //前面车牌
    var licencePlateFront = new THREE.Mesh(new THREE.CubeGeometry(4,1.4,1),meshGray);
    carMain.add(licencePlateFront);
    licencePlateFront.translateX(19.6);
    licencePlateFront.translateY(1.2);
    licencePlateFront.rotation.y = Math.PI/2;

    //后车牌
    var licencePlateBack = licencePlateFront.clone();
    carMain.add(licencePlateBack);
    licencePlateBack.translateZ(-30.3);
    licencePlateBack.translateY(1);




    var car = new THREE.Object3D();

    car.add(carMain);
    carMain.position.set(-5,1.7,0);



    //扣掉汽车前窗户
//    var carBody = subtract(carBodyOutside,windowFront,meshYellow);
//    carBody = subtract(carBody,windowBack,meshYellow);
//    //扣掉汽车内部
//    carBody = subtract(carBody,carBodyInside,meshYellow);
//    //扣掉窗户和门
//    carBody = subtract(carBody,windowRight,meshYellow);
//    carBody = subtract(carBody,doorRight,meshYellow);
//    carBody = subtract(carBody,windowLeft,meshYellow);
//    carBody = subtract(carBody,doorLeftHole,meshYellow);
//    carBody = subtract(carBody,dirverDoorWindow,meshYellow);
// 
//    carMain.add(carBody)


    var ModleCar = {};
    ModleCar = car;
    ModleCar.wheelOutsideBR = wheelOutsideBR;
    ModleCar.wheelOutsideBL = wheelOutsideBL;
    ModleCar.wheelOutsideAR = wheelOutsideAR;
    ModleCar.wheelOutsideAL = wheelOutsideAL;
    ModleCar.meshLightFront = meshLightFront;
    ModleCar.meshBackLight = meshBackLight;
    ModleCar.PlatePoint = PlatePoint;
    ModleCar.carFrontLight = carFrontLight;
    ModleCar.carFrontLightRight = carFrontLightRight;
    ModleCar.doorcaseBody = doorcaseBody;

    return ModleCar;



    /*
    //小车模型外部文件引入的代码
    var car = ModleCar();
    scene.add(car);


    var wheelOutsideBR = car.wheelOutsideBR;
    var wheelOutsideBL = car.wheelOutsideBL;
    var wheelOutsideAR = car.wheelOutsideAR;
    var wheelOutsideAL = car.wheelOutsideAL;
    var meshBackLight = car.meshBackLight;
    var PlatePoint = car.PlatePoint;
    var carFrontLight = car.carFrontLight;
    var carFrontLightRight = car.carFrontLightRight;
    var doorcaseBody = car.doorcaseBody;
    var meshLightFront = car.meshLightFront;
    */


}