anorasi项目剖析(1)

anorasi项目剖析(1)

该项目使用INI来实现数据的读取。
比如:
1.节点读取
INI部分:
外观
Look
 Body
  model=impreza.3ds
  scale=1 1 1
 Wheels
  model=wheel.3ds
  scale=1 1 1
声音
Sound
 Engine
  wave=206_engine.wav
  pitch_low=0.2
  pitch_high=1.5
程序部分:
//load car

 body.node=loadModel(cfg, "Look/Body/", device, sm, driver);

 body.node_debug=sm->addCubeSceneNode(1, 0, -1, core::vector3df(0, 0, 0), core::vector3df(0, 0, 0),
  cfg.Getval_vector("Body/Chassis/1/scale", core::vector3df(1, 1, 1))
  );
 body.node_debug->setMaterialTexture(0, driver->getTexture("data/misc/checked.jpg"));
2.车轮的属性
 Wheel #default
  damp=30000
  spring=50000
  radius=0.38
  weight=20
  width=0.10 #not yet used if user specifies wheel model
  brakes=0 # 0.0 - 1.0
 Wheel_1 #fl
  pos=1.39 -0.145 0.823
  attr=STEER
  brakes=0.8
  rotation_z=1.5707963 #used just by client part
 Wheel_2 #fr
  pos=1.39 -0.145 -0.823
  attr=STEER
  brakes=0.8
  rotation_z=4.7123889
 Wheel_3 #rl
  pos=-1.350 -0.15 0.823
  attr=STRAIGHT|THURST
  brakes=0.2
  rotation_z=1.5707963
 Wheel_4 #rr
  pos=-1.350 -0.15 -0.823
  attr=STRAIGHT|THURST
  brakes=0.2
  rotation_z=4.7123889
for (int i=0; ; i++) {
  char buf2[128];

  sprintf(buf2, "Body/Wheel_%d/", i+1);
  buf=buf2;

  if (!cfg.Getval_exists(buf+"attr")) break;

  double radius=cfg.Getval_double((string)buf+"radius", cfg.Getval_double("Body/Wheel/radius", 1));
  double width=cfg.Getval_double((string)buf+"width", cfg.Getval_double("Body/Wheel/width", 1));

  scene::ISceneNode* node=loadModel(cfg, "Look/Wheels/", device, sm, driver);
  CModelAttr wm;

  scene::IMesh* cm=CreateCylinder(25, 2, 1);
  scene::ISceneNode* node_debug=sm->addMeshSceneNode(cm);
  node_debug->setScale(core::vector3df((f32)(radius), (f32)width, (f32)(radius)));
  node_debug->setMaterialTexture(0, driver->getTexture("data/misc/checked.jpg"));
  node_debug->getMaterial(0).EmissiveColor.set(255,255,255,255);

  wm.arot=core::vector3df((f32)cfg.Getval_double(buf+"rotation_x", 0),
    (f32)cfg.Getval_double(buf+"rotation_y", 0),
    (f32)cfg.Getval_double(buf+"rotation_z", 0));
  wm.node=node;
  wm.node_debug=node_debug;

  wheels.push_back(wm);
 }
3.声音---车开动时的轰鸣声
 //load sounds
 try {
  snd_engine = new openalpp::Source((ALbyte*)("data/cars/"+profile+"/"+cfg.Getval_str("Sound/Engine/wave")).c_str());
  if (!snd_engine.valid())
   DBGCOUT("ALUT", "Coulnd't load file", ("data/cars/"+profile+"/"+cfg.Getval_str("Sound/Engine/wave")).c_str());
  else {
   snd_engine->setGain(1);
   snd_engine->setPosition(0.0,0.0,0.0);
   snd_engine->setLooping(true);
  }
  snd_engine_pitch_low=cfg.Getval_double("Sound/Engine/pitch_low");
  snd_engine_pitch_high=cfg.Getval_double("Sound/Engine/pitch_high");
 } catch(openalpp::Error e) {
  std::cerr << e << "\n";
 }

你可能感兴趣的:(anorasi项目剖析(1))