Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/shaders/src/orxonox/graphics/Model.h @ 9407

Last change on this file since 9407 was 9407, checked in by davidsa, 12 years ago

orxonox::RenderQueueListener: Implemented a rudimentary RenderQueueListener to enable the use of stencil buffer for elaborate alpha blending shaders without creating artifacts from overlapping faces. Also added a XML Port to assign a Model to a certain RenderQueueGroup. Needs to be improved to allow the use of strings for choosing the group instead of a static int which may change in the feature.

  • Property svn:eol-style set to native
File size: 3.5 KB
Line 
1/*
2 *   ORXONOX - the hottest 3D action shooter ever to exist
3 *                    > www.orxonox.net <
4 *
5 *
6 *   License notice:
7 *
8 *   This program is free software; you can redistribute it and/or
9 *   modify it under the terms of the GNU General Public License
10 *   as published by the Free Software Foundation; either version 2
11 *   of the License, or (at your option) any later version.
12 *
13 *   This program is distributed in the hope that it will be useful,
14 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
15 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 *   GNU General Public License for more details.
17 *
18 *   You should have received a copy of the GNU General Public License
19 *   along with this program; if not, write to the Free Software
20 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
21 *
22 *   Author:
23 *      Fabian 'x3n' Landau
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29#ifndef _Model_H__
30#define _Model_H__
31
32#include "OrxonoxPrereqs.h"
33
34#include <string>
35#include "tools/Mesh.h"
36#include "RenderQueueListener.h"
37#include "worldentities/StaticEntity.h"
38
39namespace orxonox
40{
41    class _OrxonoxExport Model : public StaticEntity
42    {
43        public:
44            Model(BaseObject* creator);
45            virtual ~Model();
46
47            void setConfigValues();
48
49            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
50
51            virtual void changedVisibility();
52
53            inline const Mesh& getMesh() const
54                { return this->mesh_; }
55
56            inline void setMeshSource(const std::string& meshname)
57                { this->meshSrc_ = meshname; this->changedMesh(); }
58            inline const std::string& getMeshSource() const
59                { return this->meshSrc_; }
60
61            //TODO: let this function accept strings instead of ints for the XML Port, so we don't have to rely on static int values which may change in future Ogre revisions
62            inline void setRenderQueueGroup(const int renderQueueGroup)
63                { this->renderQueueGroup_ = renderQueueGroup; this->changedRenderQueueGroup(); }
64            inline const int getRenderQueueGroup() const
65                { return this->renderQueueGroup_; }
66
67            inline void setCastShadows(bool bCastShadows)
68                { this->bCastShadows_ = bCastShadows; this->changedShadows(); }
69            inline bool getCastShadows() const
70                { return this->bCastShadows_; }
71
72            inline void setMaterial(const std::string& materialname)
73                { this->materialName_ = materialname; this->changedMaterial(); }
74            inline const std::string& getMaterial() const
75                { return this->materialName_; }
76
77        protected:
78            void registerVariables();
79            void changedMesh();
80            void changedRenderQueueGroup();
81            void changedMaterial();
82            void changedShadows();
83
84            //LoD
85            void enableLod();
86
87            inline void setLodLevel(float lodLevel)
88                { this->lodLevel_ =  lodLevel; }
89            inline float getLodLevel() const
90                { return this->lodLevel_; }
91            float getBiggestScale(Vector3 scale3d);
92
93            std::string meshSrc_;
94            Mesh mesh_;
95            bool bCastShadows_;
96            int renderQueueGroup_;
97            std::string materialName_;
98
99            //LoD
100            bool bGlobalEnableLod_;
101            float lodLevel_;
102            bool bLodEnabled_;
103            unsigned int numLodLevels_;
104            float lodReductionRate_;
105
106    };
107}
108
109#endif /* _Model_H__ */
Note: See TracBrowser for help on using the repository browser.