1.ベースOpenGLビュークラスを作る



OpenGLの初期化処理と終了処理を行い、OpenGLを用いた描画処理の骨格を担う、ベースOpenGLビュークラスを作成します。

実行形式ファイルダウンロード (BaseOpenGL_exe.lzh)

ソースファイルダウンロード (BaseOpenGL_src.lzh)

プロジェクトの作成

プロジェクトの種類:MFC AppWizard (exe)
プロジェクト名:BaseOpenGL
位置:適当なフォルダを指定
それ以外:デフォルト設定のまま
でプロジェクトを作成します(OKボタンを押します)。


作成するアプリケーションの種類:SDI
それ以外:デフォルト設定のまま
で次へボタンを押します。


設定を変更せず次へボタンを押します。


設定を変更せず次へボタンを押します。


印刷および印刷プレビュー:チェックを外します
それ以外:デフォルト設定のまま
で次へボタンを押します。


設定を変更せず次へボタンを押します。


設定を変更せず終了ボタンを押します。


OKボタンを押します。


ビルドし、エラー、警告がないことを確認します。

OpenGLのヘッダーファイルのインクルード

BaseOpenGLView.h に以下の3行のOpenGLのヘッダーファイルのインクルードを追加します。
#include <gl\gl.h>
#include <gl\glu.h>
#include <gl\glaux.h>



ビルドし、エラー、警告がないことを確認します。

OpenGLのlibファイルをプロジェクトに追加

BaseOpenGLView.cpp に以下の3行のOpenGLのlibファイルをプロジェクトに追加する記述を追加します。
#pragma comment( lib, "opengl32.lib" )
#pragma comment( lib, "glu32.lib" )
#pragma comment( lib, "glaux.lib" )



ビルドし、エラー、警告がないことを確認します。

メンバ変数、メンバ関数の宣言の追加

BaseOpenGLView.h のベースOpenGLビュークラス宣言の最後にメンバ変数、メンバ関数の宣言を追加します。



ビルドし、エラー、警告がないことを確認します。

メンバ変数の初期化

ベースOpenGLビュークラスのコンストラクタにメンバ変数の初期化を追加します。



ビルドし、エラー、警告がないことを確認します。

PreCreateWindow()の編集

OpenGLが他のウィンドウに描画するのを防ぐために以下の行をベースOpenGLビュークラスのPreCreateWindow関数に追加します。
cs.style |= WS_CLIPSIBLINGS | WS_CLIPCHILDREN;



ビルドし、エラー、警告がないことを確認します。

OnEraseBkgnd()の追加、編集

ClassWizardを用いて、ベースOpenGLビュークラスにWM_ERASEBKGNDメッセージに対応するメッセージハンドラOnEraseBkgndを追加します。


画面の描画はOpenGLがすべてを行うので、既定の画面背景消去処理を無効にします。
元からあるreturn文をコメントアウトし、
return TRUE;
を追加します。



ビルドし、エラー、警告がないことを確認します。

OnSize()の追加、編集

ベースOpenGLビュークラスにWM_SIZEメッセージに対応するメッセージハンドラOnSizeを追加します。
OpenGL初期化処理、ビューポート設定処理、視野角錐台設定処理、視点座標変換処理のメンバ関数の呼び出しを追加します。



OpenGL初期化処理の定義を追加します。



ビューポート設定処理の定義を追加します。



視野角錐台設定処理の定義を追加します。



視点座標変換処理の定義を追加します。



ビルドし、エラー、警告がないことを確認します。

OnDestroy()の追加、編集

ベースOpenGLビュークラスにWM_DESTROYメッセージに対応するメッセージハンドラOnDestroyを追加します。
OpenGL終了処理を追加します。



ビルドし、エラー、警告がないことを確認します。

OnDraw()の編集

描画に関するOpenGL関数の呼び出しおよびメンバ関数の呼び出しを追加します。



描画に関するメンバ関数の定義を追加します。



ビルドし、エラー、警告がないことを確認します。

実行

実行結果