RenderView.h
上传用户:zbjingming
上传日期:2010-01-02
资源大小:2436k
文件大小:5k
源码类别:

OpenGL

开发平台:

Visual C++

  1. //********************************************
  2. // RenderView.h : interface of the CRenderView class
  3. //********************************************
  4. // feigz@ox.ios.ac.cn
  5. // Created :
  6. // Modified
  7. //********************************************
  8. #if !defined(AFX_RENDERVIEW_H__06A35633_72E5_11D1_A6C2_00A0242C0A32__INCLUDED_)
  9. #define AFX_RENDERVIEW_H__06A35633_72E5_11D1_A6C2_00A0242C0A32__INCLUDED_
  10. #if _MSC_VER >= 1000
  11. #pragma once
  12. #endif // _MSC_VER >= 1000
  13. #include <stdio.h>
  14. #include <stdlib.h>
  15. #include <math.h>
  16. #include <windows.h>
  17. #include <GL/gl.h>
  18. #include <GL/glu.h>
  19. #include <GL/glaux.h>
  20. #define INTS int
  21. #define REAL float
  22. #define Error     0
  23. #define NoError   1
  24. #define FALSE     0
  25. #define TRUE      1
  26. #define MINREAL   1.0e-5
  27. #define MAXREAL   1.0e10
  28. #define MAXINTS   (0x7f<<24)
  29. #define zero(x)   fabs(x) < MINREAL
  30. #define upint(x)  (INTS)(x+1-MINREAL)
  31. #define addr(i,j) (long)(j)*cam.width+i
  32. #define MIN(x,y)  ((x)<(y)?(x):(y))
  33. #define LEFT_EG  0x01
  34. #define RIGHT_EG 0x02
  35. #define HORIZ    0x04
  36. #define DCV      0x08
  37. #define UCV      0x10
  38. #define MAX_TEX  20
  39. #define CHARS signed  char /* 1 byte signed char */
  40. #define CHARU unsigned char /* 1 byte unsigned char */
  41. #define INT2S signed   short /* 2 byte signed int */
  42. #define INT2U unsigned short /* 2 byte unsigned int */
  43. #define INT4S signed   long /* 4 byte signed int */
  44. #define INT4U unsigned long /* 4 byte unsigned int */
  45. #define INT8U unsigned long long /* 8 byte unsigned int */
  46. #define FLOAT float /* 4 byte  */
  47. /* for material type */
  48. #define DIFFUSE 1
  49. #define SPECULAR 2
  50. #define ENERGY 8
  51. #define SAMEKD 16
  52. #define SAMEKS 32
  53. #define SAMEKT 64
  54. /* for image type */
  55. #define COLOR2 1
  56. #define COLOR16 4
  57. #define COLOR256 8
  58. #define HIGHCOLOR 16
  59. #define TRUECOLOR 24
  60. #define ALPHACOLOR 32
  61. /* Patch type */
  62. #define cTRIANGLE 't'
  63. #define cQUADRIC 'q'
  64. /* Texture mapping type */
  65. #define CLAMP_TEXTURE 0
  66. #define REPEAT_TEXTURE 1
  67. /* Data struct */
  68. typedef struct texture_2d
  69. {
  70.     char fname[30];
  71.     INT2U type; /* CLAMP_TEXTURE or REPEAT_TEXTEXTURE */
  72. }   TEXTURE_2D;
  73. typedef struct point3d     /* point in 3D  */
  74. {
  75.     FLOAT x, y, z; /* 3D coordinate */
  76.     FLOAT r, g, b; /* color  */
  77.     FLOAT u, v; /* texture coordinate */
  78. }   POINT3D;
  79. typedef struct surface /* surface */
  80. {
  81.     INT4U pointn; /* point number */
  82.     INT4U triangle; /* triangle number */
  83.     INT4U quadric; /* quadrangle number */
  84.     POINT3D *pointlist; /* points list */
  85.     INT4U *patchlist; /* patches list(list of point No.)*/
  86.     INT4U texId;         /* texture index */
  87. }   SURFACE;
  88. typedef struct object /* OBJECT */
  89. {
  90.     INT4U SurfNum; /* surface number and list size*/
  91.     SURFACE *surflist;  /* surfaces list in the object*/
  92. }   OBJECT;
  93. class CToolDoc;
  94. class CRenderView : public CView
  95. {
  96. protected: // create from serialization only
  97. CRenderView();
  98. DECLARE_DYNCREATE(CRenderView)
  99. // Attributes
  100. public:
  101. CToolDoc* GetDocument();
  102. // Operations
  103. public:
  104. // OpenGL specific
  105. BOOL SetWindowPixelFormat(HDC hDC);
  106. BOOL CreateViewGLContext(HDC hDC);
  107. void MoveEye(int type, GLfloat amount, int update);
  108.     void InitTex( int TexIndex );
  109.     void CloseTex();
  110.     void    LoadAllTexture();
  111.     void    FreeAllTexture();
  112.     void    freelist();
  113.     void    InitLookAt();
  114.     void    ReadData();
  115.     unsigned char *OpenTexImage( INT2U TexIndex, INT2U *rslx, INT2U *rsly );
  116.     void    InitRenderWin();
  117.     void    Render(void);
  118.     void write_rgb(char *filename);
  119.     void CalcTexKd( int TexIndex, float *Kdr, float *Kdg, float *Kdb );
  120. void markDiscontinuous(short xlen, short ylen, float *depth, unsigned char **mark);
  121. void    write_bmp();
  122. HGLRC m_hGLContext;
  123. int m_GLPixelIndex;
  124.     unsigned char  *ImageDatas[MAX_TEX];
  125.     INT2U rslxs[MAX_TEX], rslys[MAX_TEX];
  126.     int   texnum;
  127. // Mouse 
  128. BOOL m_LeftButtonDown;
  129. BOOL m_RightButtonDown;
  130. CPoint m_LeftDownPos;
  131. CPoint m_RightDownPos;
  132. HCURSOR m_CursorRotation;
  133. void InitGeometry(void);
  134. // Colors
  135. float m_ClearColorRed;
  136. float m_ClearColorGreen;
  137. float m_ClearColorBlue;
  138. // Overrides
  139. // ClassWizard generated virtual function overrides
  140. //{{AFX_VIRTUAL(CRenderView)
  141. public:
  142. virtual void OnDraw(CDC* pDC);  // overridden to draw this view
  143. virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
  144. protected:
  145. virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
  146. virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
  147. virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);
  148. //}}AFX_VIRTUAL
  149. // Implementation
  150. public:
  151. virtual ~CRenderView();
  152. #ifdef _DEBUG
  153. virtual void AssertValid() const;
  154. virtual void Dump(CDumpContext& dc) const;
  155. #endif
  156. protected:
  157. // Generated message map functions
  158. protected:
  159. //{{AFX_MSG(CRenderView)
  160. afx_msg void OnDestroy();
  161. afx_msg void OnSize(UINT nType, int cx, int cy);
  162. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  163. afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  164. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  165. afx_msg void OnPaint();
  166. afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
  167. //}}AFX_MSG
  168. DECLARE_MESSAGE_MAP()
  169. };
  170. #ifndef _DEBUG  // debug version in RenderView.cpp
  171. inline CToolDoc* CRenderView::GetDocument()
  172.    { return (CToolDoc*)m_pDocument; }
  173. #endif
  174. #endif