plvDraw.h
上传用户:kellyonhid
上传日期:2013-10-12
资源大小:932k
文件大小:3k
源码类别:

3D图形编程

开发平台:

Visual C++

  1. #ifndef _PLV_DRAW_
  2. #define _PLV_DRAW_
  3. #ifdef WIN32
  4. # include "winGLdecs.h"
  5. #endif
  6. #include <GL/gl.h>
  7. #include "jitter.h"
  8. #include "Pnt3.h"
  9. #include "defines.h"
  10. /*
  11.  * In the case when no overlay planes are available, scanalyze provides
  12.  * support for overlay plane features by saving the main frame window
  13.  * to RenderParams.savedImage after every redraw.  The overlay plane
  14.  * drawing is then done on top of this by making an explicit call to
  15.  * either drawOverlay or drawOverlayAndUpdate.  This #define is used
  16.  * to indicate whether support is available or not.
  17.  */
  18. #ifndef sgi
  19. #define no_overlay_support
  20. #endif
  21. typedef enum {
  22.   grayColor, falseColor, intensityColor, trueColor,
  23.   confidenceColor, boundaryColor,
  24.   registrationColor, textureColor,
  25.   noColor, // use this to set it yourself
  26. } ColorMode;
  27. typedef enum {
  28.   perVertex, fakePerFace, realPerFace
  29. } ShadeModel;
  30. /* BackgroundMode
  31.  * --------------
  32.  * Specifies how to draw back polygons when two sided lighting is enabled
  33.  */
  34. typedef enum {
  35.   lit, emissive
  36. } BackfaceMode;
  37. struct RenderParams
  38. {
  39.   GLenum polyMode;
  40.   bool hiddenLine;
  41.   ShadeModel shadeModel;
  42.   ColorMode colorMode;
  43.   BackfaceMode backfaceMode;
  44.   bool light;
  45.   bool cull;
  46.   bool useEmissive;
  47.   bool twoSidedLighting; // added by kberg 6/3/01
  48.   //bool backFaceEmissive; two-sded lighting does this
  49.   bool blend;
  50.   float confScale;
  51.   float pointSize;
  52.   float lineWidth;
  53.   GLfloat shininess;
  54.   uchar specular[4];
  55.   uchar diffuse[4];
  56.   uchar backDiffuse[4]; // added by kberg 6/5/01
  57.   uchar backSpecular[4];
  58.   GLfloat backShininess;
  59.   uchar background[4];
  60.   GLfloat lightPosition[3];
  61.   GLfloat lightAmbient[4];
  62.   GLfloat lightDiffuse[4];
  63.   GLfloat lightSpecular[4];
  64.   bool shadows;
  65.   bool antiAlias;
  66.   int numAntiAliasSamps;
  67.   float jitterX, jitterY;
  68.   jitter_point *jitterArray;
  69.   float dofJitterX, dofJitterY, dofCenter;
  70.   float shadowLength; // for soft shadows
  71.   bool fromLightPOV;
  72.   bool flipnorm;
  73.   bool useTstrips;
  74.   bool boundSelection;
  75.   bool clearBeforeRender;
  76.   bool accelerateWithBbox;
  77.   bool bRenderManipsPoints;
  78.   bool bRenderManipsTinyPoints;
  79.   bool bRenderManipsUnlit;
  80.   bool bRenderManipsLores;
  81.   bool bRenderManipsSkipDlist;
  82.   int iFastManipsThreshold;
  83. #ifdef no_overlay_support
  84.   char *savedImage;
  85.   int savedImageWidth, savedImageHeight;
  86. #endif
  87. };
  88. // save/restore render params
  89. void PushRenderParams (void);
  90. void PopRenderParams (void);
  91. // one-time module initialization
  92. bool initDrawing();
  93. bool initDrawingPostCreation();
  94. // set up lighting, viewing xforms, etc. if you need to render yourself
  95. bool setupSceneDrawing();
  96. // draw all meshes in scene (using display list if possible)
  97. bool drawScene();
  98. bool drawScanHilites (void);
  99. // alternative visualizations:
  100. // draw scene in per-scan color (indexed by position in scene mesh list)
  101. bool drawSceneIndexColored (int scale);
  102. // draw scene with color according to the z variation in overlapping regions
  103. bool drawSceneThicknessColored (void);
  104. // draw the edges of a bbox
  105. void drawBoundingBox (const class Bbox& box, bool bUseDefaultColor = true);
  106. #endif