Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/branches/presentation/src/lib/graphics/importer/model.h

Last change on this file was 10314, checked in by patrick, 18 years ago

merged branche mount_point to trunk. this will add mount point abilities, bsp transparency fix and some other smaller stuff to this trunk

File size: 4.0 KB
Line 
1/*
2   orxonox - the future of 3D-vertical-scrollers
3
4   Copyright (C) 2004 orx
5
6   This program is free software; you can redistribute it and/or modify
7   it under the terms of the GNU General Public License as published by
8   the Free Software Foundation; either version 2, or (at your option)
9   any later version.
10
11   ### File Specific:
12   main-programmer: Patrick Boenzli
13   co-programmer:
14*/
15
16/*!
17 * @file model.h
18 *  Definition of an abstract model.
19 *  containing all needed for other models
20 */
21
22#ifndef _MODEL_H
23#define _MODEL_H
24
25#include "base_object.h"
26#include "vector.h"
27
28
29//! holds the information about a triangle
30typedef struct
31{
32  unsigned int   indexToVertices[3];   //!< index to the vertices of the triangle
33  unsigned int   indexToNormals[3];    //!< index to the normals of the triangle
34  unsigned int   indexToTexCoor[3];    //!< index to the texture coordinates
35} sTriangleExt;
36
37
38//! Model Information definitions
39typedef struct
40{
41  unsigned int     numVertices;          //!< number of Vertices in the Model
42  unsigned int     numTriangles;         //!< number of triangles in the Model
43  unsigned int     numNormals;           //!< how many Normals in the Model
44  unsigned int     numTexCoor;           //!< how many Texture Coordinates in the Model
45
46  const float*     pVertices;            //!< array of the Vertices
47  sTriangleExt*    pTriangles;           //!< array of all triangles
48  const float*     pNormals;             //!< array of the Normals
49  const float*     pTexCoor;             //!< array of the Texture Coordinates
50
51} modelInfo;
52
53
54//! skeleton informations for all mount points
55typedef struct
56{
57  std::string      name;                 //!< the name of the mount point
58  Vector           up;                   //!< the up vector
59  Vector           forward;              //!< the forward vector
60  Vector           center;               //!< the center vector
61} mountPointSkeleton;
62
63
64
65//! This class defines the basic components of a model
66class Model : virtual public BaseObject {
67  ObjectListDeclaration(Model);
68
69  typedef std::list<mountPointSkeleton>   mpList;
70
71  public:
72    virtual ~Model();
73
74    virtual void draw() const;
75
76    inline const modelInfo* getModelInfo() const { return &this->pModelInfo; }
77
78    /** @returns a Pointer to the Vertex-Array, if it was deleted it returns NULL */
79    inline const float* getVertexArray() const { return this->pModelInfo.pVertices; };
80    /** @returns the VertexCount of this Model */
81    inline unsigned int getVertexCount() const { return this->pModelInfo.numVertices; };
82
83    /** @returns a Pointer to the Normals-Array, if it was deleted it returns NULL */
84    inline const float* getNormalsArray() const { return this->pModelInfo.pNormals; };
85    /** @returns the NormalsCount of this Model */
86    inline unsigned int getNormalsCount() const { return this->pModelInfo.numNormals; };
87
88    /** @returns a Pointer to the TexCoord-Array, if it was deleted it returns NULL */
89    inline const float* getTexCoordArray() const { return this->pModelInfo.pTexCoor; };
90    /** @returns the TexCoord-Count of this Model */
91    inline unsigned int getTexCoordCount() const { return this->pModelInfo.numTexCoor; };
92
93    /** @returns the Array of triangles */
94    inline sTriangleExt* getTriangles() const { return this->pModelInfo.pTriangles; };
95    /** @returns the Count of Faces of this Model */
96    inline unsigned int getTriangleCount() const { return this->pModelInfo.numTriangles; };
97
98    /** function to extract the mount points from the model data */
99    virtual void extractMountPoints() {}
100    /** @returns a list of mounting points */
101    inline const mpList& getMountPoints() const { return this->mountPoints; }
102    void addMountPoint(const Vector& up, const Vector& forward, const Vector& center, const std::string& name);
103
104
105  protected:
106    Model();
107
108
109  protected:
110    modelInfo                        pModelInfo;      //!< Reference to the modelInfo
111    mpList                           mountPoints;     //!< a list of all mounting point skeletons
112};
113
114#endif /* _MODEL_H */
Note: See TracBrowser for help on using the repository browser.