Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/src/orxonox/tools/Mesh.cc @ 2870

Last change on this file since 2870 was 2870, checked in by bknecht, 15 years ago

additional commentary to my last commit. maybe useful in the future, maybe useless as we already solved that issue

  • Property svn:eol-style set to native
File size: 3.3 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#include "OrxonoxStableHeaders.h"
30#include "Mesh.h"
31
32#include <sstream>
33#include <OgreEntity.h>
34#include <OgreSceneManager.h>
35#include <cassert>
36
37#include "core/Core.h"
38#include "util/Convert.h"
39#include "util/String.h"
40
41namespace orxonox
42{
43    unsigned int Mesh::meshCounter_s = 0;
44
45    Mesh::Mesh()
46    {
47        this->entity_ = 0;
48        this->bCastShadows_ = true;
49    }
50
51    Mesh::~Mesh()
52    {
53        if (this->entity_ && this->scenemanager_)
54            this->scenemanager_->destroyEntity(this->entity_);
55    }
56
57    void Mesh::setMeshSource(Ogre::SceneManager* scenemanager, const std::string& meshsource)
58    {
59        assert(scenemanager);
60
61        this->scenemanager_ = scenemanager;
62
63        if (this->entity_)
64            this->scenemanager_->destroyEntity(this->entity_);
65
66        if (Core::showsGraphics())
67        {
68            try
69            {
70                this->entity_ = this->scenemanager_->createEntity("Mesh" + convertToString(Mesh::meshCounter_s++), meshsource);
71                this->entity_->setCastShadows(this->bCastShadows_);
72
73                this->entity_->setNormaliseNormals(true);
74                /*
75                    Excerpt from Ogre forum:
76                    "Note that the above is only for the fixed function pipeline.
77                    If/when you get into shaders, you'll need to manually normalize() the normal inside the vertex or pixel shader."
78
79                    I don't know exactly what this means, but I put this here if there will be problems with shaders.
80                */
81            }
82            catch (...)
83            {
84                COUT(1) << "Error: Couln't load mesh \"" << meshsource << "\"" << std::endl;
85                this->entity_ = 0;
86            }
87        }
88    }
89
90    void Mesh::setCastShadows(bool bCastShadows)
91    {
92        this->bCastShadows_ = bCastShadows;
93        if (this->entity_)
94            this->entity_->setCastShadows(this->bCastShadows_);
95    }
96
97    const std::string& Mesh::getName() const
98    {
99        if (this->entity_)
100            return this->entity_->getName();
101        else
102            return BLANKSTRING;
103    }
104
105    void Mesh::setVisible(bool bVisible)
106    {
107        if (this->entity_)
108            this->entity_->setVisible(bVisible);
109    }
110
111    bool Mesh::isVisible() const
112    {
113        if (this->entity_)
114            return this->entity_->getVisible();
115        else
116            return false;
117    }
118}
Note: See TracBrowser for help on using the repository browser.