surface.h 2.45 KB
Newer Older
1 2 3 4 5 6
#ifndef Surface_H
#define Surface_H

#include <iostream>
#include "glm/glm.hpp"
#include "env_map.h"
7 8 9

#include "utils.h"

10 11 12 13
#include "Algo/Tiling/Surface/triangular.h"

#include "Algo/Render/GL2/mapRender.h"
#include "Utils/vbo.h"
14 15
#include "Utils/Shaders/shaderSimpleColor.h"
#include "Algo/Render/GL2/colorPerFaceRender.h"
16

17
#include "Utils/Shaders/shaderColorPerVertex.h"
18 19 20 21 22 23
//particules



using namespace CGoGN ;
class Simulator;
24
class Surface
25 26 27 28
{
public:
    Surface(Simulator* sim, VEC3 offset) ;

29 30 31 32 33 34 35 36

    VEC3 getPosition(int index);
    unsigned int nbVertices;
    unsigned int nbTriangles;

    std::vector<PARTICULE*> parts_ ;
    std::vector<Triangle *> triangles_;

37
    SURFACE surfaceMap; // map
38
    CGoGN::Algo::MR::Primal::Adaptive::IHM2<PFPSurface> mapOperator;
39 40
    VertexAttribute<VEC3, SURFACE> positionSurface ; //position
    VertexAttribute<int, SURFACE> indexParticule; // index des particules de chaque sommet
41 42 43 44 45 46 47
    FaceAttribute<int, SURFACE> indexTriangle;
    FaceAttribute<VEC3,SURFACE> faceColor;





48
    void initPlane(); //initialisation d'une grille
49 50
    REAL faceMaxdistance(Face face); //calcul du rayon max d'une face
    bool subdiveMap(); //subdivision de la map
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
    void initOperators(SubdivisionType st); // fonction de sélection du type de subdivision pour l'ihm2


    void addGeneralCell (std::vector< std::pair<Dart,int> > general_belonging, Dart d);
    bool removeGeneralCell (std::vector< std::pair<Dart,int> > general_belonging,Dart d);



    std::vector<Dart> * belonging_cells;
    std::vector<Dart> * neighbor_cells;

    std::vector<std::pair<Dart, int> > general_belonging;
    std::vector<std::pair<Dart, int> > general_neighbors;
    double width;
    Simulator* sim_;
    unsigned int index_surface;


    float r; // indice de couleur rouge
    float g; // indice de couleur vert
    float b; // indice de couleur bleu
    float distanceColorationMini; // distance minimale pour commencer a virer rouge
    float distanceColorationMaxi; // distance a partir de laquelle on est completement rouge



77
    // visualisation
78 79 80
    void initGL(); // initialisation GL
    void draw();    // redessiner l'objet
    void changeColor(Triangle *t, float distance);
81 82
//    Algo::Render::GL2::MapRender* m_render; // render de l'objet
    Algo::Render::GL2::ColorPerFaceRender * m_render;
83 84 85 86 87
    Utils::VBO* m_positionVBO;  //VBO
    Utils::VBO* m_colorVBO;
//    Utils::ShaderSimpleColor* m_simpleColorShader;   // shader
    Utils::ShaderColorPerVertex * m_shader;

88 89 90 91 92 93
};




#endif