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

LODSceneNode.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 LOD_SCENE_NODE_H_
00026 #define LOD_SCENE_NODE_H_
00027 
00028 #include <Graphics/SceneNode/SceneNode.h>
00029 
00030 namespace Lamp{
00031 
00032 //------------------------------------------------------------------------------
00033 /**
00034  * レベルオブディティールシーンノード
00035  */
00036 class LODSceneNode : public SceneNode{
00037 friend class SceneObjectManagerTemplate<SceneNode>;
00038 friend class SceneNodeManager;
00039 public:
00040     //--------------------------------------------------------------------------
00041     /**
00042      * コピー
00043      * @param copyMask コピーマスク
00044      * @return コピーされたシーンノード
00045      */
00046     virtual SceneNode* copy(u_int copyMask = 0) const{
00047         return copyLODSceneNode(copyMask);
00048     }
00049 
00050     //--------------------------------------------------------------------------
00051     /**
00052      * レベルオブディティールシーンノードコピー
00053      * @param copyMask コピーマスク
00054      * @return コピーされたレベルオブディティールシーンノード
00055      */
00056     virtual LODSceneNode* copyLODSceneNode(u_int copyMask = 0) const;
00057 
00058     //--------------------------------------------------------------------------
00059     // LOD
00060     //--------------------------------------------------------------------------
00061     /**
00062      * LOD分割数の設定
00063      * @param lodThresholdCount LOD分割数
00064      */
00065     virtual void setLODThresholdCount(int lodThresholdCount){
00066         Assert(lodThresholdCount >= 0);
00067         lodThresholdCount_ = lodThresholdCount;
00068         SafeArrayDelete(lodThreshold_);
00069         if(lodThresholdCount_ > 0){
00070             lodThreshold_ = new float[lodThresholdCount_];
00071             for(int i = 0; i < lodThresholdCount_; i++){
00072                 lodThreshold_[i] = 0.f;
00073             }
00074         }
00075     }
00076 
00077     /**
00078      * LOD分割数の取得
00079      * @return LOD分割数
00080      */
00081     virtual int getLODThresholdCount() const{ return lodThresholdCount_; }
00082 
00083     //--------------------------------------------------------------------------
00084     /**
00085      * LOD分割値の設定
00086      * @param index インデックス
00087      * @param lodThreshold LOD分割値
00088      */
00089     virtual void setLODThreshold(int index, float lodThreshold){
00090         Assert(index >= 0);
00091         Assert(index < lodThresholdCount_);
00092         lodThreshold_[index] = lodThreshold;
00093     }
00094 
00095     /**
00096      * LOD分割値の取得
00097      * @param index インデックス
00098      * @return LOD分割値
00099      */
00100     virtual float getLODThreshold(int index) const{
00101         Assert(index >= 0);
00102         Assert(index < lodThresholdCount_);
00103         return lodThreshold_[index];
00104     }
00105 
00106     //--------------------------------------------------------------------------
00107     // RTTI
00108     //--------------------------------------------------------------------------
00109     /**
00110      * レベルオブディティールシーンノードかどうか
00111      * @return レベルオブディティールシーンノードならtrue
00112      */
00113     virtual bool isLODSceneNode() const{ return true; }
00114 
00115 protected:
00116     //--------------------------------------------------------------------------
00117     /**
00118      * コンストラクタ
00119      * @param name 名前
00120      * @param scene シーン
00121      */
00122     LODSceneNode(const String& name, Scene* scene);
00123 
00124     /**
00125      * デストラクタ
00126      */
00127     virtual ~LODSceneNode();
00128 
00129     //--------------------------------------------------------------------------
00130     /**
00131      * 走査
00132      * @param parentMatrix 親行列
00133      * @param cameraPosition カメラ位置
00134      * @param parentEnabled 親が有効か
00135      * @param parentScaled 親がスケールを使用しているか
00136      * @param parentChanged 親に変更があったか
00137      */
00138     virtual void traverse(const Matrix34& parentMatrix,
00139         const Vector3& cameraPosition, bool parentEnabled, bool parentScaled,
00140         bool parentChanged);
00141 
00142 private:
00143     //--------------------------------------------------------------------------
00144     // LOD分割数
00145     int lodThresholdCount_;
00146     // LOD分割値
00147     float* lodThreshold_;
00148 
00149 };
00150 
00151 //------------------------------------------------------------------------------
00152 } // End of namespace Lamp
00153 #endif // End of LOD_SCENE_NODE_H_
00154 //------------------------------------------------------------------------------

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