// *** OpenGL Program that draws a polygon mesh of a pyramid in 3D ***
// ogl3d03View.cpp : implementation of the COgl3d03View class
//
#include "stdafx.h"
#include "ogl3d03.h"
#include "ogl3d03Doc.h"
#include "ogl3d03View.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// COgl3d03View
IMPLEMENT_DYNCREATE(COgl3d03View, CView)
BEGIN_MESSAGE_MAP(COgl3d03View, CView)
//{{AFX_MSG_MAP(COgl3d03View)
ON_WM_CREATE()
ON_WM_DESTROY()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// COgl3d03View construction/destruction
COgl3d03View::COgl3d03View()
{
// TODO: add construction code here
}
COgl3d03View::~COgl3d03View()
{
}
BOOL COgl3d03View::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// COgl3d03View drawing
void COgl3d03View::OnDraw(CDC* pDC)
{
COgl3d03Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
wglMakeCurrent(pDC->m_hDC, m_hRC);
DrawWithOpenGL();
wglMakeCurrent(pDC->m_hDC, NULL);
}
/////////////////////////////////////////////////////////////////////////////
// COgl3d03View diagnostics
#ifdef _DEBUG
void COgl3d03View::AssertValid() const
{
CView::AssertValid();
}
void COgl3d03View::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
COgl3d03Doc* COgl3d03View::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(COgl3d03Doc)));
return (COgl3d03Doc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// COgl3d03View message handlers
int COgl3d03View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
PIXELFORMATDESCRIPTOR pfd =
{
sizeof(PIXELFORMATDESCRIPTOR), // Structure size.
1, // Structure version number.
PFD_DRAW_TO_WINDOW | // Property flags.
PFD_SUPPORT_OPENGL,
PFD_TYPE_RGBA,
24, // 24-bit color.
0, 0, 0, 0, 0, 0, // Not concerned with these.
0, 0, 0, 0, 0, 0, 0, // No alpha or accum buffer.
32, // 32-bit depth buffer.
0, 0, // No stencil or aux buffer.
PFD_MAIN_PLANE, // Main layer type.
0, // Reserved.
0, 0, 0 // Unsupported.
};
CClientDC clientDC(this);
int pixelFormat =
ChoosePixelFormat(clientDC.m_hDC, &pfd);
BOOL success =
SetPixelFormat(clientDC.m_hDC, pixelFormat, &pfd);
m_hRC = wglCreateContext(clientDC.m_hDC);
return 0;
}
void COgl3d03View::OnDestroy()
{
CView::OnDestroy();
// TODO: Add your message handler code here
wglDeleteContext(m_hRC);
}
void COgl3d03View::DrawWithOpenGL()
{
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.1f, 0.1f, 0.1f);
//glScalef(m_xScale, m_yScale, m_zScale);
glRotatef(20, 1.0f, 0.0f, 0.0f);
glRotatef(15, 0.0f, 1.0f, 0.0f);
glRotatef(30, 0.0f, 0.0f, 1.0f);
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0f, 0.0f, 0.0f);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glBegin(GL_POLYGON);
glVertex3f(-0.5f, 0.0f, -0.5f);
glVertex3f(-0.5f, 0.0f, 0.5f);
glVertex3f(0.5f, 0.0f, 0.5f);
glVertex3f(0.5f, 0.0f, -0.5f);
glEnd();
glBegin(GL_POLYGON);
glVertex3f(-0.5f, 0.0f, 0.5f);
glVertex3f(0.5f, 0.0f, 0.5f);
glVertex3f(0.0f, 0.5f, 0.0f);
glEnd();
glBegin(GL_POLYGON);
glVertex3f(0.5f, 0.0f, 0.5f);
glVertex3f(0.5f, 0.0f, -0.5f);
glVertex3f(0.0f, 0.5f, 0.0f);
glEnd();
glBegin(GL_POLYGON);
glVertex3f(0.5f, 0.0f, -0.5f);
glVertex3f(-0.5f, 0.0f, -0.5f);
glVertex3f(0.0f, 0.5f, 0.0f);
glEnd();
glBegin(GL_POLYGON);
glVertex3f(-0.5f, 0.0f, -0.5f);
glVertex3f(-0.5f, 0.0f, 0.5f);
glVertex3f(0.0f, 0.5f, 0.0f);
glEnd();
glFlush();
}