本程序主要通過不斷改變視口位置來模仿動畫效果,同時介紹了在進行opengl繪圖時所做的一些不可或缺的准備工作。
一、首先新建一個 “Win32 Application” 的空工程。
二、然後將 “glu32.lib glaux.lib opengl32.lib” 引入工程之中。
三、在工程->設置->General裡將 “Microsoft Foundation Classes” 改為“Use MFC in a Static Library”。
四、因為我們建立的是一個空工程,所以必須為此工程添加必要的類代碼。先建一個 OpenGLApp 類,基類是 CWinApp,構造函數和析構函數都為空,同時添加一個 BOOL 型的 InitInstance(),用來顯示窗口。其內容如下: OpenGLWin* pMainWnd = new OpenGLWin;
別忘了在實現文件裡添加app對象 OpenGLApp app;
pMainWnd->ShowWindow(SW_SHOWNORMAL);
pMainWnd->UpdateWindow();
m_pMainWnd = pMainWnd;
return TRUE;
五、下面建立另一個類 OpenGLWin,其基類是CFrameWnd
手工添加以下消息映射: protected:
添加如下函數及變量:
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnPaint();
afx_msg void OnDestroy();
DECLARE_MESSAGE_MAP()
void drawsphere();
頭文件構造完畢。下面是實現文件:首先添加頭文件
void OnDrawSin();
void myinit();
HGLRC hglrc; //rc句柄
#include "gl\gl.h"
在構造函數之前手工添加:
#include "gl\glu.h"
#include "gl\glaux.h"
#include <math.h>
BEGIN_MESSAGE_MAP(OpenGLWin, CFrameWnd)
構造函數內容如下:
ON_WM_CREATE()
ON_WM_PAINT()
ON_WM_DESTROY()
END_MESSAGE_MAP()
myinit();
用以創建缺省的窗口,及初始化。初始化函數:
Create(NULL, "OpenGLApp---FLoat WorkStudio");
void OpenGLWin::myinit()
{
glClearColor(0.0,0.0,0.0,1.0);////背景色清屏色
glClear(GL_COLOR_BUFFER_BIT);
// glVertex3d(0.4,0.4,0.4);
}
下面用drawsphere()來繪制實體球。 在OnDrawSin()裡通過改變視口來用 drawsphere() 繪制的球模仿兩種周期不同的正弦曲線。最後在OnPaint()裡調用OnDrawSin()在窗口內繪制動畫。當然也不要忘了必要的銷毀工作 OnDestroy()。