MinimalisticOpenGLDemo
MinimalisticOpenGLDemo([multiSample][, imagingPipeline][, checkerBoardTexture][, doAccumulate=0])
このデモでは、OpenGLのコマンドを使って、PTBの中で3Dレンダリング(3次元のCGを呈示する)方法を解説しています。
デフォルトの光源の元で、静止したボールが1つ表示されます。これは、透視投影(perspective projection)で表示される最もシンプルなデモです。さらにこのデモではティーポットと、小さな箱の上に三角錐が乗ったオブジェクトも表示されます。これらが呈示されたあと、キーの入力を待ちます。
その後、テクスチャーのマッピング(訳注:ある形状のものに画像を貼り付けること)およびアニメーションのデモに移ります。
JPEG形式の世界地図の画像を読み込んで(imread関数を使います)、それを Screen('MakeTexture') コマンドを使ってテクスチャーに変換し、さらに Screen('GetOpenGLTexture') コマンドによって OpenGL と互換性のあるテクスチャーに変換します。こうして得られたテクスチャーを、OpenGLの標準のコマンドを使って球体に貼り付けます。最終的には、この球体がまるで地球のように自転運動をしているように見えます。
デモを終わるにはいずれかのキーを押してください。
'multiSample' はオプションの引数で、ハードウェアがサポートしていればピクセルごとに 'multiSample' で指定しただけのサンプルでアンチエイリアシングを施します。
'imagingPipeline' はオプションの引数で、ゼロ以外の値が設定されていると、PTB image processing pipeline が有効になります。
'checkerBoardTexture' はオプションの引数で、ゼロ以外の値が設定されていると、球体に世界地図を貼り付けるのではなく、チェッカーボードのテクスチャー(模様)を貼り付けます。これはアルゴリズムに基づいたテクスチャーの生成のデモであり、高周波成分を持つエッジを含んだ画像の室を改善するためのtrilinear mipmap filtering の使い方を解説したものです。
'doAccumulate' はオプションの引数で、the accumulation bufferを使うことによってモーションブラー効果を付け加えます。
引数imagingPipelineをゼロに、doAccumulateを1に設定した場合、もうすぐ廃止予定の動作が遅い accumulation bufferを使用します。
引数imagingPipelineを1に、doAccumulateを2に設定した場合、新しい高速なものを使用します。
どちらの方法でも同じ効果が得られますが、後者のほうが最近のハードウェアではよくサポートされていて、より柔軟性があり、高速に動作します。
以下は、OpenGLを使用する上での注意点です。
プログラムの最初で、
InitializeMatlabOpenGL
を呼び出してください。これによってPTBと連動した3Dグラフィックの描画が可能になります。その後、C言語で記述するのと同じように、OpenGLの関数を利用することができるようになります。
Matlabに最適化するため、OpenGLの定数の一番最初のアンダーバーはドットに書き換えられています。
たとえば、定数 GL_DEPTH_TESTは、PTBのプログラムではGL.DEPTH_TESTとして指定します。
PTBでOpenGL 3D描画をするためには、
Screen('BeginOpenGL', windowPtr)
を呼び出してください。
その後、描画に必要なOpenGLのコマンドを実行したあと、PTBのScreen関数を呼び出す前に、
Screen('EndOpenGL', windowPtr)
を呼び出してください。これによってPTBは、3D描画が終わったことを知ることができます。
いくつかのOpenGL関数は、Matlabに対して複雑なパラメーターを返してきますが、これらは現段階では適切に処理できません。(まだ開発途中です)
このツールボックスは、OpenGLコマンドを実行したあとに、エラーが生じなかったかどうかを検証します。もしエラーがあった場合にはプログラムを中断します。
これらの検証を行いたくない場合はプログラムの上部で、
InitializeMatlabOpenGL(0,0)
を呼び出してください。
手動でエラーを確認するために、gluErrorString または glGetError コマンドを使うことも可能です。
大体の部分において、MATLABでOpenGLを使うのと、C言語でOpenGLを使うのは同じです。
かつてC言語でOpenGLを使っていたひとならば、すぐに MATLAB + PTB でも同様のことができるでしょう。
も参考にしてください。
% The OpenGL for Matlab toolbox was developed and contributed under
% GPL license by Prof. Richard F. Murray, University of York, Canada and
% ported to M$-Windows and GNU/Linux and tuned by Mario Kleiner.
%
% The earth surface JPEG-image is taken from the Linux/KDE application
% kdeworldclock. kdeworldclock and its components are licensed under
% GPL.
% 15-Dec-2005 -- created (RFM)
% 21-Jan-2006 -- Modified for use with OpenGL-Psychtoolbox (MK)
% 16-Feb-2006 -- Modified for use with new MOGL (MK)
% 05-Mar-2006 -- Cleaned up for public consumption (MK)
% 19-Apr-2006 -- Derived from SpinningCubeDemo (MK)
% 05-May-2006 -- Added some demo code for basic texture mapping (MK)