00001 //------------------------------------------------------------------------------ 00002 // Lamp : Open source game middleware 00003 // Copyright (C) 2004 Junpei Ohtani ( Email : junpee@users.sourceforge.jp ) 00004 // 00005 // This library is free software; you can redistribute it and/or 00006 // modify it under the terms of the GNU Lesser General Public 00007 // License as published by the Free Software Foundation; either 00008 // version 2.1 of the License, or (at your option) any later version. 00009 // 00010 // This library is distributed in the hope that it will be useful, 00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00013 // Lesser General Public License for more details. 00014 // 00015 // You should have received a copy of the GNU Lesser General Public 00016 // License along with this library; if not, write to the Free Software 00017 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00018 //------------------------------------------------------------------------------ 00019 00020 /** @file 00021 * バイナリシーンローダヘッダ 00022 * @author Junpee 00023 */ 00024 00025 #ifndef BINARY_SCENE_LOADER_H_ 00026 #define BINARY_SCENE_LOADER_H_ 00027 00028 namespace Lamp{ 00029 00030 class BinaryReader; 00031 class TargaLoader; 00032 class Scene; 00033 class SceneNodeManager; 00034 class SceneNode; 00035 class LightManager; 00036 class Light; 00037 class ModelManager; 00038 class CharacterModel; 00039 class MeshManager; 00040 class MeshDataManager; 00041 class MeshData; 00042 class MaterialManager; 00043 class Material; 00044 class BasicMaterial; 00045 class TextureManager; 00046 class PictureManager; 00047 class Picture; 00048 00049 //------------------------------------------------------------------------------ 00050 /** 00051 * バイナリシーンローダ 00052 */ 00053 class BinarySceneLoader{ 00054 public: 00055 /** 00056 * コンストラクタ 00057 */ 00058 BinarySceneLoader(); 00059 00060 /** 00061 * デストラクタ 00062 */ 00063 virtual ~BinarySceneLoader(); 00064 00065 /** 00066 * ロード 00067 * @param filePath ファイルパス 00068 * @param scene ロード先シーン 00069 */ 00070 virtual void load(const String& filePath, Scene* scene); 00071 00072 /** 00073 * ロード 00074 * @param filePath ファイルパス 00075 * @param scene ロード先シーン 00076 * @param rootNode ロード先ルートノード 00077 */ 00078 virtual void load(const String& filePath, Scene* scene, 00079 SceneNode* rootNode); 00080 00081 /** 00082 * ロード 00083 * @param binaryReader バイナリリーダ 00084 * @param scene ロード先シーン 00085 * @param basePath ベースパス 00086 */ 00087 virtual void load(BinaryReader* binaryReader, Scene* scene, 00088 const String& basePath = ""); 00089 00090 /** 00091 * ロード 00092 * @param binaryReader バイナリリーダ 00093 * @param scene ロード先シーン 00094 * @param rootNode ロード先ルートノード 00095 * @param basePath ベースパス 00096 */ 00097 virtual void load(BinaryReader* binaryReader, Scene* scene, 00098 SceneNode* rootNode, const String& basePath = ""); 00099 00100 protected: 00101 /** 00102 * ヘッダの読み込み 00103 */ 00104 virtual void readHeader(); 00105 00106 //-------------------------------------------------------------------------- 00107 // フォグ 00108 //-------------------------------------------------------------------------- 00109 /** 00110 * フォグの読み込み 00111 */ 00112 virtual void readFog(); 00113 00114 //-------------------------------------------------------------------------- 00115 // シーンノード 00116 //-------------------------------------------------------------------------- 00117 /** 00118 * シーンノードリストの読み込み 00119 * @param listSize リストサイズ 00120 */ 00121 virtual void readSceneNodeList(int listSize); 00122 00123 /** 00124 * シーンノードの読み込み 00125 */ 00126 virtual void readSceneNode(); 00127 00128 /** 00129 * レベルオブディティールシーンノードの読み込み 00130 */ 00131 virtual void readLODSceneNode(); 00132 00133 //-------------------------------------------------------------------------- 00134 // ライト 00135 //-------------------------------------------------------------------------- 00136 /** 00137 * ライトリストの読み込み 00138 * @param listSize リストサイズ 00139 */ 00140 virtual void readLightList(int listSize); 00141 00142 /** 00143 * ライトの読み込み 00144 * @param light ライト 00145 */ 00146 virtual void readLight(Light* light); 00147 00148 /** 00149 * アンビエントライトの読み込み 00150 */ 00151 virtual void readAmbientLight(); 00152 00153 /** 00154 * ディレクショナルライトの読み込み 00155 */ 00156 virtual void readDirectionalLight(); 00157 00158 /** 00159 * ポイントライトの読み込み 00160 */ 00161 virtual void readPointLight(); 00162 00163 //-------------------------------------------------------------------------- 00164 // モデル 00165 //-------------------------------------------------------------------------- 00166 /** 00167 * モデルリストの読み込み 00168 * @param listSize リストサイズ 00169 */ 00170 virtual void readModelList(int listSize); 00171 00172 /** 00173 * 標準モデルの読み込み 00174 */ 00175 virtual void readStandardModel(); 00176 00177 /** 00178 * キャラクタモデルの読み込み 00179 */ 00180 virtual void readCharacterModel(); 00181 00182 /** 00183 * ボーンの読み込み 00184 * @param model 読込先モデル 00185 */ 00186 virtual void readBone(CharacterModel* model); 00187 00188 //-------------------------------------------------------------------------- 00189 // メッシュ 00190 //-------------------------------------------------------------------------- 00191 /** 00192 * メッシュリストの読み込み 00193 * @param listSize リストサイズ 00194 */ 00195 virtual void readMeshList(int listSize); 00196 00197 /** 00198 * 剛体メッシュの読み込み 00199 */ 00200 virtual void readRigidMesh(); 00201 00202 /** 00203 * キャラクタメッシュの読み込み 00204 */ 00205 virtual void readCharacterMesh(); 00206 00207 //-------------------------------------------------------------------------- 00208 // メッシュデータ 00209 //-------------------------------------------------------------------------- 00210 /** 00211 * メッシュデータリストの読み込み 00212 * @param listSize リストサイズ 00213 */ 00214 virtual void readMeshDataList(int listSize); 00215 00216 /** 00217 * メッシュデータの読み込み 00218 */ 00219 virtual void readMeshData(); 00220 00221 //-------------------------------------------------------------------------- 00222 // マテリアル 00223 //-------------------------------------------------------------------------- 00224 /** 00225 * マテリアルリストの読み込み 00226 * @param listSize リストサイズ 00227 */ 00228 virtual void readMaterialList(int listSize); 00229 00230 /** 00231 * マテリアルの読み込み 00232 * @param material マテリアル 00233 */ 00234 virtual void readMaterial(Material* material); 00235 00236 /** 00237 * 基本マテリアルの読み込み 00238 */ 00239 virtual void readBasicMaterial(); 00240 00241 //-------------------------------------------------------------------------- 00242 // テクスチャ 00243 //-------------------------------------------------------------------------- 00244 /** 00245 * テクスチャリストの読み込み 00246 * @param listSize リストサイズ 00247 */ 00248 virtual void readTextureList(int listSize); 00249 00250 /** 00251 * サーフェーステクスチャの読み込み 00252 */ 00253 virtual void readSurfaceTexture(); 00254 00255 //-------------------------------------------------------------------------- 00256 // ピクチャ 00257 //-------------------------------------------------------------------------- 00258 /** 00259 * ピクチャリストの読み込み 00260 * @param listSize リストサイズ 00261 */ 00262 virtual void readPictureList(int listSize); 00263 00264 /** 00265 * RGB8ビットピクチャの読み込み 00266 * @param name 名前 00267 * @param loader Targaローダ 00268 * @return 読み込んだピクチャ 00269 */ 00270 virtual Picture* readPictureRGB8(const String& name, TargaLoader& loader); 00271 00272 /** 00273 * RGBA8ビットピクチャの読み込み 00274 * @param name 名前 00275 * @param loader Targaローダ 00276 * @return 読み込んだピクチャ 00277 */ 00278 virtual Picture* readPictureRGBA8(const String& name, TargaLoader& loader); 00279 00280 //-------------------------------------------------------------------------- 00281 // シーンノードリンク 00282 //-------------------------------------------------------------------------- 00283 /** 00284 * シーンノードリンクリストの読み込み 00285 * @param listSize リストサイズ 00286 */ 00287 virtual void readSceneNodeLinkList(int listSize); 00288 00289 /** 00290 * シーンノードリンクの読み込み 00291 */ 00292 virtual void readSceneNodeLink(); 00293 00294 //-------------------------------------------------------------------------- 00295 // モデルリンク 00296 //-------------------------------------------------------------------------- 00297 /** 00298 * モデルリンクリストの読み込み 00299 * @param listSize リストサイズ 00300 */ 00301 virtual void readModelLinkList(int listSize); 00302 00303 /** 00304 * モデルリンクの読み込み 00305 */ 00306 virtual void readModelLink(); 00307 00308 //-------------------------------------------------------------------------- 00309 // メッシュリンク 00310 //-------------------------------------------------------------------------- 00311 /** 00312 * メッシュリンクリストの読み込み 00313 * @param listSize リストサイズ 00314 */ 00315 virtual void readMeshLinkList(int listSize); 00316 00317 /** 00318 * メッシュリンクの読み込み 00319 */ 00320 virtual void readMeshLink(); 00321 00322 //-------------------------------------------------------------------------- 00323 // マテリアルリンク 00324 //-------------------------------------------------------------------------- 00325 /** 00326 * マテリアルリンクリストの読み込み 00327 * @param listSize リストサイズ 00328 */ 00329 virtual void readMaterialLinkList(int listSize); 00330 00331 /** 00332 * 基本マテリアルリンクの読み込み 00333 */ 00334 virtual void readBasicMaterialLink(); 00335 00336 //-------------------------------------------------------------------------- 00337 // テクスチャリンク 00338 //-------------------------------------------------------------------------- 00339 /** 00340 * テクスチャリンクリストの読み込み 00341 * @param listSize リストサイズ 00342 */ 00343 virtual void readTextureLinkList(int listSize); 00344 00345 /** 00346 * テクスチャリンクの読み込み 00347 */ 00348 virtual void readTextureLink(); 00349 00350 //-------------------------------------------------------------------------- 00351 // 値の読み込み 00352 //-------------------------------------------------------------------------- 00353 /** 00354 * 文字列の読み込み 00355 * @return 文字列 00356 */ 00357 virtual String readString(); 00358 00359 /** 00360 * 三次元ベクトルの読み込み 00361 * @return 三次元ベクトル 00362 */ 00363 virtual Vector3 readVector3(); 00364 00365 /** 00366 * 3×4行列の読み込み 00367 * @return 3×4行列 00368 */ 00369 virtual Matrix34 readMatrix34(); 00370 00371 /** 00372 * 三要素整数カラー値の読み込み 00373 * @return 三要素整数カラー値 00374 */ 00375 virtual Color3c readColor3c(); 00376 00377 /** 00378 * 四要素整数カラー値の読み込み 00379 * @return 四要素整数カラー値 00380 */ 00381 virtual Color4c readColor4c(); 00382 00383 /** 00384 * 三要素実数カラー値の読み込み 00385 * @return 三要素実数カラー値 00386 */ 00387 virtual Color3f readColor3f(); 00388 00389 /** 00390 * 四要素実数カラー値の読み込み 00391 * @return 四要素実数カラー値 00392 */ 00393 virtual Color4f readColor4f(); 00394 00395 /** 00396 * 二次元テクスチャ座標値の読み込み 00397 * @return 二次元テクスチャ座標値 00398 */ 00399 virtual TexCoord2 readTexCoord2(); 00400 00401 /** 00402 * 軸沿いボックスの読み込み 00403 * @return 軸沿いボックス 00404 */ 00405 virtual AxisAlignedBox readAxisAlignedBox(); 00406 00407 /** 00408 * 球の読み込み 00409 * @return 球 00410 */ 00411 virtual Sphere readSphere(); 00412 00413 //-------------------------------------------------------------------------- 00414 // ユーティリティ 00415 //-------------------------------------------------------------------------- 00416 /** 00417 * アライメントを取る 00418 */ 00419 virtual void align(); 00420 00421 /** 00422 * IDの読み込み 00423 * @return ID 00424 */ 00425 virtual String readID(); 00426 00427 //-------------------------------------------------------------------------- 00428 // メンバ 00429 //-------------------------------------------------------------------------- 00430 /// リーダ 00431 BinaryReader* reader_; 00432 /// 文字列バッファサイズ 00433 static const int stringBufferSize_ = 256; 00434 /// 文字列バッファ 00435 char stringBuffer_[stringBufferSize_]; 00436 /// ベースパス 00437 String basePath_; 00438 /// シーン 00439 Scene* scene_; 00440 /// ルートノード 00441 SceneNode* rootNode_; 00442 /// シーンノードマネージャ 00443 SceneNodeManager* sceneNodeManager_; 00444 /// ライトマネージャ 00445 LightManager* lightManager_; 00446 /// モデルマネージャ 00447 ModelManager* modelManager_; 00448 /// メッシュマネージャ 00449 MeshManager* meshManager_; 00450 /// メッシュデータマネージャ 00451 MeshDataManager* meshDataManager_; 00452 /// マテリアルマネージャ 00453 MaterialManager* materialManager_; 00454 /// テクスチャマネージャ 00455 TextureManager* textureManager_; 00456 /// ピクチャマネージャ 00457 PictureManager* pictureManager_; 00458 00459 private: 00460 // コピーコンストラクタの隠蔽 00461 BinarySceneLoader(const BinarySceneLoader& copy); 00462 00463 // 代入コピーの隠蔽 00464 void operator =(const BinarySceneLoader& copy); 00465 00466 }; 00467 00468 //------------------------------------------------------------------------------ 00469 } // End of namespace Lamp 00470 #endif // End of BINARY_SCENE_LOADER_H_ 00471 //------------------------------------------------------------------------------