Eigene Dateien/FlowVis/src/VFlowRenderer.h

Go to the documentation of this file.
00001 #pragma once
00002 
00003 #ifndef _v_flow_renderer_h
00004 #define _v_flow_renderer_h
00005 
00006 #include "VFlowData.h"
00007 #include "VCamera.h"
00008 #include "VProgram.h"
00009 #include "VImage.h"
00010 #include "VWhiteNoise.h"
00011 
00015 __interface ShaderWrapper
00016 {
00020         void set( int m_TimeStep );
00021 
00025         void clean();
00026 
00027 };
00028 
00032 class VFlowRenderer
00033 {
00034 public:
00035 
00039         VFlowRenderer();
00040 
00049         void processGuiInput(float dist, VVector pos, VVector view, VVector up, VVector lookAt);
00050 
00060         void setTransferFunctionHandle(unsigned int handle)
00061         {
00062                 m_TransferFunctionHandle = handle;
00063         }
00064 
00069         void setArrowTransferFunctionHandle(unsigned int handle)
00070         {
00071                 m_ArrowTransferFunctionHandle = handle;
00072         }
00073 
00078         void setStreamLineTransferFunctionHandle(unsigned int handle)
00079         {
00080                 m_StreamLineTransferFunctionHandle = handle;
00081         }
00082 
00087         void setLicTransferFunctionHandle(unsigned int handle)
00088         {
00089                 m_LicTransferFunctionHandle = handle;
00090         }
00091 
00096         void setCurrentShader( int val );
00097 
00102         VVector getCameraSideVector()
00103         {
00104                 VMatrix viewm = mCamera.getViewMatrix();
00105 
00106                 return VVector(viewm[0], viewm[4], viewm[8]);
00107         }
00108 
00113         float getFlowDataMin()
00114         {
00115         
00116                 return mFlowData->getMinimalDatavalue( activeDataValue - 1 );
00117         }
00118 
00123         float getFlowDataMax()
00124         {
00125         
00126                 return mFlowData->getMaximalDatavalue( activeDataValue - 1 );
00127         }
00128 
00133         VVector getCameraUpVector()
00134         {
00135                 VMatrix viewm = mCamera.getViewMatrix();
00136 
00137                 return VVector(viewm[1], viewm[5], viewm[9]);
00138         }
00139 
00145         void resize(int width, int height);
00146 
00151         void draw(int m_TimeStep = 0);
00152 
00157         void drawGlyphes(int m_TimeStep = 0);
00158 
00162         void drawStreamLines();
00163 
00167         void drawIcons();
00168 
00173         void drawLic( int m_TimeStep = 0 );
00174 
00179         bool getProgramLoaded()
00180         {
00181                 return mProgramLoaded;
00182         }
00183 
00187         void setFlowData(VFlowData * m_FlowData)
00188         {
00189                 mFlowData = m_FlowData;
00190         }
00191 
00195         void setBasicGlyphSize(float m_GlyphSize)
00196         {
00197                 mBaseGlyphSize = m_GlyphSize;
00198         }
00199 
00204         void setGlyph(bool val)
00205         {
00206                 mUseGlyph =  val;
00207         }
00208 
00213         void setStrGlyphes(bool val)
00214         {
00215                 mStrGlyphes =  val;
00216         }
00217 
00221         void setArrowScaleMode( bool val )
00222         {
00223                 arrows_nonunifcale = (val) ? 0.0f : 1.0f;
00224         }
00225         
00229         void setArrowAlpha( float val)
00230         {
00231                 arrowalpha = val;
00232         }
00233 
00237         void setStreamLineAlpha( float val)
00238         {
00239                 streamlinesalpha = val;
00240         }
00241 
00245         void setLicAlpha( float val)
00246         {
00247                 licalpha = val;
00248         }
00249 
00253         void setLicSteps( int val)
00254         {
00255                 licsteps = val;
00256         }
00257 
00261         void setLicStepSize( int val)
00262         {
00263                 licstepsize = val;
00264         }
00265 
00270         void setArrowColorPtr(VVector * v)
00271         {
00272                 arrowColor = v;
00273         }
00274 
00279         void enableArrowTF( bool val )
00280         {
00281                 arrowTfActivated = val;
00282         }
00283 
00288         void enableLicTF( bool val )
00289         {
00290                 licTfActivated = val;
00291         }
00292 
00297         void animateLic( bool val )
00298         {
00299                 mAnimateLic = val;
00300         }
00301 
00306         void enableStrTF( bool val )
00307         {
00308                 streamlineTfActivated = val;
00309         }
00310 
00315         void setStreamlinesColorPtr(VVector * v)
00316         {
00317                 streamlinesColor = v;
00318         }
00319 
00324         float getCameraFOV()
00325         {
00326                 return mCamera.getFov();
00327         }
00328 
00333         float getCameraAspect()
00334         {
00335                 return mCamera.getAspecRatio();
00336         }
00337 
00342         VMatrix getCameraProjMatrix()
00343         {
00344                 return mCamera.getProjMatrix();
00345         }
00346 
00351         VMatrix getCameraViewMatrix()
00352         {
00353                 return VMatrix( mCamera.getViewMatrix() );
00354         }
00355 
00359         void loadProgram();
00360 
00366         void generateFrolic(float m_Width, float m_Height);
00367 
00371         void setShaderWrapperVelocity();
00372 
00376         void clearShaderWrapperVelocity();
00377 
00381         void setShaderWrapperPressure();
00382 
00386         void clearShaderWrapperPressure();
00387 
00391         void setShaderWrapperVorticity();
00392 
00396         void clearShaderWrapperVorticity();
00397 
00401         void setShaderWrapperStreamLines();
00402 
00406         void clearShaderWrapperStreamLines();
00407 
00411         void setShaderWrapperStreamLinesGlyph();
00412 
00416         void clearShaderWrapperStreamLinesGlyph();
00417 
00421         void setShaderWrapperStreamLinesTf(int m_TimeStep);
00422 
00426         void clearShaderWrapperStreamLinesTf();
00427 
00431         void setShaderWrapperStreamLinesTfGlyph(int m_TimeStep);
00432 
00436         void clearShaderWrapperStreamLinesTfGlyph();
00437 
00441         void setShaderWrapperLIC( int m_TimeStep );
00442 
00446         void clearShaderWrapperLIC();
00447 
00451         void setShaderWrapperLICTexture( int m_TimeStep );
00452 
00456         void clearShaderWrapperLICTexture();
00457 
00461         void setShaderWrapperOLICTexture( int m_TimeStep );
00462 
00466         void clearShaderWrapperOLICTexture();
00467 
00471         void setShaderWrapperLICTf( int m_TimeStep );
00472 
00476         void clearShaderWrapperLICTf();
00477 
00481         void setShaderWrapperLICTextureTf( int m_TimeStep );
00482 
00486         void clearShaderWrapperLICTextureTf();
00487 
00491         class ShaderWrapperVelocity: public ShaderWrapper
00492         {
00493         public:
00494                 VFlowRenderer *vrendererptr;                            
00500                 ShaderWrapperVelocity(VFlowRenderer *vrptr)
00501                 {
00502                         vrendererptr = vrptr;
00503                 }
00504 
00508                 void ShaderWrapperVelocity::set( int m_TimeStep )
00509                 {
00510                         vrendererptr->setShaderWrapperVelocity();
00511                 }
00512 
00516                 void ShaderWrapperVelocity::clean()
00517                 {
00518                         vrendererptr->clearShaderWrapperVelocity();
00519                 }
00520 
00524                 ~ShaderWrapperVelocity()
00525                 {
00526                         //shaderprogram = 0;
00527                         vrendererptr = 0;
00528                         delete vrendererptr;
00529                 }
00530         };
00531 
00535         class ShaderWrapperPressure: public ShaderWrapper
00536         {
00537         public:
00538                 VFlowRenderer *vrendererptr;                            
00544                 ShaderWrapperPressure(VFlowRenderer *vrptr)
00545                 {
00546                         vrendererptr = vrptr;
00547                 }
00548 
00552                 void ShaderWrapperPressure::set( int m_TimeStep )
00553                 {
00554                         vrendererptr->setShaderWrapperPressure();
00555                 }
00556 
00560                 void ShaderWrapperPressure::clean()
00561                 {
00562                         vrendererptr->clearShaderWrapperPressure();
00563                 }
00564 
00568                 ~ShaderWrapperPressure()
00569                 {
00570                         //shaderprogram = 0;
00571                         vrendererptr = 0;
00572                         delete vrendererptr;
00573                 }
00574         };
00575 
00579         class ShaderWrapperVorticity: public ShaderWrapper
00580         {
00581         public:
00582                 VFlowRenderer *vrendererptr;                            
00588                 ShaderWrapperVorticity(VFlowRenderer *vrptr)
00589                 {
00590                         vrendererptr = vrptr;
00591                 }
00592 
00596                 void ShaderWrapperVorticity::set( int m_TimeStep )
00597                 {
00598                         vrendererptr->setShaderWrapperVorticity();
00599                 }
00600 
00604                 void ShaderWrapperVorticity::clean()
00605                 {
00606                         vrendererptr->clearShaderWrapperVorticity();
00607                 }
00608 
00612                 ~ShaderWrapperVorticity()
00613                 {
00614                         //shaderprogram = 0;
00615                         vrendererptr = 0;
00616                         delete vrendererptr;
00617                 }
00618         };
00619 
00623         void setShaderWrapperGlyph();
00624 
00628         void clearShaderWrapperGlyph();
00629 
00633         class ShaderWrapperGlyph: public ShaderWrapper
00634         {
00635         public:
00636                 VFlowRenderer *vrendererptr;                            
00642                 ShaderWrapperGlyph(VFlowRenderer *vrptr)
00643                 {
00644                         vrendererptr = vrptr;
00645                 }
00646 
00650                 void ShaderWrapperGlyph::set( int m_TimeStep )
00651                 {
00652                         vrendererptr->setShaderWrapperGlyph();
00653                 }
00654 
00658                 void ShaderWrapperGlyph::clean()
00659                 {
00660                         vrendererptr->clearShaderWrapperGlyph();
00661                 }
00662 
00666                 ~ShaderWrapperGlyph()
00667                 {
00668                         //shaderprogram = 0;
00669                         vrendererptr = 0;
00670                         delete vrendererptr;
00671                 }
00672         };
00673 
00677         void setShaderWrapperGlyphTf();
00678 
00682         void clearShaderWrapperGlyphTf();
00683 
00687         class ShaderWrapperGlyphTf: public ShaderWrapper
00688         {
00689         public:
00690                 VFlowRenderer *vrendererptr;                            
00696                 ShaderWrapperGlyphTf(VFlowRenderer *vrptr)
00697                 {
00698                         vrendererptr = vrptr;
00699                 }
00700 
00704                 void ShaderWrapperGlyphTf::set( int m_TimeStep )
00705                 {
00706                         vrendererptr->setShaderWrapperGlyphTf();
00707                 }
00708 
00712                 void ShaderWrapperGlyphTf::clean()
00713                 {
00714                         vrendererptr->clearShaderWrapperGlyphTf();
00715                 }
00716 
00720                 ~ShaderWrapperGlyphTf()
00721                 {
00722                         //shaderprogram = 0;
00723                         vrendererptr = 0;
00724                         delete vrendererptr;
00725                 }
00726         };
00727 
00731         void setShaderWrapperIcon();
00732 
00736         void clearShaderWrapperIcon();
00737 
00741         class ShaderWrapperIcon: public ShaderWrapper
00742         {
00743         public:
00744                 VFlowRenderer *vrendererptr;                            
00750                 ShaderWrapperIcon(VFlowRenderer *vrptr)
00751                 {
00752                         vrendererptr = vrptr;
00753                 }
00754 
00758                 void ShaderWrapperIcon::set( int m_TimeStep )
00759                 {
00760                         vrendererptr->setShaderWrapperIcon();
00761                 }
00762 
00766                 void ShaderWrapperIcon::clean()
00767                 {
00768                         vrendererptr->clearShaderWrapperIcon();
00769                 }
00770 
00774                 ~ShaderWrapperIcon()
00775                 {
00776                         //shaderprogram = 0;
00777                         vrendererptr = 0;
00778                         delete vrendererptr;
00779                 }
00780         };
00781 
00785         class ShaderWrapperStreamLines: public ShaderWrapper
00786         {
00787         public:
00788                 VFlowRenderer *vrendererptr;                            
00794                 ShaderWrapperStreamLines(VFlowRenderer *vrptr)
00795                 {
00796                         vrendererptr = vrptr;
00797                 }
00798 
00802                 void ShaderWrapperStreamLines::set( int m_TimeStep )
00803                 {
00804                         vrendererptr->setShaderWrapperStreamLines();
00805                 }
00806 
00810                 void ShaderWrapperStreamLines::clean()
00811                 {
00812                         vrendererptr->clearShaderWrapperStreamLines();
00813                 }
00814 
00818                 ~ShaderWrapperStreamLines()
00819                 {
00820                         //shaderprogram = 0;
00821                         vrendererptr = 0;
00822                         delete vrendererptr;
00823                 }
00824         };
00825 
00829         class ShaderWrapperStreamLinesGlyph: public ShaderWrapper
00830         {
00831         public:
00832                 VFlowRenderer *vrendererptr;                            
00838                 ShaderWrapperStreamLinesGlyph(VFlowRenderer *vrptr)
00839                 {
00840                         vrendererptr = vrptr;
00841                 }
00842 
00846                 void ShaderWrapperStreamLinesGlyph::set( int m_TimeStep )
00847                 {
00848                         vrendererptr->setShaderWrapperStreamLinesGlyph();
00849                 }
00850 
00854                 void ShaderWrapperStreamLinesGlyph::clean()
00855                 {
00856                         vrendererptr->clearShaderWrapperStreamLinesGlyph();
00857                 }
00858 
00862                 ~ShaderWrapperStreamLinesGlyph()
00863                 {
00864                         //shaderprogram = 0;
00865                         vrendererptr = 0;
00866                         delete vrendererptr;
00867                 }
00868         };
00869 
00873         class ShaderWrapperStreamLinesTf: public ShaderWrapper
00874         {
00875         public:
00876                 VFlowRenderer *vrendererptr;                            
00882                 ShaderWrapperStreamLinesTf(VFlowRenderer *vrptr)
00883                 {
00884                         vrendererptr = vrptr;
00885                 }
00886 
00890                 void ShaderWrapperStreamLinesTf::set( int m_TimeStep )
00891                 {
00892                         vrendererptr->setShaderWrapperStreamLinesTf( m_TimeStep );
00893                 }
00894 
00898                 void ShaderWrapperStreamLinesTf::clean()
00899                 {
00900                         vrendererptr->clearShaderWrapperStreamLinesTf();
00901                 }
00902 
00906                 ~ShaderWrapperStreamLinesTf()
00907                 {
00908                         //shaderprogram = 0;
00909                         vrendererptr = 0;
00910                         delete vrendererptr;
00911                 }
00912         };
00913 
00917         class ShaderWrapperStreamLinesTfGlyph: public ShaderWrapper
00918         {
00919         public:
00920                 VFlowRenderer *vrendererptr;                            
00926                 ShaderWrapperStreamLinesTfGlyph(VFlowRenderer *vrptr)
00927                 {
00928                         vrendererptr = vrptr;
00929                 }
00930 
00934                 void ShaderWrapperStreamLinesTfGlyph::set( int m_TimeStep )
00935                 {
00936                         vrendererptr->setShaderWrapperStreamLinesTfGlyph( m_TimeStep );
00937                 }
00938 
00942                 void ShaderWrapperStreamLinesTfGlyph::clean()
00943                 {
00944                         vrendererptr->clearShaderWrapperStreamLinesTfGlyph();
00945                 }
00946 
00950                 ~ShaderWrapperStreamLinesTfGlyph()
00951                 {
00952                         //shaderprogram = 0;
00953                         vrendererptr = 0;
00954                         delete vrendererptr;
00955                 }
00956         };
00957 
00961         class ShaderWrapperLIC: public ShaderWrapper
00962         {
00963         public:
00964                 VFlowRenderer *vrendererptr;                            
00970                 ShaderWrapperLIC(VFlowRenderer *vrptr)
00971                 {
00972                         vrendererptr = vrptr;
00973                 }
00974 
00978                 void ShaderWrapperLIC::set( int m_TimeStep )
00979                 {
00980                         vrendererptr->setShaderWrapperLIC( m_TimeStep);
00981                 }
00982 
00986                 void ShaderWrapperLIC::clean()
00987                 {
00988                         vrendererptr->clearShaderWrapperLIC();
00989                 }
00990 
00994                 ~ShaderWrapperLIC()
00995                 {
00996                         //shaderprogram = 0;
00997                         vrendererptr = 0;
00998                         delete vrendererptr;
00999                 }
01000         };
01001 
01005         class ShaderWrapperLICTexture: public ShaderWrapper
01006         {
01007         public:
01008                 VFlowRenderer *vrendererptr;                            
01014                 ShaderWrapperLICTexture(VFlowRenderer *vrptr)
01015                 {
01016                         vrendererptr = vrptr;
01017                 }
01018 
01022                 void ShaderWrapperLICTexture::set( int m_TimeStep )
01023                 {
01024                         vrendererptr->setShaderWrapperLICTexture( m_TimeStep);
01025                 }
01026 
01030                 void ShaderWrapperLICTexture::clean()
01031                 {
01032                         vrendererptr->clearShaderWrapperLICTexture();
01033                 }
01034 
01038                 ~ShaderWrapperLICTexture()
01039                 {
01040                         //shaderprogram = 0;
01041                         vrendererptr = 0;
01042                         delete vrendererptr;
01043                 }
01044         };
01045 
01049         class ShaderWrapperOLICTexture: public ShaderWrapper
01050         {
01051         public:
01052                 VFlowRenderer *vrendererptr;                            
01058                 ShaderWrapperOLICTexture(VFlowRenderer *vrptr)
01059                 {
01060                         vrendererptr = vrptr;
01061                 }
01062 
01066                 void ShaderWrapperOLICTexture::set( int m_TimeStep )
01067                 {
01068                         vrendererptr->setShaderWrapperOLICTexture( m_TimeStep);
01069                 }
01070 
01074                 void ShaderWrapperOLICTexture::clean()
01075                 {
01076                         vrendererptr->clearShaderWrapperOLICTexture();
01077                 }
01078 
01082                 ~ShaderWrapperOLICTexture()
01083                 {
01084                         //shaderprogram = 0;
01085                         vrendererptr = 0;
01086                         delete vrendererptr;
01087                 }
01088         };
01089 
01093         class ShaderWrapperLICTf: public ShaderWrapper
01094         {
01095         public:
01096                 VFlowRenderer *vrendererptr;                            
01102                 ShaderWrapperLICTf(VFlowRenderer *vrptr)
01103                 {
01104                         vrendererptr = vrptr;
01105                 }
01106 
01110                 void ShaderWrapperLICTf::set( int m_TimeStep )
01111                 {
01112                         vrendererptr->setShaderWrapperLICTf( m_TimeStep);
01113                 }
01114 
01118                 void ShaderWrapperLICTf::clean()
01119                 {
01120                         vrendererptr->clearShaderWrapperLICTf();
01121                 }
01122 
01126                 ~ShaderWrapperLICTf()
01127                 {
01128                         //shaderprogram = 0;
01129                         vrendererptr = 0;
01130                         delete vrendererptr;
01131                 }
01132         };
01133 
01137         class ShaderWrapperLICTextureTf: public ShaderWrapper
01138         {
01139         public:
01140                 VFlowRenderer *vrendererptr;                            
01146                 ShaderWrapperLICTextureTf(VFlowRenderer *vrptr)
01147                 {
01148                         vrendererptr = vrptr;
01149                 }
01150 
01154                 void ShaderWrapperLICTextureTf::set( int m_TimeStep )
01155                 {
01156                         vrendererptr->setShaderWrapperLICTextureTf( m_TimeStep);
01157                 }
01158 
01162                 void ShaderWrapperLICTextureTf::clean()
01163                 {
01164                         vrendererptr->clearShaderWrapperLICTextureTf();
01165                 }
01166 
01170                 ~ShaderWrapperLICTextureTf()
01171                 {
01172                         //shaderprogram = 0;
01173                         vrendererptr = 0;
01174                         delete vrendererptr;
01175                 }
01176         };
01177 
01178 private:
01179 
01180         VFlowData * mFlowData;                                                                  
01181         VCamera mCamera;                                                                                
01183         ShaderWrapper * mCurrentMode;                                                   
01185         ShaderWrapperVelocity mShaderWrapperVelocity;                   
01186         ShaderWrapperPressure mShaderWrapperPressure;                   
01187         ShaderWrapperVorticity mShaderWrapperVorticity;                 
01188         ShaderWrapperStreamLines mShaderWrapperStreamLines;             
01189         ShaderWrapperStreamLinesGlyph mShaderWrapperStreamLinesGlyph;           
01190         ShaderWrapperStreamLinesTf mShaderWrapperStreamLinesTf;         
01191         ShaderWrapperStreamLinesTfGlyph mShaderWrapperStreamLinesTfGlyph;               
01192         ShaderWrapperLIC mShaderWrapperLIC;                                             
01193         ShaderWrapperLICTexture mShaderWrapperLICTexture;                                               
01194         ShaderWrapperOLICTexture mShaderWrapperOLICTexture;                                             
01195         ShaderWrapperLICTf mShaderWrapperLICTf;                                         
01196         ShaderWrapperLICTextureTf mShaderWrapperLICTextureTf;                                           
01197         ShaderWrapperIcon mShaderWrapperIcon;                                   
01199         VProgram mVelocityProgram;                                                              
01200         VProgram mPressureProgram;                                                              
01201         VProgram mVorticityProgram;                                                             
01202         VProgram mRenderToVBProgram;                                                    
01203         VProgram mRenderToVBProgramGlyph;                                                       
01204         VProgram mRenderToVBProgramTf;                                                  
01205         VProgram mRenderToVBProgramTfGlyph;                                                     
01206         VProgram mLICProgram;                                                                   
01207         VProgram mLICProgramTexture;                                                                    
01208         VProgram mOLICProgramTexture;                                                                   
01209         VProgram mIconProgram;                                                                  
01210         VProgram mLICProgramTf;                                                                 
01211         VProgram mLICProgramTextureTf;                                                                  
01214         ShaderWrapperGlyph mShaderWrapperGlyph;                                 
01215         VProgram mGlyphProgram;                                                                 
01216         ShaderWrapperGlyphTf mShaderWrapperGlyphTf;                                     
01217         VProgram mGlyphProgramTf;                                                                       
01219         bool mProgramLoaded;                                                                    
01221         VImage mGlyph;                                                                                  
01222         VImage mTriangle;                                                                                       
01224         bool mUseGlyph;                                                                                 
01226         unsigned int m_TransferFunctionHandle;                                  
01227         unsigned int m_ArrowTransferFunctionHandle;                                     
01228         unsigned int m_StreamLineTransferFunctionHandle;                                        
01229         unsigned int m_LicTransferFunctionHandle;                               
01231         float mBaseGlyphSize;                                                                   
01232         float mCameraDistance;
01233 
01234         int activeDataValue;
01235 
01236         //relevant to GUI
01237         int arrows_nonunifcale;                                 
01238         float arrowalpha;                                               
01239         bool arrowTfActivated;                                  
01241         VVector * arrowColor;                                   
01242         VVector * streamlinesColor;                             
01244         bool streamlineTfActivated;                             
01245         float streamlinesalpha;                                 
01247         VWhiteNoise mWhiteNoise;                                
01248         VImage mPerlinNoise;
01249 
01250         float licalpha;                                                 
01251         int licsteps;                                                   
01252         int licstepsize;                                                
01253         bool licTfActivated;                                    
01255         bool mStrGlyphes;                                               
01257         unsigned int mGaussTextureHandle;               
01258         float mLicTextureOffset;                                
01260         bool mAnimateLic;                                               
01263 };
01264 
01265 #endif // _v_flow_renderer_h

Generated on Mon Jan 21 01:15:16 2008 for FlowVis by  doxygen 1.5.4