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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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