基本事項




GL の原則

一度設定した 内容は 変更されるまで有効 State を保存する場所を Rendering Context という WARNING State の状態を正しく管理しないと, 想定しない動作に悩まされる 以下の方法をとる [.] init 時に 頻繁に利用する State にする [.] State を変更するときは 属性 Stack ( Push, Pop ) で囲む
[.] Module 設計, Object 指向 と合性が良い 変更する Code が責任をもって元の State に戻す [.] Code が前提にしているものを取り除く 特定の State を前提にしている Code は他の Code を追加すると破壊されてしまう [.] Code の再利用が簡単になる



描画命令の順

DESC Command の発行順に描画される Primitive 単位でも同じこと glDrawElements();
clearcolor -> drawtri drawtri -> clearcolor では 上塗りされる
TIP matrix の順番も特に指定する必要なし( 現在のstate が描画時に反映 ) 描画時とは begin() - end() の間
glMatrixMode( MV ); glMatrixMode( PROJ ); draw glMatrixMode( PROJ ); glMatrixMode( MV ); draw glMatrixMode( PROJ ); // これは既に有効ではない
透明に関しては以下の3種類 1. 不透明( 手前から, 塗りを減らすため ) 3. クリップ( 奥から描画, αテストの部分が補間の関係でマージンができる為 ) 2. 半透明( 奥から描画 )


glPushAttrib

SYNTAX void glPushAttrib( GLbitfield ); DESC 指定した Group の属性を Stack に Push 利用してみたが, かなり効果的 1 Primitive 描画毎に Push, Pop してもいい
// 全部 保存 glPushAttrb( GL_ALL_ATTRIB_BITS );



glPopAttrib




glPushClientAttrib




glPopClientAttrib




State の設定 クエリ




glIsEnabled()

SYNTAX bool glIsEnabled( GLenum val ); DESC test whether a capability is enabled


glGet

DESC OpenGL の実装依存の情報を取得する ( init 時にする ) 問い合わせる型にあった関数を利用する
float m[16]; glGetFloatv( GL_MODELVIEW_MATRIX, m );



Stack を使って管理する

State の変更を管理するための stack( 属性スタック ) が Server, Client 側にある


glPushAttrb

SYNTAX glPushAttrb( GLbitfield mask ) glPopAttrb();
// Material, Light 属性のみを Push する glPushAttrb( GL_LIGHTING_BIT ); // そして元に戻す glPopAttrb(); // Stack のサイズをしらべる int nr; glGetIntegerv( GL_MAX_ATTRIB_STACK_DEPTH, &nr );



開発環境

以下の Header, library が必要 [.] OpenGL Header, library [.] Window System の Header, library visualstudio.net には OpenGL 1.1 の Header と Export StubLibrary がふくまれる // version 1.1 以降の機能, 拡張機能 を利用するには glext.h が必要 # include "GL/glext.h" Microsoft Compiler は glu1.2 の header, StubLibrary を含む


用語




Primitive

DESC Primitive とは 1 つ以上の 頂点のグループ 線の Primitive は 2 つ以上の頂点が必要。 プリミティブは頂点を組み立てることで生成される。