//StdAfx.h
#include<gl/gl.h>
#include<gl/glu.h>
#include<gl/glaux.h>
#include<afxtempl.h>
//添加静态库
opengl32.lib
glu32.lib
glaux.lib
//COpenGLCtrl message maps
OnDestroy() WM_DESTROY
OnEraseBKgnd() WM_ERASEBKGND
OnSize() WM_SIZE
OnCreate() WM_CREATE
//COpenGLCtrl Add Member Variable
protected:
HDC m_hDC;
HGLRC m_hRC;
//COpenGLCtrl Add Member Function
protected:
void Draw();
void Draw()
{
glClearColor(1,1,1,1);
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
gluLookAt(5,5,5,0,0,0,0,1,0);
//glRotatef(30,1,1,0);
glColor3f(0,0,0);
GLfloat RAD=3.1415926/180.0;
GLfloat x,y,z,r;
int i,j;
for(i=0;i<180;i+=5)
{
glBegin(GL_LINE_LOOP);
r = 2*sin(i*RAD);
z = 2*cos(i*RAD);
for(j=0;j<360;j+=10)
{
x = r*cos(j*RAD);
y = r*sin(j*RAD);
glVertex3f(x,y,z);
}
glEnd();
}
for(j=0;j<360;j+=10)
{
glBegin(GL_LINE_LOOP);
for(i=0;i<=180;i+=10)
{
r = 2*sin(i*RAD);
z = 2*cos(i*RAD);
x = r*cos(j*RAD);
y = r*sin(j*RAD);
glVertex3f(x,y,z);
}
glEnd();
}
SwapBuffers(m_hDC);
}
///
// 重载 //
///
BOOL COpenGLCtrl::PreCreateWindow(CREATESTRUCT& cs)
{
cs.style = WS_CLIPSIBLINGS | WS_CLIPCHILDREN;
return CView::PreCreateWindow(cs);
}
void COpenGLCtrl::OnDraw(CDC* pDC)
{
Draw();
}
//在OnCreate()中设置图形操作描述表和像素格式:
int COpenGLCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
PIXELFORMATDESCRIPTOR pfd=
{
sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_DRAW_TO_WINDOW|
PFD_SUPPORT_OPENGL|
PFD_DOUBLEBUFFER,
PFD_TYPE_RGBA,
24,
0,0,0,0,0,0,
0,
0,
0,
0,0,0,0,
32,
0,
0,
PFD_MAIN_PLANE,
0,
0,0,0
};
m_hDC=GetDC()->GetSafeHdc();
int nPixelFormat=::ChoosePixelFormat(m_hDC,&pfd);
::SetPixelFormat(m_hDC,nPixelFormat,&pfd);
m_hRC=::wglCreateContext(m_hDC);
::wglMakeCurrent(m_hDC,m_hRC);
return 0;
}
void COpenGLCtrl::OnDestroy()
{
::wglMakeCurrent(NULL,NULL);
::wglDeleteContext(m_hRC);
}
void COpenGLCtrl::OnSize(UINT nType,int cx,int cy)
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(30,1,-3,3);
glMatrixMode(GL_MODELVIEW);
glViewport(0,0,cx,cy);
glShadeModel(GL_FLAT);
}
///
// //
// //
// openGL控件制作2 //
// //
// //
///
void Draw();
HGLRC m_hRC;
CClientDC *m_hDC;
void COpenGLCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
glClearColor(1.0f,1.0f,1.0f,0.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluLookAt(5,5,5,0,0,0,0,1,0);
glColor3f(0,0,0);
GLfloat RAD=3.1415926/180;
GLfloat x,y,z,r;
int i,j;
for(i=0;i<180;i+=5)
{
glBegin(GL_LINE_LOOP);
r = 2*sin(i*RAD);
z = 2*cos(i*RAD);
for(j=0;j<360;j+=10)
{
x = r*cos(j*RAD);
y = r*sin(j*RAD);
glVertex3f(x,y,z);
}
glEnd();
}
for(j=0;j<360;j+=10)
{
glBegin(GL_LINE_LOOP);
for(i=0;i<=180;i+=10)
{
r = 2*sin(i*RAD);
z = 2*cos(i*RAD);
x = r*cos(j*RAD);
y = r*sin(j*RAD);
glVertex3f(x,y,z);
}
glEnd();
}
glFinish();
SwapBuffers(wglGetCurrentDC());
}
int COpenGLCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (COleControl::OnCreate(lpCreateStruct) == -1)
return -1;
static PIXELFORMATDESCRIPTOR pfd=
{
sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_DRAW_TO_WINDOW|
PFD_SUPPORT_OPENGL|
PFD_DOUBLEBUFFER,
PFD_TYPE_RGBA,
24,
0,0,0,0,0,0,
0,
0,
0,
0,0,0,0,
32,
0,
0,
PFD_MAIN_PLANE,
0,
0,0,0
};
int pixelformat;
int n;
m_hDC=new CClientDC(this);
if((pixelformat=ChoosePixelFormat(m_hDC->GetSafeHdc(),&pfd))==0)
{
MessageBox("choosepixelformat failed");
return FALSE;
}
if(SetPixelFormat(m_hDC->GetSafeHdc(),pixelformat,&pfd)==FALSE)
{
MessageBox("setpixelformat failed");
return FALSE;
}
n=::GetPixelFormat(m_hDC->GetSafeHdc());
::DescribePixelFormat(m_hDC->GetSafeHdc(),n,sizeof(pfd),&pfd);
m_hRC=wglCreateContext(m_hDC->GetSafeHdc());
wglMakeCurrent(m_hDC->GetSafeHdc(),m_hRC);
return 0;
}
void COpenGLCtrl::OnSize(UINT nType, int cx, int cy)
{
COleControl::OnSize(nType, cx, cy);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(30,1,-3,3);
glMatrixMode(GL_MODELVIEW);
glViewport(0,0,cx,cy);
glShadeModel(GL_FLAT);
}
void COpenGLCtrl::OnDestroy()
{
COleControl::OnDestroy();
::wglMakeCurrent(NULL,NULL);
if(m_hRC)
::wglDeleteContext(m_hRC);
if(m_hDC)
delete m_hDC;
}
//
// //
// event map: //
// InitOpenGL //
// LButtonUp(long nFlags,short x,short y) //
// LMouseMove(short x,short y) //
// ReDraw //
// ReSize //
// LButtonDown(long nFlags,short x,short y) //
// //
//
/*
glBegin(GL_LINES);
glColor3f(0.0,1.0,0.0);
glVertex3f(0.0,0.0,0.0);
glVertex3f(50.0,0.0,0.0);
glColor3f(1.0,0.0,0.0);
glVertex3f(0.0,0.0,0.0);
glVertex3f(0.0,50.0,0.0);
glColor3f(0.0,0.0,1.0);
glVertex3f(0.0,0.0,0.0);
glVertex3f(0.0,0.0,50.0);
glEnd();
*/