X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=apps%2FStereoGR%2FOpenGLView.cpp;fp=apps%2FStereoGR%2FOpenGLView.cpp;h=0000000000000000000000000000000000000000;hb=e4c14cdbdf2fe805e79cd96ded236f57e7b89060;hp=3fc5eeff42938cf739f6e2c19c9730f991a622cf;hpb=454138ff8a20f6edb9b65a910101403d8b520643;p=opencv diff --git a/apps/StereoGR/OpenGLView.cpp b/apps/StereoGR/OpenGLView.cpp deleted file mode 100644 index 3fc5eef..0000000 --- a/apps/StereoGR/OpenGLView.cpp +++ /dev/null @@ -1,364 +0,0 @@ -// OpenGLView.cpp : implementation of the COpenGLView class -// - -#include "stdafx.h" -#include "OpenGLView.h" -#include - -typedef struct _Point3d -{ - double x, y, z; -} Point3d; - -#ifdef _DEBUG -#define new DEBUG_NEW -#undef THIS_FILE -static char THIS_FILE[] = __FILE__; -#endif - -#define vector_length(a) sqrt(a.x*a.x+a.y*a.y+a.z*a.z) -#define scalar_product(a,b) (a.x*b.x+a.y*b.y+a.z*b.z) -#define vector_angle(a,b) (acos(scalar_product(a,b))*180./3.1415926535) -#define vector_product_x(a,b) (a.y*b.z-a.z*b.y) -#define vector_product_y(a,b) (a.z*b.x-a.x*b.z) -#define vector_product_z(a,b) (a.x*b.y-a.y*b.x) -#define vector_product(a,b,c) c.x=vector_product_x(a,b);c.y=vector_product_y(a,b);c.z=vector_product_z(a,b) -#define sub_vector(a,b,c) c.x=a.x-b.x;c.y=a.y-b.y;c.z=a.z-b.z -#define add_vector(a,b,c) c.x=a.x+b.x;c.y=a.y+b.y;c.z=a.z+b.z - -#define normalize_vector(a) {float len;len=(float)vector_length(a);if(len>0){a.x /= len;a.y /= len;a.z /= len;}} - -#define vector_lengthV(a) sqrt(a->x*a->x+a->y*a->y+a->z*a->z) -#define normalize_vectorV(a) {float len;len=(float)vector_lengthV(a);if(len>0){a->x /= len;a->y /= len;a->z /= len;}} - -///////////////////////////////////////////////////////////////////////////// -// COpenGLView - -IMPLEMENT_DYNCREATE(COpenGLView, CView) - -BEGIN_MESSAGE_MAP(COpenGLView, CView) - //{{AFX_MSG_MAP(COpenGLView) - ON_WM_DESTROY() - ON_WM_SIZE() - ON_WM_MOUSEMOVE() - ON_WM_LBUTTONDOWN() - ON_WM_CREATE() - //}}AFX_MSG_MAP - // Standard printing commands - ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint) - ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint) - ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview) -END_MESSAGE_MAP() - -///////////////////////////////////////////////////////////////////////////// -// COpenGLView construction/destruction - -COpenGLView::COpenGLView() : m_pDC(0) -{ - InitCameraPosition(); -} - -COpenGLView::~COpenGLView() -{ -// delete m_pDC; -} - -BOOL COpenGLView::PreCreateWindow(CREATESTRUCT& cs) -{ - // OpenGL òðåáóåò íàëè÷èÿ ñòèëåé WS_CLIPCHILDREN è WS_CLIPSIBLINGS - cs.style |= (WS_CLIPCHILDREN | WS_CLIPSIBLINGS); - - return CView::PreCreateWindow(cs); -} - -///////////////////////////////////////////////////////////////////////////// -// COpenGLView printing - -BOOL COpenGLView::OnPreparePrinting(CPrintInfo* pInfo) -{ - // default preparation - return DoPreparePrinting(pInfo); -} - -void COpenGLView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) -{ -} - -void COpenGLView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) -{ -} - -///////////////////////////////////////////////////////////////////////////// -// COpenGLView diagnostics - -#ifdef _DEBUG -void COpenGLView::AssertValid() const -{ - CView::AssertValid(); -} - -void COpenGLView::Dump(CDumpContext& dc) const -{ - CView::Dump(dc); -} - -CDocument* COpenGLView::GetDocument() // non-debug version is inline -{ - ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDocument))); - return (CDocument*)m_pDocument; -} -#endif //_DEBUG - -///////////////////////////////////////////////////////////////////////////// -// COpenGLView message handlers - -int COpenGLView::InitOpenGL() -{ -// Ôîðìèðóåì êîíòåêñò ðàáî÷åé îáëàñòè - m_pDC = new CClientDC(this); - ASSERT(m_pDC != NULL); - -// Ïîëó÷àåì äåñêðèïòîð êîíòåêñòà óñòðîéñòâà - HDC hdc = m_pDC->GetSafeHdc(); - -// Óñòàíàâëèâàåì ôîðìàò ïèêñåëåé - if (SetPixelFormat(hdc)==FALSE) - return -1; - -// Ñîçäàåì è äåëàåì òåêóùèì êîíòåêñò âîñïðîèçâåäåíèÿ - if (CreateGLContext(hdc)==FALSE) - return -1; - - return 0; -} - -void COpenGLView::OnDestroy() -{ - // Ïîëó÷àåì òåêóùèé êîíòåêñò âîñïðîèçâåäåíèÿ - HGLRC hrc = ::wglGetCurrentContext(); - -// Ïåðåä óäàëåíèåì îí íå äîëæåí áûòü òåêóùèì - ::wglMakeCurrent(NULL, NULL); - -// Óäàëÿåì êîíòåêñò âîñïðîèçâåäåíèÿ - if (hrc) - ::wglDeleteContext(hrc); - -// Óäàëÿåì êîíòåêñò ðàáî÷åé îáëàñòè - if (m_pDC) - delete m_pDC; - - CView::OnDestroy(); -} - -BOOL COpenGLView::SetPixelFormat(HDC hdc) -{ - // Çàïîëíÿåì ïîëÿ ñòðóêòóðû - static PIXELFORMATDESCRIPTOR pfd = { - sizeof(PIXELFORMATDESCRIPTOR), // ðàçìåð ñòðóêòóðû - 1, // íîìåð âåðñèè - PFD_DRAW_TO_WINDOW | // ïîääåðæêà âûâîäà â îêíî - PFD_SUPPORT_OPENGL | // ïîääåðæêà OpenGL - PFD_DOUBLEBUFFER, // äâîéíàÿ áóôåðèçàöèÿ - PFD_TYPE_RGBA, // öâåòà â ðåæèìå RGBA - 24, // 24-ðàçðÿäà íà öâåò - 0, 0, 0, 0, 0, 0, // áèòû öâåòà èãíîðèðóþòñÿ - 0, // íå èñïîëüçóåòñÿ àëüôà ïàðàìåòð - 0, // ñìåùåíèå öâåòîâ èãíîðèðóþòñÿ - 0, // áóôåð àêêóìóëÿòîðà íå èñïîëüçóåòñÿ - 0, 0, 0, 0, // áèòû àêêóìóëÿòîðà èãíîðèðóþòñÿ - 32, // 32-ðàçðÿäíûé áóôåð ãëóáèíû - 0, // áóôåð òðàôàðåòà íå èñïîëüçóåòñÿ - 0, // âñïîìîãàòåëüíûé áóôåð íå èñïîëüçóåòñÿ - PFD_MAIN_PLANE, // îñíîâíîé ñëîé - 0, // çàðåçåðâèðîâàí - 0, 0, 0 // ìàñêè ñëîÿ èãíîðèðóþòñÿ - }; - - int pixelFormat; - -// Ïîääåðæèâàåò ëè ñèñòåìà íåîáõîäèìûé ôîðìàò ïèêñåëåé? - if((pixelFormat = ::ChoosePixelFormat(hdc, &pfd)) == 0){ - MessageBox("Ñ çàäàííûì ôîðìàòîì ïèêñåëåé ðàáîòàòü íåëüçÿ"); - return FALSE; - } - - if (::SetPixelFormat(hdc, pixelFormat, &pfd) == FALSE) - { - MessageBox("Îøèáêà ïðè âûïîëíåíèè SetPixelFormat"); - return FALSE; - } - - return TRUE; -} - -BOOL COpenGLView::CreateGLContext(HDC hdc) -{ - -// Ñîçäàåì êîíòåêñò âîñïðîèçâåäåíèÿ - if((m_hrc = ::wglCreateContext(hdc)) == NULL) - return FALSE; - -// Äåëàåì êîíòåêñò âîñïðîèçâåäåíèÿ òåêóùèì - if(::wglMakeCurrent(hdc, m_hrc) == FALSE) - return FALSE; - - return TRUE; -} - -void COpenGLView::OnSize(UINT nType, int cx, int cy) -{ - CView::OnSize(nType, cx, cy); - - m_width = cx; - m_height = cy; - SetOwnContext(); - glViewport(0, 0, cx, cy); -} - -///////////////////////////////////////////////////////////////////////////// -// COpenGLView drawing - -void COpenGLView::OnDraw(CDC* pDC) -{ - CDocument* pDoc = GetDocument(); - ASSERT_VALID(pDoc); -} - -void COpenGLView::BeginScene() -{ - SetOwnContext(); - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); -} - -void COpenGLView::EndScene() -{ - Swap(); -} - -void COpenGLView::Swap() -{ - if (m_pDC) - SwapBuffers(m_pDC->m_hDC); -} - -void COpenGLView::TrackBall(CPoint last, CPoint init, double& angle, double& x, double& y, double& z) -{ - Point3d end, start, out; - double sum, len, norm; - double pi = 3.1415926535; - - norm = (double)__min(m_width, m_height); - - start.x = (2*init.x-m_width)/norm; - start.y = (m_height-2.*init.y)/norm; - sum = start.x*start.x + start.y*start.y; - if (sum < 1.) start.z = sqrt(1 - sum); - else start.z = 0.; - - end.x = (2.*last.x-m_width)/norm; - end.y = (m_height-2.*last.y)/norm; - sum = end.x*end.x + end.y*end.y; - if (sum < 1.) end.z = sqrt(1 - sum); - else end.z = 0.; - - ASSERT(vector_length(start)*vector_length(end)>1.0e-30); - angle = scalar_product(start,end)/(vector_length(start)*vector_length(end)); - - if (angle<=-1) angle = -0.99999; - if (angle>=1) angle = 0.99999; - - angle = acos(angle)*180./pi; - out.x = vector_product_x(start,end); - out.y = vector_product_y(start,end); - out.z = vector_product_z(start,end); - - len = vector_length(out); - if (len != 0.) { - out.x /= len; - out.y /= len; - out.z /= len; - } - - x = out.x; - y = out.y; - z = out.z; -} - -void COpenGLView::SetOwnContext() -{ - if (!m_hrc) - return; - - if (m_pDC) { - delete m_pDC; - m_pDC = NULL; - } - - m_pDC = new CClientDC(this); - - if (wglMakeCurrent(m_pDC->m_hDC, m_hrc)) - return; - -//error handler - - return; -} - -void COpenGLView::OnMouseMove(UINT nFlags, CPoint point) -{ - SetOwnContext(); - if(nFlags & MK_LBUTTON) - { - if(nFlags & MK_SHIFT) - { - /* Track translation */ - double x = point.x - m_mousePosition.x; - double y = point.y - m_mousePosition.y; - x /= m_width/2; - y /= m_height/2; - m_translate[0] += x; - m_translate[1] += y; - - m_mousePosition = point; - } - else - { - /* Track rotation */ - double x, y, z, angle; - - TrackBall(point, m_mousePosition, angle, x, y, z); - m_mousePosition = point; - - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - glRotated(angle, x, y, z); - glMultMatrixd(m_rotate); - glGetDoublev(GL_MODELVIEW_MATRIX, m_rotate); - glPopMatrix(); - } - } - - DrawScene(); - - CView::OnMouseMove(nFlags, point); -} - -void COpenGLView::OnLButtonDown(UINT nFlags, CPoint point) -{ - m_mousePosition = point; - CView::OnLButtonDown(nFlags, point); -} - -void COpenGLView::InitCameraPosition() -{ - for(int i = 0; i < 16; i++) - m_rotate[i] = GLdouble(i/4 == i%4); - for(i = 0; i < 3; i++) - m_translate[i] = 0; -} - -void COpenGLView::DrawScene(CDC* pDC) -{ -} \ No newline at end of file