トップページ
ひらく | たたむ | ページトップ
↓マウスで反転選択した文字を検索
OpenGL
   
ページ内検索 ページ外検索
検索したい文字を入力して
ENTERを押すと移動します。
\n
[ トップページ ]
[ ____CommandPrompt ] [ ____JScript ] [ ____MySQL ] [ ____Cygwin ] [ ____Java ] [ ____Emacs ] [ ____Make ] [ ____Perl ] [ ____Python ] [ ____OpenGL ] [ ____C# ] [ ____StyleSheet ] [ ____C++ ] [ ____Winsock ] [ ____Thread ] [ ____VisualStudio ] [ ____C ] [ ____Win32API ] [ ____Lua ] [ ____PhotoShop ]
ヘッダ検索
___

■ REFERENCE(リファレンス)







___

■ glColorMask

SYNTAX glColorMask() DESC framebuffer の書き込み制御 TRUE : ON FALSE : 描画 OFF ( 黒が MASK )
    ■□■■
___

■ glRasterPos

SYNTAX void glRasterPos[234][sidf]( TYPE x, TYPE y, TYPE z, TYPE w ); DESC RaterPos( Screen 上に描画する bitmap の位置 ) を指定する POINT glRasterPos で指定した位置は VertexTransform の影響をうける 3D 空間での glVertex と同様に考えればいい RasterPos は次の変換をうける
    ObjectSpace ---> ClipSpace ---> WindowSpace

                    ClipingVolume 内にある場合のみ WindowSpace へ変換される

    // glVertex2f() と同じく Texcoord の影響をうける
    glRasterPos2f( 1, 1 );

    // z = 0, w = 1 としての扱われる
    glRasterPos4f( 1, 1, 0, 1 );
POINT 最も初期の FrameBuffer は HostMemory ( Application から直接参照できる Memory ) に格納されていた
___

■ glDrawPixels

SYNTAX void glDrawPixels( unsigned int w, unsigned int h, // Size int fmt, // format ( RGB ) int type, // 型 ( U8 ) void *data // Pixel Data ); DESC CPU memory から FrameBuffer の PixelData に data を転送 ( 読み込んだ画像を直接表示するときに利用する ) glRasterPos() で指定した位置に描画される RasterPos が無効なら描画されない POINT glDrawPixels は以下の State の影響をうける Pixel は 3D の描画と同じく Fragment の変換時に処理をうける そのため Texture が有効なら 影響をうける たいていは Default で問題なし

     ByteOrder
     行の Alignment
          Default では 各行 が 4 Byte Alignment であることを要求
          変更するには glPixelTranser() を使用

     ColorTable Lookup
     PixelZoom
表示されない時は次の State を指定する

    for( unsigned int i=0; i< 8; i++ ){
      glActiveTexture( GL_TEXTURE0 + i );
      glDisable( GL_TEXTURE_1D );
      glDisable( GL_TEXTURE_2D );
      glDisable( GL_TEXTURE_3D );
      glDisable( GL_TEXTURE_CUBE_MAP );
    }

    // Fragment へ変換する際の FOG Color の着色
    glDisable( GL_FOG );

    glDisable( GL_DEPTH_TEST );

さらに Window の一部 が 別の Window に隠されている時も問題になる OpenGL が 隠された 領域から Pixel Data を返せるかどうかは Window System に依存する


POINT
    format
      Pixel が何を表すか GL に伝える
      色なら GL_RGBA
      Depth なら GL_DEPTH_COMPONENT

    type
      Pixel の Data 型

    GL の立場で考えれば この情報は必然
      data の先頭は void * でもらうため

  App::init() {
    glClearColor( 1, 0.7f, 1, 1 );

    data = new unsigned char[ w*h * sizeof(char) * 4 ];

    for( unsigned int i=0; i< w*h; i++ ){
      data[4*i + 0] = 255;
      data[4*i + 1] = 255;
      data[4*i + 2] = 0;
      data[4*i + 3] = 255;
    }

    // 画面 size
    float W = 1024.0f;
    float H = W/2;

    // ModelView 変換はしない
    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity();

    // 画面 size の大きさになるように Frustum を作成
    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
    glOrtho( 0, W, 0, H, 1, 1000 );


    // 影響のある TEST を OFF にする
    // Rasterize 後の FragmentTest で不合格にならないように
    glDisable( GL_DEPTH_TEST );

    // Fragment 変換時に 不要な色がつかないように
    glDisable( GL_TEXTURE_2D );
    glDisable( GL_FOG );

    glDisable( GL_BLEND );

  }

  void App::Draw() {

    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

    static int cnt = 900;
    float y = 100;

    // x <  0 になると消える
    glRasterPos3f( (--cnt), y, -1.5f );   // Z も Frustum にはいるように

    // RasterPos が有効かチェックする
    {
      GLboolean ret;
      glGetBooleanv( GL_CURRENT_RASTER_POSITION_VALID, &ret );
      psc( "raster pos vaiid %d", ret );
    }

    glDrawPixels( w, h, GL_RGBA, GL_UNSIGNED_BYTE, data );

  }



TIP TextureObject を利用した方が処理が早い EXT:GL_ARB_pixel_buffer_object により高速化可能 如何に処理負荷がかかるかわかる WARNING glRasterPos() は VertexTransform の影響をうける MV = UNIT, Frustum == Window の時に同一の場所になる. glWindowPos() VER1.4 で直接指定可能. Rasterize 時の State の影響もうける. Tex OFF DepthTest
___

■ glBitmap

SYNTAX void glBitmap( unsigned int w, unsigned int h, // 画像の大きさ float x, float y, // 開始位置 offset float xinc, float yinc,// 描画後 の RasterPos の移動量( WindowSpace ) byte *data ); DESC 大きさ w, h の bimap ( 1pixel 1 bit 画像 )を x, y の位置から 現在の RasterPos に data を描画 描画後 は xinc, yinc だけ RasterPos が移動する POINT 本来は txt を描画するために利用したが, RasterPos を移動するのに利用する

    // "有効な位置" を指定する
    glRasterPos( )

    // glBitmap() で RasterPos を移動して "有効な位置" からずれても問題なし
    glBitmap()


___

■ glWindowPos

SYNTAX void glWindowPos[23][sifd]( type x, type x, type z ); VER 1.4 DESC RasterPos を WindowSpace で指定する VertexTransform をバイパスする WARNING Symbol が見つからないため 中止
___

■ glClientActiveTexture

SYNTAX void glClientActiveTexture( GLenum unitTex ); DESC VertexArray の tc をわりあてる, UnitTex を指定する. TIP MultiTex && VertexArray の組あわせで使う
___

■ glDepthMask

SYNTAX void glDepthMask( bool flag ); DESC 指定した Buffer の書き込み Mask を設定する. はいってくる Fragment に対して, 指定した bit と && 操作する. なので, glDepthMask( true ); -> Depth 値が Buffer に書き込まれる. TIP glColorMask( bool red, bool, grn, bool blu, bool alp ); glStencilMask( int mask );
___

■ glFinish

SYNTAX void glFinish() DESC コマンドが完全に実行されるまで制御を返さない( BlockAPI ) 発行済みコマンドを強制実行し、グラフィックス ハードウェアやネットワークが コマンドの効果が現れた(描画を終了した)ことを保障した時点で制御が戻ります [GPU]---> おわったよ ----> [CPU] 処理の同期をとる際に利用する たとえば, 2D 表示を別の PostScript などでする場合. 先に 3次元処理を終了しておく. WARNING 同期まちをするので, 過度の使用は APP の処理速度をおとす( 特に Network 経由の場合 ) 基本的に glFlush() を利用すること。
___

■ glFlush

SYNTAX void glFlush() 発行した OpenGL コマンドの実行を強制するという方法が用いられます Flush == 送り出す. [ 有限時間内 ]に終了することが保障される 今の FW では CMyGL::flip() で SwapBuffers( hDC ); をしている App::Draw() の最後. もし Flush ならば, 処理待ちはしていないことになる. 消すとまったく表示されなくなる. しかし App::update() は正しい。 SwapBuffers の前に glFinish() を読んでも動作は OK の. コマンドを発行したからといって、サーバーが描画を終了しているとは限らないのです ClientServerModel だから, Newwork 経由で毎度命令データを送るわけではない. でも促したい場合もある そういう場合は, Flush する( 送り出す ) Graphics 処理は PIPELINE 方式である. POINT [CPU] : 描画CMD 発行. : ( 各 CMD の終了をまつ必要なし ) [GPU] : 専用の HW で処理.: CPU が送り出した 頂点を次々に処理する -> というわけで, CPU は 各 CMD ごとに GPU の処理を待つ必要はない. さて [CPU] < -> [GPU] が Network ではなれていた場合, 描画 CMD をひとつずつ送るのは、大変 OverHead がかかる. -> よって, NetworkProgram は CMD を NetworkPacket にまとめる。 しかし [ 1Frame の描画 CMD の発行が終了した ]際は, 強制的に送ってほしい. Network をはさまない場合は, CMD 発行と同時に即時処理される 次のケースでは glFlush() が有効. 各 Frame の最後で, 残りの CMD をすべて送り出す保障をする. SystemMemory に描画する SoftwareRenderer で 明示的に描画する際.
___

■ glClearColor

SYNTAX void glClearColor( float r, float g, float b, float a ); DESC glClear に使用する Color を設定する [0-1] に clamp される POINT 指定した Alpha 成分も, Clear() するとその値に FrameBuffer の Alpha 成分がなる Shader, glCopyTexImage2D, Blend 時はこの Alpha 成分を利用することになる FragmentShader で Fragment.w の値を指定すると Blend State で以下の影響をうける
    DST( FrameBuffer)  +  SRC( Fragment )
WARNING FrameBuffer に Alpha 成分がなければ Alpha 成分は無視される TIP Alpha も設定できることに注目 glCopyTexImage2D() では Alpha 成分も Copy できる
___

■ glClear

SYNTAX void glClear( GLbitfield mask ) DESC Frame Buffer をクリアする Application は 各 frame の最初に color Buffer と DepthBuffer をクリアする TIP 一度の 呼び出しで 複数の Buffer をクリアすると高速

    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );








金利比較.COM
NINJAIDX 9