Projekt

Obecné

Profil

Stáhnout (4.19 KB) Statistiky
| Větev: | Tag: | Revize:
1
#ifndef _ELEMENT_HPP
2
#define _ELEMENT_HPP
3

    
4
#include <QVector3D>
5
#include <vector>
6
using namespace std;
7

    
8
/// Třída Element je rodičem pro všechny prvky, které se objevují ve vykreslované
9
/// scéně (dráha, koule, ... ).
10
class Element
11
{
12
    public:
13
        /// Určuje, kolik hodnot za sebou ve vektoru DATA odpovídá jednomu vrcholu.
14
        static const int DATA_COUNT_FOR_VERTEX;
15
        
16
        /// Konstruktro. Konstruktor nastavuje typ prvku, tj. jestli se jedná o dráhu, kouli,
17
        /// apod. Typ prvku pak jde do OpenGL shader programu, kde se určuje,
18
        /// jaké natočení, posunutí, barva, atd. se má použít pro daný prvek.
19
        /// @param const int category - typ prvku.
20
        Element(const int category);
21
        
22
        /// @return konstantní ukazatel na hodnoty uložené ve vektoru DATA.
23
        const float *getData() const;
24
        
25
        /// @return počet hodnot uložených ve vektoru DATA.
26
        int dataCount() const;
27
        
28
        /// @return počet vrcholu, pro které jsou uloženy informace ve vektoru DATA.
29
        int vertexCount() const;
30
        
31
    protected:
32
        /// Identifikátor dráhy.
33
        /// Identifikátor dráhy.
34
        static const int TRAJECTORY;
35
        
36
        /// Identifikátor koule.
37
        static const int SPHERE;
38

    
39
        /// Identifikátor statické koule.
40
        static const int SPHERE_FIXED;
41

    
42
        /// Identifikátor šipky.
43
        static const int ARROW;
44
        
45
        /// Identifikátor speciální šipky (šipka, která je pouze informativní).
46
        static const int ARROW_SPECIAL;
47
        
48
        /// Identifikátor stěny.
49
        static const int WALL;
50
        
51
        // Nastavený typ prvku, tj. jestli se jedná o drahu, kouli, apod.
52
        int category;
53
        
54
        /// Uloží do vektoru DATA hodnoty týkající se daného vrcholu v.
55
        /// @param const QVector3D &v - souřadnice daného vrcholu.
56
        /// @param const QVector3D &n - normála pro vrchol v.
57
        void addVertex(const QVector3D &v, const QVector3D &n);
58
        
59
        /// Ze vstupních bodů vytvoří ctyřúhelník, který rozdělí na dva trojúhelníky.
60
        /// Poté, pro oba trojúhelníky, vypočte normály a zavolá funkci
61
        /// addTriangleWithNormal().
62
        /// @param const QVector3D &a - souřadnice prvního vrcholu.
63
        /// @param const QVector3D &b - souřadnice druhého vrcholu.
64
        /// @param const QVector3D &c - souřadnice třetího vrcholu.
65
        /// @param const QVector3D &d - souřadnice čtvrtého vrcholu.
66
        void addTetragon(const QVector3D &a, const QVector3D &b, const QVector3D &c, const QVector3D &d);
67
        
68
        /// Ze vstupních bodů vytvoří trojúhelník, vypočte normálu a zavolá
69
        /// funkci addTriangleWithNormal().
70
        /// @param const QVector3D &a - souřadnice prvního vrcholu.
71
        /// @param const QVector3D &b - souřadnice druhého vrcholu.
72
        /// @param const QVector3D &c - souřadnice třetího vrcholu.
73
        void addTriangle(const QVector3D &a, const QVector3D &b, const QVector3D &c);
74
        
75
        /// Funkce pro vypočtení normály daného trojuhelníka.
76
        /// @param const QVector3D &a - souřadnice prvního vrcholu.
77
        /// @param const QVector3D &b - souřadnice druhého vrcholu.
78
        /// @param const QVector3D &c - souřadnice třetího vrcholu.
79
        /// @return vypoctenou normálu pro dany trojúhelník.
80
        QVector3D normal(const QVector3D &a, const QVector3D &b, const QVector3D &c);
81
        
82
        /// Vyčistí vektor DATA (využíváno, když se přepínají dráhy).
83
        void clear();
84
        
85
    private:
86
        /// Datová struktura pro uložení informací (reálnych hodnot) pro každý vrchol.
87
        vector<float> data;
88
        
89
        /// Pouze volá, pro každý vrchol, funkci addVertex().
90
        /// @param const QVector3D &a - souřadnice prvního vrcholu.
91
        /// @param const QVector3D &b - souřadnice druhého vrcholu.
92
        /// @param const QVector3D &c - souřadnice třetího vrcholu.
93
        /// @param const QVector3D &n - normála pro trojúhelník ABC.
94
        void addTriangleWithNormal(const QVector3D &a, const QVector3D &b, const QVector3D &c, const QVector3D &n);
95
};
96

    
97
#endif
(4-4/10)