01.ベースOpenGLレンダラクラスを作る



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

解説

OpenGLを使用して描画をするためにすべきことは、以下です。

  1. 初期化処理として、wglCreateContext関数を用いて、レンダリングコンテキストを作成する。
  2. 初期化処理として、wglMakeCurrent関数を用いて、作成したレンダリングコンテキストをカレントレンダリングコンテキストに設定する。
  3. ウインドウのサイズが変更された際に呼び出されるWM_SIZEメッセージ処理で、ビューポートの設定、投影変換行列の構築、モデリングビューイング変換行列の構築をする。
  4. ビューを描画する時に呼び出されるWM_PAINTメッセージ処理で、モデル描画の処理をする。

プロジェクトの作成

「メニュー/新規作成/プロジェクト」を選択します。


プロジェクトの種類:Win32
テンプレート:Win32 プロジェクト
プロジェクト名:ModelViewer
場所:適当なフォルダを指定
ソリューションのディレクトリの作成:チェックしない
でOKボタンを押します。


次へボタンを押します。


アプリケーションの種類:Windows アプリケーション
空のプロジェクト:チェックしない
で完了ボタンを押します。

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

ベースOpenGLレンダラクラスの作成

「メニュー/プロジェクト/クラスの追加」でクラス名「COpenGLRendererBase」のクラスを作成します。


テンプレート:C++ クラス
で追加ボタンを押します。


クラス名:COpenGLRendererBase
で完了ボタンを押します。

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

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

stdafx.h の末尾に、 assert.h のインクルードを追加します。



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

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

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



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

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

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



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

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

OpenGLRendererBase.h のベースOpenGLレンダラクラス定義にメンバ変数、メンバ関数の宣言を追加します。



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

メンバ変数の初期化

OpenGLRendererBase.cpp のベースOpenGLレンダラクラスのコンストラクタにメンバ変数の初期化を追加します。



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

OpenGL初期化処理

OpenGLRendererBase.cpp の末尾にOpenGL初期化処理の定義を追加します。



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

OpenGL終了処理

OpenGLRendererBase.cpp の末尾にOpenGL終了処理の定義を追加します。



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

ビューポート設定処理

OpenGLRendererBase.cpp の末尾にビューポート設定処理の定義を追加します。



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

投影変換行列の構築処理

OpenGLRendererBase.cpp の末尾に視野角錐台設定処理の定義を追加します。



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

モデリングビューイング変換行列の構築処理

OpenGLRendererBase.cpp の末尾に視点座標変換処理の定義を追加します。



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

サイズ変更処理

OpenGLRendererBase.cpp の末尾にサイズ変更処理の定義を追加します。



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

描画処理

OpenGLRendererBase.cpp の末尾に描画処理の定義を追加します。



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

レンダラオブジェクトの宣言

ModelViewer.cpp に、
#include "OpenGLRendererBase.h"
および
COpenGLRendererBase glrenderer;
を追加します。



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

ウィンドウスタイルの変更

OpenGLが他のウィンドウに描画するのを防ぐために、ModelViewer.cpp の InitInstance関数内のCreateWindows関数呼び出しのウィンドウスタイルパラメータに、WS_CLIPSIBLINGS と WS_CLIPCHILDREN を追加します。



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

WM_PAINTメッセージ処理の変更

ModelViewer.cpp の WndProc関数の、WM_PAINTメッセージ処理の、BeginPaintとEndPaintの間に描画処理の呼び出しを追加します。



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

WM_DESTROYメッセージ処理の変更

ModelViewer.cpp の WndProc関数の、WM_DESTROYメッセージ処理に、OpenGL終了処理の呼び出しを追加します。



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

WM_ERASEBKGNDメッセージ処理の追加

画面の描画はOpenGLがすべてを行うので、既定の画面背景消去処理を無効にします。
ModelViewer.cpp の WndProc関数に、WM_DESTROYメッセージ処理を追加します。
処理は、return 1; とします。



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

WM_SIZEメッセージ処理の追加

ModelViewer.cpp の WndProc関数に、WM_SIZEメッセージ処理を追加します。
サイズ変更処理の呼び出しを追加します。



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

実行

実行結果

ダウンロード

ソースファイルダウンロード ( ModelViewerOpenGLWinAPI2015_01_base.zip )

関連ページ

次項目:02.トラックOpenGLレンダラクラスを作る