Main Page | Namespace List | Class Hierarchy | Alphabetical List | Compound List | File List | Namespace Members | Compound Members | File Members

Mesh.h

Go to the documentation of this file.
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 MESH_H_
00026 #define MESH_H_
00027 
00028 #include <Graphics/Scene/SceneObject.h>
00029 #include <Graphics/System/GraphicsDeviceObjectHolder.h>
00030 #include <Core/Container/ArrayList.h>
00031 
00032 namespace Lamp{
00033 
00034 class Model;
00035 class MeshData;
00036 class Material;
00037 class RigidMesh;
00038 class CharacterMesh;
00039 
00040 //------------------------------------------------------------------------------
00041 /**
00042  * メッシュ
00043  */
00044 class Mesh : public SceneObject , public GraphicsDeviceObjectHolder{
00045 friend class SceneObjectManagerTemplate<Mesh>;
00046 friend class Renderer;
00047 friend class MeshManager;
00048 friend class Model;
00049 friend class Shader;
00050 friend class FixedShader;
00051 public:
00052     /**
00053      * リファレンスカウントの取得
00054      * @return リファレンスカウント
00055      */
00056     virtual int getReferenceCount() const{
00057         if(parent_ != NULL){ return 1; }
00058         return 0;
00059     }
00060 
00061     //--------------------------------------------------------------------------
00062     /**
00063      * コピー
00064      * @param copyMask コピーマスク
00065      * @return コピーされたメッシュ
00066      */
00067     virtual Mesh* copy(u_int copyMask = 0) const = 0;
00068 
00069     /**
00070      * 再帰的破棄
00071      * @param mesh 破棄するメッシュ
00072      * @return 破棄したオブジェクト数
00073      */
00074     static int recursiveDestroy(Mesh* mesh);
00075 
00076     //--------------------------------------------------------------------------
00077     /**
00078      * 親の取得
00079      * @return 親
00080      */
00081     virtual Model* getParent() const{ return parent_; }
00082 
00083     //--------------------------------------------------------------------------
00084     /**
00085      * グローバルでスケールを使用しているか
00086      * @return グローバルでスケールを使用しているならtrue
00087      */
00088     virtual bool isGlobalScaled() const{ return globalScaled_; }
00089 
00090     /**
00091      * 法線の正規化を必要とするか
00092      * @return 法線の正規化を必要とするならtrue
00093      */
00094     virtual bool requireNormalize() const{ return false; }
00095 
00096     //--------------------------------------------------------------------------
00097     // バウンディングスフィア
00098     //--------------------------------------------------------------------------
00099     /**
00100      * バウンディングスフィアの設定
00101      * @param boundingSphere 設定するバウンディングスフィア
00102      */
00103     virtual void setBoundingSphere(const Sphere& boundingSphere);
00104 
00105     /**
00106      * バウンディングスフィアの取得
00107      * @return バウンディングスフィア
00108      */
00109     virtual const Sphere& getBoundingSphere() const;
00110 
00111     /**
00112      * ワールドバウンディングスフィアの取得
00113      * @return ワールドバウンディングスフィア
00114      */
00115     virtual const Sphere& getWorldBoundingSphere() const{
00116         return worldBoundingSphere_;
00117     }
00118 
00119     //--------------------------------------------------------------------------
00120     // バウンディングボックス
00121     //--------------------------------------------------------------------------
00122     /**
00123      * バウンディングボックスの設定
00124      * @param boundingBox 設定するバウンディングボックス
00125      */
00126     virtual void setBoundingBox(const AxisAlignedBox& boundingBox);
00127 
00128     /**
00129      * バウンディングボックスの取得
00130      * @return バウンディングボックス
00131      */
00132     virtual const AxisAlignedBox& getBoundingBox() const;
00133 
00134     /**
00135      * ワールドバウンディングボックスの取得
00136      * @return ワールドバウンディングボックス
00137      */
00138     virtual const AxisAlignedBox& getWorldBoundingBox() const{
00139         return worldBoundingBox_;
00140     }
00141 
00142     //--------------------------------------------------------------------------
00143     // 中心
00144     //--------------------------------------------------------------------------
00145     /**
00146      * 中心の取得
00147      * @return 中心
00148      */
00149     virtual const Vector3& getCenter() const;
00150 
00151     /**
00152      * ワールド中心の取得
00153      * @return ワールド中心
00154      */
00155     virtual const Vector3& getWorldCenter() const{
00156         return worldBoundingSphere_.getCenter();
00157     }
00158 
00159     //--------------------------------------------------------------------------
00160     /**
00161      * 有効、無効の設定
00162      * @param enabled trueなら有効、falseなら無効
00163      */
00164     virtual void setEnabled(bool enabled){ enabled_ = enabled; }
00165 
00166     /**
00167      * 有効、無効の取得
00168      * @return trueなら有効、falseなら無効
00169      */
00170     virtual bool isEnabled() const{ return enabled_; }
00171 
00172     /**
00173      * グローバルでの有効、無効の取得
00174      * @return trueなら有効、falseなら無効
00175      */
00176     virtual bool isGlobalEnabled() const{ return globalEnabled_; }
00177 
00178     //--------------------------------------------------------------------------
00179     // メッシュデータインターフェース
00180     //--------------------------------------------------------------------------
00181     /**
00182      * メッシュデータの設定
00183      * @param meshData 設定するメッシュデータ
00184      */
00185     virtual void setMeshData(MeshData* meshData);
00186 
00187     /**
00188      * メッシュデータの取得
00189      * @return メッシュデータ
00190      */
00191     virtual MeshData* getMeshData() const{ return meshData_; }
00192 
00193     /**
00194      * メッシュデータの削除
00195      */
00196     virtual void removeMeshData(){ setMeshData(NULL); }
00197 
00198     //--------------------------------------------------------------------------
00199     // マテリアルインターフェース
00200     //--------------------------------------------------------------------------
00201     /**
00202      * マテリアルの設定
00203      * @param material 設定するマテリアル
00204      */
00205     virtual void setMaterial(Material* material);
00206 
00207     /**
00208      * マテリアルの取得
00209      * @return マテリアル
00210      */
00211     virtual Material* getMaterial() const{ return material_; }
00212 
00213     /**
00214      * マテリアルの削除
00215      */
00216     virtual void removeMaterial(){ setMaterial(NULL); }
00217 
00218     //--------------------------------------------------------------------------
00219     // プリミティブタイプ
00220     //--------------------------------------------------------------------------
00221     /// プリミティブタイプ
00222     enum PrimitiveType{
00223         /// トライアングルリスト
00224         triangleList = 0,
00225         /// インデックストライアングルリスト
00226         indexedTriangleList,
00227         /// プリミティブタイプ最大値
00228         ptMax,
00229     };
00230 
00231     /**
00232      * プリミティブタイプがインデックスを持つかどうか
00233      * @param primitiveType プリミティブタイプ
00234      * @return プリミティブタイプがインデックスを持つならtrue
00235      */
00236     static bool primitiveTypeHasIndex(PrimitiveType primitiveType);
00237 
00238     /**
00239      * プリミティブタイプから文字列への変換
00240      * @param primitiveType プリミティブタイプ
00241      * @return プリミティブタイプ文字列
00242      */
00243     static String primitiveTypeToString(PrimitiveType primitiveType);
00244 
00245     /**
00246      * 文字列からプリミティブタイプへの変換
00247      * @param primitiveTypeString プリミティブタイプ文字列
00248      * @return プリミティブタイプ
00249      */
00250     static PrimitiveType primitiveTypeFromString(
00251         const String& primitiveTypeString);
00252 
00253     //--------------------------------------------------------------------------
00254     // メッシュインターフェース
00255     //--------------------------------------------------------------------------
00256     /**
00257      * プリミティブタイプの設定
00258      * @param primitiveType プリミティブタイプ
00259      */
00260     virtual void setPrimitiveType(Mesh::PrimitiveType primitiveType);
00261 
00262     /**
00263      * プリミティブタイプの取得
00264      * @return プリミティブタイプ
00265      */
00266     virtual Mesh::PrimitiveType getPrimitiveType() const;
00267 
00268     /**
00269      * プリミティブカウントの取得
00270      * @return プリミティブカウント
00271      */
00272     virtual int getPrimitiveCount() const;
00273 
00274     /**
00275      * 三角の取得
00276      * @param index プリミティブインデックス
00277      * @return 三角
00278      */
00279     virtual Triangle getTriangle(int index) const;
00280 
00281     //--------------------------------------------------------------------------
00282     /**
00283      * 頂点インデックスを持つかどうか
00284      * @return 頂点インデックスを持つならtrue
00285      */
00286     virtual bool hasVertexIndices() const;
00287 
00288     /**
00289      * 頂点インデックス数の設定
00290      * @param vertexIndexCount 頂点インデックス数
00291      */
00292     virtual void setVertexIndexCount(int vertexIndexCount);
00293 
00294     /**
00295      * 頂点インデックス数の取得
00296      * @return 頂点インデックス数
00297      */
00298     virtual int getVertexIndexCount() const;
00299 
00300     /**
00301      * 頂点インデックスの設定
00302      * @param index インデックス
00303      * @param vertexIndex 頂点インデックス
00304      */
00305     virtual void setVertexIndex(int index, int vertexIndex);
00306 
00307     /**
00308      * 頂点インデックスの取得
00309      * @param index インデックス
00310      * @return 頂点インデックス
00311      */
00312     virtual int getVertexIndex(int index) const;
00313 
00314     /**
00315      * 頂点インデックス配列の取得
00316      * @return 頂点インデックス配列
00317      */
00318     virtual const u_short* getVertexIndexArray();
00319 
00320     //--------------------------------------------------------------------------
00321     /**
00322      * 頂点数の設定
00323      * @param vertexCount 頂点数
00324      */
00325     virtual void setVertexCount(int vertexCount);
00326 
00327     /**
00328      * 頂点数の取得
00329      * @return 頂点数
00330      */
00331     virtual int getVertexCount() const;
00332 
00333     //--------------------------------------------------------------------------
00334     /**
00335      * 位置の設定
00336      * @param index インデックス
00337      * @param position 位置
00338      */
00339     virtual void setPosition(int index, const Vector3& position);
00340 
00341     /**
00342      * 位置の取得
00343      * @param index インデックス
00344      * @return 位置
00345      */
00346     virtual const Vector3& getPosition(int index) const;
00347 
00348     /**
00349      * 位置配列の取得
00350      * @return 位置配列
00351      */
00352     virtual const Vector3* getPositionArray() const;
00353 
00354     //--------------------------------------------------------------------------
00355     /**
00356      * 法線を有効にするかどうか
00357      * @param normalFlag trueなら法線が有効になる
00358      */
00359     virtual void enableNormal(bool normalFlag);
00360 
00361     /**
00362      * 法線が有効かどうか
00363      * @return 法線が有効ならtrue
00364      */
00365     virtual bool hasNormal() const;
00366 
00367     /**
00368      * 法線の設定
00369      * @param index インデックス
00370      * @param normal 法線
00371      */
00372     virtual void setNormal(int index, const Vector3& normal);
00373 
00374     /**
00375      * 法線の取得
00376      * @param index インデックス
00377      * @return 法線
00378      */
00379     virtual const Vector3& getNormal(int index) const;
00380 
00381     /**
00382      * 法線配列の取得
00383      * @return 法線配列
00384      */
00385     virtual const Vector3* getNormalArray() const;
00386 
00387     //--------------------------------------------------------------------------
00388     /**
00389      * カラーを有効にするかどうか
00390      * @param colorFlag trueならカラーが有効になる
00391      */
00392     virtual void enableColor(bool colorFlag);
00393 
00394     /**
00395      * カラーが有効かどうか
00396      * @return カラーが有効ならtrue
00397      */
00398     virtual bool hasColor() const;
00399 
00400     /**
00401      * カラーの設定
00402      * @param index インデックス
00403      * @param color カラー
00404      */
00405     virtual void setColor(int index, const Color4c& color);
00406 
00407     /**
00408      * カラーの取得
00409      * @param index インデックス
00410      * @return カラー
00411      */
00412     virtual const Color4c& getColor(int index) const;
00413 
00414     /**
00415      * カラー配列の取得
00416      * @return カラー配列
00417      */
00418     virtual const Color4c* getColorArray() const;
00419 
00420     //--------------------------------------------------------------------------
00421     /**
00422      * テクスチャ座標セット数の設定
00423      * @param texCoordSetCount テクスチャ座標セット数
00424      */
00425     virtual void setTexCoordSetCount(int texCoordSetCount);
00426 
00427     /**
00428      * テクスチャ座標セット数の設定
00429      * @return テクスチャ座標セット数
00430      */
00431     virtual int getTexCoordSetCount() const;
00432 
00433     //--------------------------------------------------------------------------
00434     /**
00435      * テクスチャ座標タイプの設定
00436      * @param texCoordSet テクスチャ座標セット
00437      * @param texCoordType テクスチャ座標タイプ
00438      */
00439     virtual void setTexCoordType(int texCoordSet, TexCoord::Type texCoordType);
00440 
00441     /**
00442      * テクスチャ座標タイプの取得
00443      * @param texCoordSet テクスチャ座標セット
00444      * @return テクスチャ座標タイプ
00445      */
00446     virtual TexCoord::Type getTexCoordType(int texCoordSet) const;
00447 
00448     /**
00449      * テクスチャ座標タイプ配列の取得
00450      * @return テクスチャ座標タイプ配列
00451      */
00452     virtual const TexCoord::Type* getTexCoordTypeArray() const;
00453 
00454     //--------------------------------------------------------------------------
00455     /**
00456      * テクスチャ座標の設定
00457      * @param index インデックス
00458      * @param texCoordSet テクスチャ座標セット
00459      * @param texCoord テクスチャ座標
00460      * @param numTexCoord いくつのテクスチャ座標か
00461      */
00462     virtual void setTexCoord(
00463         int index, int texCoordSet, const float* texCoord, int numTexCoord);
00464 
00465     /**
00466      * テクスチャ座標配列の取得
00467      * @return テクスチャ座標配列
00468      */
00469     virtual const float* const* getTexCoordArray() const;
00470 
00471     /**
00472      * テクスチャ座標配列の取得
00473      * @param texCoordSet テクスチャ座標セット
00474      * @return テクスチャ座標配列
00475      */
00476     virtual const float* getTexCoordArray(int texCoordSet) const;
00477 
00478     /**
00479      * テクスチャ座標配列サイズの取得
00480      * @param texCoordSet テクスチャ座標セット
00481      * @return テクスチャ座標配列サイズ
00482      */
00483     virtual int getTexCoordArraySize(int texCoordSet) const;
00484 
00485     //--------------------------------------------------------------------------
00486     /**
00487      * 一次元テクスチャ座標の設定
00488      * @param index インデックス
00489      * @param texCoordSet テクスチャ座標セット
00490      * @param texCoord 一次元テクスチャ座標
00491      */
00492     virtual void setTexCoord1(
00493         int index, int texCoordSet, const TexCoord1& texCoord);
00494 
00495     /**
00496      * 一次元テクスチャ座標の取得
00497      * @param index インデックス
00498      * @param texCoordSet テクスチャ座標セット
00499      * @return 一次元テクスチャ座標
00500      */
00501     virtual const TexCoord1& getTexCoord1(int index, int texCoordSet) const;
00502 
00503     /**
00504      * 一次元テクスチャ座標配列の取得
00505      * @param texCoordSet テクスチャ座標セット
00506      * @return 一次元テクスチャ座標配列
00507      */
00508     virtual const TexCoord1* getTexCoord1Array(int texCoordSet) const;
00509 
00510     //--------------------------------------------------------------------------
00511     /**
00512      * 二次元テクスチャ座標の設定
00513      * @param index インデックス
00514      * @param texCoordSet テクスチャ座標セット
00515      * @param texCoord 二次元テクスチャ座標
00516      */
00517     virtual void setTexCoord2(
00518         int index, int texCoordSet, const TexCoord2& texCoord);
00519 
00520     /**
00521      * 二次元テクスチャ座標の取得
00522      * @param index インデックス
00523      * @param texCoordSet テクスチャ座標セット
00524      * @return 二次元テクスチャ座標
00525      */
00526     virtual const TexCoord2& getTexCoord2(int index, int texCoordSet) const;
00527 
00528     /**
00529      * 二次元テクスチャ座標配列の取得
00530      * @param texCoordSet テクスチャ座標セット
00531      * @return 二次元テクスチャ座標配列
00532      */
00533     virtual const TexCoord2* getTexCoord2Array(int texCoordSet) const;
00534 
00535     //--------------------------------------------------------------------------
00536     /**
00537      * 三次元テクスチャ座標の設定
00538      * @param index インデックス
00539      * @param texCoordSet テクスチャ座標セット
00540      * @param texCoord 三次元テクスチャ座標
00541      */
00542     virtual void setTexCoord3(
00543         int index, int texCoordSet, const TexCoord3& texCoord);
00544 
00545     /**
00546      * 三次元テクスチャ座標の取得
00547      * @param index インデックス
00548      * @param texCoordSet テクスチャ座標セット
00549      * @return 三次元テクスチャ座標
00550      */
00551     virtual const TexCoord3& getTexCoord3(int index, int texCoordSet) const;
00552 
00553     /**
00554      * 三次元テクスチャ座標配列の取得
00555      * @param texCoordSet テクスチャ座標セット
00556      * @return 三次元テクスチャ座標配列
00557      */
00558     virtual const TexCoord3* getTexCoord3Array(int texCoordSet) const;
00559 
00560     //--------------------------------------------------------------------------
00561     /**
00562      * 四次元テクスチャ座標の設定
00563      * @param index インデックス
00564      * @param texCoordSet テクスチャ座標セット
00565      * @param texCoord 四次元テクスチャ座標
00566      */
00567     virtual void setTexCoord4(
00568         int index, int texCoordSet, const TexCoord4& texCoord);
00569 
00570     /**
00571      * 四次元テクスチャ座標の取得
00572      * @param index インデックス
00573      * @param texCoordSet テクスチャ座標セット
00574      * @return 四次元テクスチャ座標
00575      */
00576     virtual const TexCoord4& getTexCoord4(int index, int texCoordSet) const;
00577 
00578     /**
00579      * 四次元テクスチャ座標配列の取得
00580      * @param texCoordSet テクスチャ座標セット
00581      * @return 四次元テクスチャ座標配列
00582      */
00583     virtual const TexCoord4* getTexCoord4Array(int texCoordSet) const;
00584 
00585     //--------------------------------------------------------------------------
00586     /**
00587      * 頂点あたりボーン数の設定
00588      * @param bonesPerVertex 頂点あたりボーン数
00589      */
00590     virtual void setBonesPerVertex(int bonesPerVertex);
00591 
00592     /**
00593      * 頂点あたりボーン数の取得
00594      * @return 頂点あたりボーン数
00595      */
00596     virtual int getBonesPerVertex() const;
00597 
00598     /**
00599      * ボーンインデックスが有効かどうか
00600      * @return ボーンインデックスが有効ならtrue
00601      */
00602     virtual bool hasBoneIndex() const;
00603 
00604     /**
00605      * ボーンインデックスの設定
00606      * @param vertexIndex 頂点インデックス
00607      * @param boneNumber ボーン番号
00608      * @param boneIndex ボーンインデックス
00609      */
00610     virtual void setBoneIndex(
00611         int vertexIndex, int boneNumber, u_char boneIndex);
00612 
00613     /**
00614      * ボーンインデックスの設定
00615      * @param vertexIndex 頂点インデックス
00616      * @param boneIndex ボーンインデックス
00617      */
00618     virtual void setBoneIndex(int vertexIndex, u_char boneIndex);
00619 
00620     /**
00621      * ボーンインデックスの取得
00622      * @param vertexIndex 頂点インデックス
00623      * @param boneNumber ボーン番号
00624      * @return ボーンインデックス
00625      */
00626     virtual u_char getBoneIndex(int vertexIndex, int boneNumber) const;
00627 
00628     /**
00629      * ボーンインデックスの取得
00630      * @param vertexIndex 頂点インデックス
00631      * @return ボーンインデックス
00632      */
00633     virtual u_char getBoneIndex(int vertexIndex) const;
00634 
00635     /**
00636      * ボーンインデックス配列の取得
00637      * @return ボーンインデックス配列
00638      */
00639     virtual const u_char* getBoneIndexArray() const;
00640 
00641     //--------------------------------------------------------------------------
00642     /**
00643      * 頂点当たりウェイト数の取得
00644      * @return 頂点あたりウェイト数
00645      */
00646     virtual int getWeightsPerVertex() const;
00647 
00648     /**
00649      * ウェイトが有効かどうか
00650      * @return ウェイトが有効ならtrue
00651      */
00652     virtual bool hasWeight() const;
00653 
00654     /**
00655      * ウェイトの設定
00656      * @param vertexIndex 頂点インデックス
00657      * @param boneNumber ボーン番号
00658      * @param weight ウェイト
00659      */
00660     virtual void setWeight(int vertexIndex, int boneNumber, float weight);
00661 
00662     /**
00663      * ウェイトの取得
00664      * @param vertexIndex 頂点インデックス
00665      * @param boneNumber ボーン番号
00666      * @return ウェイト
00667      */
00668     virtual float getWeight(int vertexIndex, int boneNumber) const;
00669 
00670     /**
00671      * ウェイト配列の取得
00672      * @return ウェイト配列
00673      */
00674     virtual const float* getWeightArray() const;
00675 
00676     //--------------------------------------------------------------------------
00677     /**
00678      * デバイスオブジェクトの初期化
00679      * @return 成功したらtrueを返す
00680      */
00681     virtual bool initializeGraphicsDeviceObjects(){ return true; }
00682 
00683     /**
00684      * デバイスオブジェクトの削除
00685      */
00686     virtual void deleteGraphicsDeviceObjects(){}
00687 
00688     /**
00689      * デバイスオブジェクトのリストア
00690      * @return 成功したらtrueを返す
00691      */
00692     virtual bool restoreGraphicsDeviceObjects(){ return true; }
00693 
00694     /**
00695      * デバイスオブジェクトの無効化
00696      */
00697     virtual void invalidateGraphicsDeviceObjects(){}
00698 
00699     //--------------------------------------------------------------------------
00700     // RTTI
00701     //--------------------------------------------------------------------------
00702     /**
00703      * メッシュかどうか
00704      * @return メッシュならtrue
00705      */
00706     virtual bool isMesh() const{ return true; }
00707 
00708     //--------------------------------------------------------------------------
00709     /**
00710      * 剛体メッシュかどうか
00711      * @return 剛体メッシュならtrue
00712      */
00713     virtual bool isRigidMesh() const{ return false; }
00714 
00715     /**
00716      * 剛体メッシュへのキャスト
00717      * @return 剛体メッシュ。型が違えばNULLを返す。
00718      */
00719     virtual RigidMesh* castRigidMesh() const{
00720         if(isRigidMesh()){ return (RigidMesh*)this; }
00721         return NULL;
00722     }
00723 
00724     //--------------------------------------------------------------------------
00725     /**
00726      * キャラクタメッシュかどうか
00727      * @return キャラクタメッシュならtrue
00728      */
00729     virtual bool isCharacterMesh() const{ return false; }
00730 
00731     /**
00732      * キャラクタメッシュへのキャスト
00733      * @return キャラクタメッシュ。型が違えばNULLを返す。
00734      */
00735     virtual CharacterMesh* castCharacterMesh() const{
00736         if(isCharacterMesh()){ return (CharacterMesh*)this; }
00737         return NULL;
00738     }
00739 
00740     //--------------------------------------------------------------------------
00741 protected:
00742     /**
00743      * コンストラクタ
00744      * @param name 名前
00745      * @param scene シーン
00746      */
00747     Mesh(const String& name, Scene* scene);
00748 
00749     /**
00750      * デストラクタ
00751      */
00752     virtual ~Mesh();
00753 
00754     /**
00755      * メッシュの値コピー
00756      * @param destination コピー先メッシュ
00757      * @param copyMask コピーマスク
00758      */
00759     virtual void copyMeshValue(Mesh* destination, u_int copyMask) const;
00760 
00761     //--------------------------------------------------------------------------
00762     // バッファアクセス
00763     //--------------------------------------------------------------------------
00764     /**
00765      * インデックスバッファの取得
00766      * @return インデックスバッファ
00767      */
00768     virtual Direct3DIndexBuffer* getIndexBuffer();
00769 
00770     /**
00771      * 頂点記述の取得
00772      * @return 頂点記述
00773      */
00774     virtual Direct3DVertexDeclaration* getVertexDeclaration();
00775 
00776     /**
00777      * 頂点サイズの取得
00778      * @return 頂点サイズ
00779      */
00780     virtual int getVertexSize();
00781 
00782     /**
00783      * 頂点バッファの構築
00784      * @return 頂点バッファ
00785      */
00786     virtual Direct3DVertexBuffer* getVertexBuffer();
00787 
00788     //--------------------------------------------------------------------------
00789     // キャラクタ変形
00790     //--------------------------------------------------------------------------
00791     /**
00792      * キャラクタ変形
00793      * @return キャラクタ変形を行ったらtrue
00794      */
00795     virtual bool characterDeform(){ return false; }
00796 
00797     //--------------------------------------------------------------------------
00798     // 変形バッファアクセス
00799     //--------------------------------------------------------------------------
00800     /**
00801      * 変形頂点記述の取得
00802      * @return 変形頂点記述
00803      */
00804     virtual Direct3DVertexDeclaration* getDeformedVertexDeclaration(){
00805         Assert(false);
00806         return NULL;
00807     }
00808 
00809     /**
00810      * 変形頂点サイズの取得
00811      * @return 変形頂点サイズ
00812      */
00813     virtual int getDeformedVertexSize(){
00814         Assert(false);
00815         return 0;
00816     }
00817 
00818     /**
00819      * 変形頂点バッファの構築
00820      * @return 変形頂点バッファ
00821      */
00822     virtual Direct3DVertexBuffer* getDeformedVertexBuffer(){
00823         Assert(false);
00824         return NULL;
00825     }
00826 
00827     //--------------------------------------------------------------------------
00828     /**
00829      * レンダリングテンポラリデータの設定
00830      * @param renderingTemporaryData レンダリングテンポラリデータ
00831      */
00832     virtual void setRenderingTemporaryData(float renderingTemporaryData){
00833         renderingTemporaryData_ = renderingTemporaryData;
00834     }
00835 
00836     /**
00837      * レンダリングテンポラリデータの取得
00838      */
00839     virtual float getRenderingTemporaryData() const{
00840         return renderingTemporaryData_;
00841     }
00842 
00843     //--------------------------------------------------------------------------
00844     /**
00845      * 親の設定
00846      * @param parent 設定する親
00847      */
00848     virtual void setParent(Model* parent){
00849         Assert(parent != NULL);
00850         Assert(parent_ == NULL);
00851         parent_ = parent;
00852         globalEnabled_ = false;
00853     }
00854 
00855     /**
00856      * 親の削除
00857      * @param parent 削除する親
00858      */
00859     virtual void removeParent(Model* parent){
00860         Assert(parent_ != NULL);
00861         Assert(parent_ == parent);
00862         parent_ = NULL;
00863         globalEnabled_ = false;
00864     }
00865 
00866 protected:
00867     //--------------------------------------------------------------------------
00868     /**
00869      * 走査
00870      * @param parentMatrix 親行列
00871      * @param parentEnabled 親が有効か
00872      * @param parentScaled 親がスケールを使用しているか
00873      * @param parentChanged 親に変更があったか
00874      */
00875     virtual void traverse(const Matrix34& parentMatrix, bool parentEnabled,
00876         bool parentScaled, bool parentChanged);
00877 
00878 private:
00879     //--------------------------------------------------------------------------
00880     // 親
00881     Model* parent_;
00882     // メッシュデータ
00883     MeshData* meshData_;
00884     // マテリアル
00885     Material* material_;
00886     // ワールドバウンディングスフィア
00887     Sphere worldBoundingSphere_;
00888     // ワールドバウンディングボックス
00889     AxisAlignedBox worldBoundingBox_;
00890     // レンダリングテンポラリデータ
00891     float renderingTemporaryData_;
00892     // 有効、無効フラグ
00893     bool enabled_;
00894     // グローバルでの有効無効フラグ
00895     bool globalEnabled_;
00896     // グローバルでのスケールフラグ
00897     bool globalScaled_;
00898 
00899     // プリミティブタイプ文字列テーブル
00900     static const String primitiveTypeStringTable[];
00901 
00902 };
00903 
00904 //------------------------------------------------------------------------------
00905 } // End of namespace Lamp
00906 #endif // End of MESH_H_
00907 //------------------------------------------------------------------------------
00908 

Generated on Wed Mar 16 10:29:33 2005 for Lamp by doxygen 1.3.2