快速导航:   教程资源  | 经典范例  | 友情链接  | 联系我们  | 官方微博
登陆 | 注册

 flash 3d 研究所
flash3d 研究所 pv3d 教程 研究所小贴士: 懂得一点三维制作常识的孩子,知道贴图不是被什么三维软件导出的,就直接是一张外部图而已啦,完全不神秘。










最近更新:
● wan925446570阁下在讨论区里 发表新主题“怎么配置away3d运行环境啊???...”(20:38:35)
● yanfaqiang阁下在讨论区里 回复“《超简易papervision3D基础 ...”(18:08:41)
● cripel阁下在讨论区里 回复“...”(14:38:04)
浏览主题:JigLib的示例CarDriveOnTerrain的问题

JigLib的示例CarDriveOnTerrain的问题
海啸Flash3DBitMapData (2010-12-17 19:09:22)

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
package    
{
  import  flash.display.*;
  import  flash.events.*;
  import  flash.ui.Keyboard;
  import  flash.geom.Vector3D;
  
  import  org.papervision3d.cameras.SpringCamera3D;
  import  org.papervision3d.core.clipping.FrustumClipping;
  import  org.papervision3d.core.math.Number3D;
  import  org.papervision3d.materials.*;
  import  org.papervision3d.materials.utils.MaterialsList;
  import  org.papervision3d.materials.shadematerials.FlatShadeMaterial;
  import  org.papervision3d.materials.shadematerials.PhongMaterial;
        import  org.papervision3d.materials.shaders.PhongShader;
  import  org.papervision3d.materials.shadematerials.GouraudMaterial;
        import  org.papervision3d.materials.shaders.GouraudShader;
  import  org.papervision3d.objects.parsers.*;
  import  org.papervision3d.objects.DisplayObject3D;
  import  org.papervision3d.lights.PointLight3D;
  import  org.papervision3d.events.FileLoadEvent;
  import  org.papervision3d.objects.parsers.Collada;
  import  org.papervision3d.view.BasicView;
  import  org.papervision3d.view.stats.StatsView;
  import  org.papervision3d.view.layer.ViewportLayer;
  import  org.papervision3d.view.layer.util.ViewportLayerSortMode;
  
  import  flash.display.Bitmap;
        import  flash.display.Loader;
        import  flash.events.Event;
        import  flash.net.URLRequest;
        import  org.papervision3d.lights.PointLight3D;
        import  org.papervision3d.materials.BitmapMaterial;
        import  org.papervision3d.materials.shaders.FlatShader;
        import  org.papervision3d.materials.shaders.ShadedMaterial;
        import  org.papervision3d.objects.primitives.Sphere;

  import  jiglib.cof.JConfig;
  import  jiglib.math.*;
  import  jiglib.physics.*;
  import  jiglib.geometry.*;
  import  jiglib.vehicles.JCar;
  import  jiglib.vehicles.JWheel;
  import  jiglib.plugin.papervision3d.*;

  [SWF(width="1000",  height="750",  backgroundColor="#ffffff",  frameRate="60")]
  public  class  CarDriveOnTerrain  extends  BasicView
  {
    
    [Embed(source="hightmap2.jpg")]
                public  var  TERRIAN_MAP:Class;
    
    private  var  springCamera:SpringCamera3D;
    private  var  mylight:PointLight3D;
    
    private  var  terrain:JTerrain;
    private  var  carBody:JCar;
    private  var  carSkin:Collada;
    private  var  steerFR  :DisplayObject3D;
    private  var  steerFL  :DisplayObject3D;
    private  var  wheelFR  :DisplayObject3D;
    private  var  wheelFL  :DisplayObject3D;
    private  var  wheelBR  :DisplayObject3D;
    private  var  wheelBL  :DisplayObject3D;
    private  var  vplObjects:ViewportLayer;
    
    private  var  physics:Papervision3DPhysics;
    
    public  function  CarDriveOnTerrain()  
    {
      super(800,  600,  true,  true);
      stage.addEventListener(  KeyboardEvent.KEY_DOWN,  keyDownHandler  );
      stage.addEventListener(  KeyboardEvent.KEY_UP,  keyUpHandler  );
      
      init3D();
    }
    
    private  function  init3D():void
    {
      physics  =  new  Papervision3DPhysics(scene,  8);

      renderer.clipping  =  new  FrustumClipping(FrustumClipping.NEAR);
      viewport.containerSprite.sortMode  =  ViewportLayerSortMode.INDEX_SORT;
        
      springCamera  =  new  SpringCamera3D();
      springCamera.y  =  5000;
      springCamera.mass  =  10;
      springCamera.damping  =  10;
      springCamera.stiffness  =  1;
      springCamera.positionOffset  =  new  Number3D(0,  100,  -150);
      
      mylight  =  new  PointLight3D(true,  true);
      mylight.y  =  5000;
        
      var  terrainBMD:Bitmap  =  new  TERRIAN_MAP;
      var  shadeMateria:FlatShadeMaterial  =  new  FlatShadeMaterial(mylight,  0x77ee77);
      var  shadeMaterial:PhongMaterial  =  new  PhongMaterial(mylight,0x32FFFF,  0x00FF00,100);
      //create  terrain
      terrain  =  physics.createTerrain(terrainBMD.bitmapData,  shadeMateria,  10000,  10000,  800,  45,  45);
      viewport.getChildLayer(DisplayObject3D(terrain.terrainMesh)).layerIndex  =  0;
      
      
      //init  car  skin
      shadeMateria  =  new  FlatShadeMaterial(mylight,0xeeeeff);
      var  materiaList:MaterialsList  =  new  MaterialsList();
      materiaList.addMaterial(shadeMateria,"all");
      carSkin  =  new  Collada("car.DAE",  materiaList,  0.01);
      carSkin.addEventListener(FileLoadEvent.LOAD_COMPLETE,onCarLoaded);
        
      springCamera.target  =  carSkin;
      
      var  stats:StatsView  =  new  StatsView(renderer);
      addChild(stats);
    }
    
    private  function  onCarLoaded(e:FileLoadEvent):void
    {
      scene.addChild(carSkin);
        
      //init  car  physics
      carBody  =  new  JCar(new  Pv3dMesh(carSkin));
      carBody.setCar(40,1,400);
      carBody.chassis.moveTo(new  Vector3D(  4000,  300,  -3000));
      carBody.chassis.mass  =  15;
      carBody.chassis.sideLengths  =  new  Vector3D(40,  20,  90);
      physics.addBody(carBody.chassis);
        
      carBody.setupWheel("WheelFL",  new  Vector3D(  -20,  -10,  25),  1.2,  1.2,  3,  10,  0.5,  0.5,  2);
      carBody.setupWheel("WheelFR",  new  Vector3D(20,  -10,  25),  1.2,  1.2,  3,  10,  0.5,  0.5,  2);
      carBody.setupWheel("WheelBL",  new  Vector3D(  -20,  -10,  -25),  1.2,  1.2,  3,  10,  0.5,  0.5,  2);
      carBody.setupWheel("WheelBR",  new  Vector3D(20,  -10,  -25),  1.2,  1.2,  3,  10,  0.5,  0.5,  2);
        
      var  shadeMateria:FlatShadeMaterial  =  new  FlatShadeMaterial(mylight,  0x777777);
      var  shadeMaterial:PhongMaterial  =  new  PhongMaterial(mylight,0xFFFFFF,  0x777777,100);
      steerFL  =  carSkin.getChildByName(  "WheelFL",  true  );
      steerFR  =  carSkin.getChildByName(  "WheelFR",  true  );
      wheelFL  =  carSkin.getChildByName(  "WheelFL_PIVOT",  true  );
      wheelFL.material  =  shadeMaterial;
      wheelFR  =  carSkin.getChildByName(  "WheelFR_PIVOT",  true  );
      wheelFR.material  =  shadeMaterial;
      wheelBL  =  carSkin.getChildByName(  "WheelBL",  true  );
      wheelBL.material  =  shadeMaterial;
      wheelBR  =  carSkin.getChildByName(  "WheelBR",  true  );
      wheelBR.material  =  shadeMaterial;
        
      var  vplCar:ViewportLayer  =  viewport.getChildLayer(carSkin.getChildByName("Chassis",true));
      vplCar.addDisplayObject3D(wheelFR);
      vplCar.addDisplayObject3D(wheelFL);
      vplCar.addDisplayObject3D(wheelBR);
      vplCar.addDisplayObject3D(wheelBL);
      vplCar.layerIndex  =  2;
      
      startRendering();
    }
    
    private  function  keyDownHandler(event  :KeyboardEvent):void
    {
      switch(event.keyCode)
      {
        case  Keyboard.UP:
          carBody.setAccelerate(5);
          break;
        case  Keyboard.DOWN:
          carBody.setAccelerate(-5);
          break;
        case  Keyboard.LEFT:
          carBody.setSteer(["WheelFL",  "WheelFR"],  -2);
          break;
        case  Keyboard.RIGHT:
          carBody.setSteer(["WheelFL",  "WheelFR"],  2);
          break;
        case  Keyboard.SPACE:
          carBody.setHBrake(1);
          break;
      }
    }


    private  function  keyUpHandler(event:KeyboardEvent):void
    {
      switch(event.keyCode)
      {
        case  Keyboard.UP:
          carBody.setAccelerate(0);
          break;
          
        case  Keyboard.DOWN:
          carBody.setAccelerate(0);
          break;
          
        case  Keyboard.LEFT:
          carBody.setSteer(["WheelFL",  "WheelFR"],  0);
          break;
          
        case  Keyboard.RIGHT:
          carBody.setSteer(["WheelFL",  "WheelFR"],  0);
          break;
        case  Keyboard.SPACE:
              carBody.setHBrake(0);
      }
    }
      
    private  function  updateWheelSkin():void
    {
      steerFL.rotationY  =  carBody.wheels["WheelFL"].getSteerAngle();
      steerFR.rotationY  =  carBody.wheels["WheelFR"].getSteerAngle();
      
      wheelFL.pitch(carBody.wheels["WheelFL"].getRollAngle());
      wheelFR.pitch(carBody.wheels["WheelFR"].getRollAngle());
      wheelBL.roll(carBody.wheels["WheelBL"].getRollAngle());
      wheelBR.roll(carBody.wheels["WheelBR"].getRollAngle());
      
      steerFL.y  =  carBody.wheels["WheelFL"].getActualPos().y;
      steerFR.y  =  carBody.wheels["WheelFR"].getActualPos().y;
      wheelBL.y  =  carBody.wheels["WheelBL"].getActualPos().y;
      wheelBR.y  =  carBody.wheels["WheelBR"].getActualPos().y;
    }
      
    protected  override  function  onRenderTick(event:Event  =  null):void  {
      //physics.step();
      physics.engine.integrate(0.1);
      updateWheelSkin();
      
      renderer.renderScene(scene,  springCamera,  viewport);
    }
  }
}        

 
question
第100条:1.physics.createTerrain是哪种几何体?
2.它的构造器在那?
3.它的参数?
第130条:carBody.setupWheel("WheelFL",  new  Vector3D(  -20,  -10,  25),  1.2,  1.2,  3,  10,  0.5,  0.5,  2);的(  -20,  -10,  25),  1.2,  1.2,  3,  10,  0.5,  0.5,  2
分别为什么意思?







flash 3d 研究所 fur3
(2010-12-20 11:50:06)
我对jiglib也研究不多,不知道其他朋友有没有研究


评论人:
邮   箱: (填入邮箱,博客地址均可)

内   容: (广告和垃圾内容可能会被删除,望理解)
链接地址

验证码:(为防止机器人骚扰,请麻烦输入验证码^_^)
  

(目前需登陆方可发表)


不想添加了