3dCameraPage.cpp
上传用户:shxiangxiu
上传日期:2007-01-03
资源大小:1101k
文件大小:5k
源码类别:

OpenGL

开发平台:

Visual C++

  1. /////////////////////////////////////////////////////////////////////////////
  2. // 3dCameraPage.cpp : implementation file
  3. //
  4. // glOOP (OpenGL Object Oriented Programming library)
  5. // Copyright (c) Craig Fahrnbach 1997, 1998
  6. //
  7. // OpenGL is a registered trademark of Silicon Graphics
  8. //
  9. //
  10. // This program is provided for educational and personal use only and
  11. // is provided without guarantee or warrantee expressed or implied.
  12. //
  13. // Commercial use is strickly prohibited without written permission
  14. // from ImageWare Development.
  15. //
  16. // This program is -not- in the public domain.
  17. //
  18. /////////////////////////////////////////////////////////////////////////////
  19. #include "stdafx.h"
  20. #include "glOOP.h"
  21. #include "3dObjectDialog.h"
  22. #include "3dCameraDialog.h"
  23. #ifdef _DEBUG
  24. #undef THIS_FILE
  25. static char BASED_CODE THIS_FILE[] = __FILE__;
  26. #endif
  27. //////////////////////////////////////////////////////////////////
  28. // C3dCameraPage
  29. IMPLEMENT_DYNCREATE(C3dCameraPage, CPropertyPage)
  30. /////////////////////////////////////////////////////////////////////////////
  31. // C3dCameraPage dialog construction
  32. C3dCameraPage::C3dCameraPage()
  33. : CPropertyPage(C3dCameraPage::IDD)
  34. {
  35. //{{AFX_DATA_INIT(C3dCameraPage)
  36. m_fClipBottom = 0.0f;
  37. m_fClipFar = 0.0f;
  38. m_fClipLeft = 0.0f;
  39. m_fClipNear = 0.0f;
  40. m_fClipRight = 0.0f;
  41. m_fClipTop = 0.0f;
  42. m_fFieldOfView = 0.0f;
  43. m_iPerspective = -1;
  44. //}}AFX_DATA_INIT
  45. }
  46. /////////////////////////////////////////////////////////////////////////////
  47. // C3dCameraPage Destructor
  48. C3dCameraPage::~C3dCameraPage()
  49. {
  50. }
  51. void C3dCameraPage::DoDataExchange(CDataExchange* pDX)
  52. {
  53. CPropertyPage::DoDataExchange(pDX);
  54. //{{AFX_DATA_MAP(C3dCameraPage)
  55. DDX_Text(pDX, IDC_CLIP_BOTTOM, m_fClipBottom);
  56. DDX_Text(pDX, IDC_CLIP_FAR, m_fClipFar);
  57. DDX_Text(pDX, IDC_CLIP_LEFT, m_fClipLeft);
  58. DDX_Text(pDX, IDC_CLIP_NEAR, m_fClipNear);
  59. DDX_Text(pDX, IDC_CLIP_RIGHT, m_fClipRight);
  60. DDX_Text(pDX, IDC_CLIP_TOP, m_fClipTop);
  61. DDX_Text(pDX, IDC_FIELD_OF_VIEW, m_fFieldOfView);
  62. DDV_MinMaxFloat(pDX, m_fFieldOfView, 1.f, 180.f);
  63. DDX_Radio(pDX, IDC_RADIO_PERSPECTIVE, m_iPerspective);
  64. //}}AFX_DATA_MAP
  65. }
  66. BEGIN_MESSAGE_MAP(C3dCameraPage, CPropertyPage)
  67. //{{AFX_MSG_MAP(C3dCameraPage)
  68. ON_BN_CLICKED(IDC_RADIO_ORTHOGRAPHIC, OnRadioOrthographic)
  69. ON_BN_CLICKED(IDC_RADIO_PERSPECTIVE, OnRadioPerspective)
  70. //}}AFX_MSG_MAP
  71. END_MESSAGE_MAP()
  72. /////////////////////////////////////////////////////////////////////////////
  73. // C3dCameraPage function implimentation
  74. void C3dCameraPage::GetDialogData()
  75. {
  76. // Dialog box is being initialized (FALSE)
  77. // or data is being retrieved (TRUE).
  78. UpdateData(TRUE);
  79. //Set the camera attributes..
  80. m_pCamera->m_fBottom = m_fClipBottom;
  81. m_pCamera->m_fFar = m_fClipFar;
  82. m_pCamera->m_fLeft = m_fClipLeft;
  83. m_pCamera->m_fNear = m_fClipNear;
  84. m_pCamera->m_fRight = m_fClipRight;
  85. m_pCamera->m_fTop = m_fClipTop;
  86. m_pCamera->m_fFovY = m_fFieldOfView;
  87. }
  88. void C3dCameraPage::SetDialogData()
  89. {
  90. // Set dialog values
  91. m_fClipBottom = m_pCamera->m_fBottom;
  92. m_fClipFar  = m_pCamera->m_fFar;
  93. m_fClipLeft = m_pCamera->m_fLeft;
  94. m_fClipNear = m_pCamera->m_fNear;
  95. m_fClipRight = m_pCamera->m_fRight;
  96. m_fClipTop = m_pCamera->m_fTop;
  97. m_fFieldOfView = m_pCamera->m_fFovY;
  98. if(m_pCamera->m_bPerspective)
  99. m_iPerspective = 0;
  100. else
  101. m_iPerspective = 1;
  102. // Dialog box is being initialized (FALSE)
  103. // or data is being retrieved (TRUE).
  104. UpdateData(FALSE);
  105. }
  106. /////////////////////////////////////////////////////////////////////////////
  107. // C3dCameraPage message handlers
  108. BOOL C3dCameraPage::OnInitDialog() 
  109. {
  110. CPropertyPage::OnInitDialog();  // let the base class do the default work
  111. // Set our local values to the Cameras' values
  112. SetDialogData();
  113. return TRUE;  // return TRUE unless you set the focus to a control
  114.               // EXCEPTION: OCX Property Pages should return FALSE
  115. }
  116. void C3dCameraPage::OnOK() 
  117. {
  118. // Get the dialog data and store to our cameras'
  119. // member variables
  120. GetDialogData();
  121. // Force the camera to rebuild its' display list
  122. m_pCamera->m_bBuildLists = TRUE;
  123. CPropertyPage::OnOK();
  124. }
  125. void C3dCameraPage::OnRadioPerspective() 
  126. {
  127. // Get the dialog data and store to our cameras'
  128. // member variables
  129. GetDialogData();
  130. m_pCamera->m_bPerspective = TRUE;
  131. m_iPerspective = 0;
  132. // Set our local values to the Cameras' values
  133. SetDialogData();
  134. }
  135. void C3dCameraPage::OnRadioOrthographic() 
  136. {
  137. // Get the dialog data and store to our cameras'
  138. // member variables
  139. GetDialogData();
  140. m_pCamera->m_bPerspective = FALSE;
  141. m_iPerspective = 1;
  142. // Set our local values to the Cameras' values
  143. SetDialogData();
  144. }