目次に戻る
一覧ページに戻る
CPImage::AttachOpenGL
2002/02/01 update.
Ver 1.07
OpenGL描画領域を提供します。

書式

  typedef void (* LP_IMAGE_GLPROC)();
  CP_BOOL AttachOpenGL(CPWindow *lpWin,LP_IMAGE_GLPROC lpProc);
  CP_BOOL AttachOpenGL(CPGroup *lpGroup,LP_IMAGE_GLPROC lpProc);

パラメータ


lpWin
親にあたるウィンドウ(CPWindow)のポインタを渡します。
lpGroup
親がグループ(CPGroup)の場合のポインタを渡します。
「lpGroup->GetParentWindow( )」とした場合と同じ意味になります。
lpProc
「void xxxx( )」型のstatic関数を指定します。
OpenGLの描画処理を行うコールバック関数を指定します。

解説


OpenGLの描画領域を提供します。
このメソッドは、「CPImage::SetBounds」「CPImage::SetSize」でイメージのサイズを決定する前に呼び出すようにしてください。
このメソッドを呼び出した場合、CPImageクラスの他の描画関数(「CPImage::ClearImage」「CPImage::DrawLine」「CPImage::DrawPolygon」など)を使用することができなくなります。
OpenGLによる描画命令(glClearColor、glBegin、glVertex3f、glEndなど)を、このコールバック関数内で記述することにより、再描画のタイミング(画面の自動更新・または「CPImage::Repaint」が呼ばれた場合)で OpenGLを使用した描画を行うことができるようになります。
「CPImage::AttachOpenGL」の第一引数には、親となるウィンドウ「CPWindow」(またはグループ「CPGroup」)クラスのポインタを渡すようにしてください。

このOpenGLの機能を使用する場合は、OpenGLの開発環境(SDK)が必要になります。



Windows上の開発環境が「Visual C++ 6.0」の場合は、SDKのインストールは不要です(Visual C++の開発環境に含まれています)。

プロジェクトのリンク時にライブラリ「opengl32.lib」が必要になります。
また、ソースの先頭の#include指定で「#include <GL/gl.h>」 を追加するようにしてください。


「http://developer.apple.com/opengl/」より「OpenGL 1.2 SDK」以降をダウンロードしてください。
ここで展開される「Headers」フォルダにヘッダが、「Libraries」にライブラリが入っています。
これらを検索できるように、CodeWarriorの環境設定でパスを通すようにしておいてください。
リンク時には、OpenGL SDKの「Libraries」フォルダ内にある「OpenGLLibraryStub」が必要になります。 プロジェクトに加えるようにしてください。
また、ソースの先頭の#include指定で「#include <GL/gl.h>」 を追加するようにしてください。






ウィンドウ(ダイアログ)を生成して、その中にイメージを配置します。
このイメージ内でOpenGL描画を行います。

#include <GL/gl.h>

//OpenGLの描画処理
static void OnDrawOpenGL(){
    glClearColor(0.0f , 0.7f , 0.7f , 0.0f);
    glClear(GL_COLOR_BUFFER_BIT);

    glBegin(GL_POLYGON);
    glColor3f  ( 1.0f , 0.0f , 0.0f);
    glVertex3f ( 0.0f , 0.8f , 0.0f);
    glColor3f  ( 0.0f , 1.0f , 0.0f);
    glVertex3f (-0.8f ,-0.8f , 0.0f);
    glColor3f  ( 0.0f , 0.0f , 1.0f);
    glVertex3f ( 0.8f ,-0.8f , 0.0f);
    glEnd();
}

void main()
{
    CPWindow win;
    CPImage image;

    //ダイアログを生成する
    win.Clear();
    win.CreateNewDialog("TestDialog",120,120,200,200);

    //OpenGLモードにする(「SetBounds」より先にこのメソッドを呼ぶこと)
    image.AttachOpenGL(&win,OnDrawOpenGL);

    //イメージの位置・サイズを指定
    image.SetBounds(10,10,160,160);

    //イメージをCPWindowに結びつける
    win.Add(&image);

    //モーダルダイアログの表示
    win.DoModal();
}

この例の場合、OpenGLの描画処理でstatic関数「OnDrawOpenGL」が呼ばれ、結果として以下のような画像が生成されます。




ビルド時に必要なファイル


ライブラリ :CPartsLib.lib (Macintoshの場合は、CPartsCW.a)
ヘッダ :CPImage.h


OpenGL関数を使用した場合
ライブラリ :opengl32.lib (Macintoshの場合は、OpenGLLibraryStub)
ヘッダ :GL/gl.h


関連リンク


CPImageクラス
CPImage::SetBounds
CPImage::SetSize
CPImage::Repaint