source: trunk/packages/vizservers/nanovis/NvLIC.h @ 3464

Last change on this file since 3464 was 3177, checked in by mmc, 12 years ago

Updated all of the copyright notices to reference the transfer to
the new HUBzero Foundation, LLC.

  • Property svn:eol-style set to native
File size: 3.0 KB
Line 
1/* -*- mode: c++; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2/*
3 * ----------------------------------------------------------------------
4 * NvLIC.h: line integral convolution class
5 *
6 * ======================================================================
7 *  AUTHOR:  Wei Qiao <qiaow@purdue.edu>
8 *           Purdue Rendering and Perceptualization Lab (PURPL)
9 *
10 *  Copyright (c) 2004-2012  HUBzero Foundation, LLC
11 *
12 *  See the file "license.terms" for information on usage and
13 *  redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
14 * ======================================================================
15 */
16#ifndef NV_LIC_H
17#define NV_LIC_H
18
19#include <GL/glew.h>
20
21#include "Vector3.h"
22#include "Volume.h"
23#include "NvShader.h"
24
25class NvLIC
26{
27public:
28    NvLIC(int size, int width, int height, int axis, float offset);
29    ~NvLIC();
30
31    /// project 3D vectors to a 2D slice for line integral convolution
32    void convolve();
33
34    /// Display the convolution result
35    void render();
36
37    void makePatterns();
38
39    void makeMagnitudes();
40
41    void getVelocity(float x, float y, float *px, float *py);
42
43    void getSlice();
44
45    void setOffset(float offset);
46
47    /**
48     * @brief Specify the perpendicular axis
49     *
50     * 0 : x axis<br>
51     * 1 : y axis<br>
52     * 2 : z axis<br>
53     */
54    void setAxis(int axis);
55
56    void setVectorField(unsigned int texID, const Vector3& origin,
57                        float scaleX, float scaleY, float scaleZ, float max);
58
59    void reset();
60
61    void visible(bool state)
62    {
63        _isHidden = !state;
64    }
65
66    bool visible() const
67    {
68        return (!_isHidden);
69    }
70
71    void active(bool state)
72    {
73        _activate = state;
74    }
75
76    bool active() const
77    {
78        return _activate;
79    }
80
81private:
82    /**
83     * @brief the normal vector of the NvLIC plane,
84     * the inherited Vector3 location is its center
85     */
86    Vector3 _normal;
87
88    int _width, _height;
89    int _size;                  /**< The lic is a square of size, it can
90                                   be stretched */
91    float *_sliceVector;        /**< Storage for the per slice vectors
92                                   driving the flow */
93    Vector3 _scale;             /**< Scaling factor stretching the lic
94                                   plane to fit the actual dimensions */
95    Vector3 _origin;
96    float _offset;            ///< [0,1] offset of slice plane
97    int _axis;                ///< Axis normal to slice plane
98
99    //some convolve variables. They can pretty much stay fixed
100    int _iframe;
101    int _Npat;
102    int _alpha;
103    float _sa;
104    float _tmax;
105    float _dmax;
106    float _max;
107
108    GLuint _disListID;
109
110    NvShader *_renderVelShader;
111
112    GLuint _colorTex, _patternTex, _magTex;
113    GLuint _fbo, _velFbo, _sliceVectorTex;  // For projecting 3d vector to 2d
114                                            // vector on a plane.
115    GLuint _vectorFieldId;
116
117    Volume *_vectorField;
118    /**
119     * flag for rendering
120     */
121    bool _activate;
122    bool _isHidden;                     // Indicates if LIC plane is displayed.
123};
124
125#endif
Note: See TracBrowser for help on using the repository browser.