首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

以 OpenGL 實現簡易動畫效果的 MFC 架構

     編輯:關於VC++

專案建立步驟

  1. 建立 Win32 Application 空專案。
  2. 專案設定 → General → "Use MFC in a Static Library"。
  3. 連結庫:glu32.lib glaux.lib opengl32.lib。
  4. 手工新增 OpenGLApp : CWinApp 與 OpenGLWin : CFrameWnd 類別。

核心類別實作

// OpenGLApp.cpp
OpenGLApp::InitInstance() {
    OpenGLWin* pWnd = new OpenGLWin;
    pWnd->ShowWindow(SW_SHOWNORMAL);
    pWnd->UpdateWindow();
    m_pMainWnd = pWnd;
    return TRUE;
}
OpenGLApp app;

// OpenGLWin.h
class OpenGLWin : public CFrameWnd {
    HGLRC m_hglrc;
    afx_msg int OnCreate(LPCREATESTRUCT);
    afx_msg void OnPaint();
    afx_msg void OnDestroy();
    void myinit(); void drawsphere(); void OnDrawSin();
    DECLARE_MESSAGE_MAP()
};

// OpenGLWin.cpp
BEGIN_MESSAGE_MAP(OpenGLWin, CFrameWnd)
    ON_WM_CREATE() ON_WM_PAINT() ON_WM_DESTROY()
END_MESSAGE_MAP()

OpenGLWin::OpenGLWin() { myinit(); Create(NULL, _T("OpenGL Demo")); }

void OpenGLWin::myinit() {
    HDC hdc = ::GetDC(m_hWnd);
    // 設定像素格式、建立 RC ...
    m_hglrc = wglCreateContext(hdc);
    wglMakeCurrent(hdc, m_hglrc);
    glClearColor(0,0,0,1);
    ::ReleaseDC(m_hWnd, hdc);
}

void OpenGLWin::drawsphere() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    auxSolidSphere(1.0);
    glFlush(); auxSwapBuffers();
}

void OpenGLWin::OnDrawSin() {
    static float angle = 0;
    angle += 0.05f;
    glLoadIdentity();
    gluLookAt(5*sin(angle), 0, 5*cos(angle), 0,0,0, 0,1,0); // 繞 Y 軸公轉
    drawsphere();
}

void OpenGLWin::OnPaint() {
    CPaintDC dc(this);
    wglMakeCurrent(dc.m_hDC, m_hglrc);
    OnDrawSin();
}

void OpenGLWin::OnDestroy() {
    wglMakeCurrent(NULL, NULL);
    wglDeleteContext(m_hglrc);
    CFrameWnd::OnDestroy();
}

此範例展示最小化 MFC + OpenGL 架構,透過 gluLookAt 移動視點模擬動畫,適合作為進一步擴展的基礎。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved