Edit
OpenGLとは

3Dの頂点座標を計算し、物体を3Dに見せる技術であり、大きくわけて物体の動きや位置などの計算を行う「座標計算」とそれらの計算された結果である座標を持つ物体情報を元に、画像に変換する「Shader」の2つの機能で構成される。

Edit
座標系のついて

OpenGLでは、右手座標系を採用している。この右手や左手というとわかりづらいが、回転をさせるとき、右手系は反時計回りが正方向となり、左手系は時計回りが正方向になることだけと覚えておくと良い。

Edit
Shader(シェーダー)における基礎

Shaderとは、主にライティング(光源計算)・シェーディング(陰影処理)とレンダリング(ピクセル化)を実行するためにグラフィック リソースに対して使用するソフトウェア命令の組み合わせである。昔は3Dグラフィックチップが固定で持っていたシェーダのみが利用可能だったが、近年はすべてプログラマブルシェーダとなり、シェーディング処理をプログラムで記述でき表現力が格段に向上している。

OpenGLに代表されるShaderでは、大きくわけて、Vertex Shader(頂点シェーダ)、Flagment Shader(別名:ピクセルシェーダ)、Primitive shader(別名:ジオメトリシェーダ)の3種類が存在する。

Edit
Vertex Shader(頂点シェーダ)

Vertex Shaderの役割は言葉の通り、頂点に対する処理を担当する。たとえば、頂点に色を設定しその色によって、物体への色味に影響をさせたり、光源からの光の影響範囲を計算し物体に影響させたり、またテクスチャーは貼ってある座標(テクスチャマッピング座標)を変更することも出来るので、物体の表面のテクスチャーを変更することなど、頂点に関する演出表現を行う場合に利用される。

Edit
Primitive Shader(別名:ジオメトリ・シェーダ)

Primitive Shaderは、Vertex Shaderの後で、Flagment Shaderの前に行われる中間処理で、主に頂点座標を一時的に増やすなどを行うことで、よりなめらかな物体を表現する場合などに利用される。(この機能を持たないGPUもある)

Edit
Flagment Shader(別名:ピクセルシェーダ)

Flagment Shaderは、シェーディングの最終プロセスであり、主に物体情報に貼り付けるテクスチャーに対しての表現処理を行う。たとえば、実際の座標では平面になっているところを、Bumpマッピングなどの特殊な表面処理を行うことで、表面に緻密な凹凸があるように見せる処理など、テクスチャーを生かした演出表現を行う場合などに利用される。

Flagment Shaderではかなりの種類の表現が行え、代表的なものでは以下の演出がある。

Edit
OpenGL Utility Toolkit(GLUT)

GLUTは、OpenGLをC/C++で利用するためのライブラリであり、通常プログラムからOpenGLを利用する場合には必須となるライブラリと考えて良い。

Edit
OpenGLにおける代表的な関数の説明

Edit
用語

Edit
一般用語

用語解説
テクセルテクスチャーバッファ内のピクセル(Pixel)のことをテクセル(Texel)と呼ぶ
フラスタム (frustum)表示可能空間領域。カメラ(ビューポート)から見える範囲の座標空間を指す。クリッピングなどの機能に関係する。オブザーバから見える、透視除算によって歪んだ空間領域
ジオメトリ変換3次元の情報を2次元に変換(転写)
アフィン変換並行移動、拡大縮小、回転の図形変換
射影変換代表的な変換方法に透視法射影がある。3Dモデルを2D座標系に射影する場合この方法では、カメラから遠くのものが小さくなる。(視点を頂点としたピラミッド的な見え方)正射影では3Dとカメラとの距離が考慮されずそのままの大きさが射影される。
右手座標系OpenGLでは手前の物体ほど値が大きい右手座標系を利用する。(対義語:左手座標系)
ビューポート2D化された射影画像をデバイスなどへその表示領域を設定する。方形の原点がデバイスの左下隅であることに注意。
アンチエイリアス化(anti-aliasing)グラフィックスにおいて、テキストや線画、画像などのグラフィカルオブジェクトを描画したときに現れることのある、ギザギザになった(エイリアス化した)エッジを滑らかにしたり、ぼやかしたりするテクニック。
フォグ(fog)オブザーバからの距離に基づき、背景色へと色をフェードすることによって達成される効果。フォグは、オブザーバに深度の手がかりを与える。
フラグメント(fragment)プリミティブをラスタ化するときに計算された色と深度の値。各フラグメントは、フレームバッファに格納されているピクセルとブレンドする前に一連のテストを通過しなければならない。
GLUT (OpenGL Utility Toolkit)OpenGL Utility Toolkit とは、3次元コンピュータグラフィックス処理のプログラミングインタフェースOpenGLに準拠したC言語のライブラリである。
OpenCVCVとは、Computer Visionの略で元はロボット工学から派生しているが、画像解析や物理演算など3Dグラフィックにも共通で利用される技術も多い。
ハイダイナミックレンジ(HDR)レンダリング人間が見た感覚というシミュレーションを付加することで、リアルな映像を作り出そうというアプローチ
VBOVertex Buffer Object(VBO)とは、GPU側の頂点データを格納する領域であり、描画呼び出し毎にメインメモリからGPUに毎回データ転送される負荷を緩和させ速度を向上させる機能である。
IBO (Index Buffer Object)複雑な形状を持つ物体では、面の計算の際に利用する頂点を使い回すことで頂点情報を減らしまたデータ転送量を減らせる為、これら頂点のテーブルをインデックスバッファと呼ぶ。
PBOPixel Buffer Object(PBO)とは、GPU側にピクセル情報(テクスチャー等)を保存させる領域であり、メインメモリとはDMA転送することで、CPUの負荷やピクセル情報の高速転送を可能にしている。またフレームバッファからのピクセル情報のデータ送受信も行える。
FBOFrame Buffer Object(FBO)とは、オフライン(実際の描画領域ではない)として利用できるフレームバッファであり、RBOとテクスチャオブジェクトを関連付けることでテクスチャへのレンダリングが可能となり.よく利用するものとして自動車ゲームのバックミラーなどに利用できる
RBO(公式サイト)Render Buffer object(RBO)とは、通常FBOと共に作成される、RBO自身はテクスチャー的に扱われ、FBOとバインドすることでポリゴンのテクスチャーとして指定できる。
ブルーム効果強い光が溢れて見えるような効果。グレア効果ともいう。
ミップマップ描画の大きさによって、あらかじめ登録された複数の解像度のテクスチャーを自動的に切り替えることで、拡大縮小時の画像の粗を押さえる機能
バンプマップ平面テクスチャーのα値の部分を面の高さと見なし、擬似的に1ポリゴンの中でも細かい起伏を付けることが出来る技術
法線マッピングテクスチャーのRGB値を、それぞれXYZの法線ベクトル値とすることで、ポリゴンの表面の陰影をよりリアルにみせることができる技術
テクスチャユニットテクスチャマッピングの処理を行うハードウェアのことを,テクスチャユニットと呼ぶ。ユニット数がマルチテクスチャの枚数と合致する。
3次元テクスチャー
RBO.png

Edit
フレームバッファ内の用語

フレームバッファ内の呼称役割
カラーバッファ実際に描画に利用される色情報が格納されたバッファ。ダブルバッファや立体視用(stereo)などで複数存在することも多い。
デプスバッファいわゆるZバッファ、ポリゴンの描画の順番だけだと重ね合わせが、大雑把になりすぎて表示がおかしくなるため、ピクセル毎にZ座標を持ってピクセル描画時に座標をチェックしピクセル描画することで精度を高める機能
ステンシルバッファ値を見てピクセル描画の有無が判定できる機能、Zバッファと似ているが、Z値でなく任意の値を設定できる。これにより、鏡面や影の描画、立体同士の集合演算で定義された複雑な形状の描画を効率的に行うことができるようになる。
アキュームレーションバッファカラーバッファの値を加工するための演算用カラーバッファ。モーションブラーなどのエフェクトに利用される。ロストプラネットでのブラー

Edit
テクスチャーフォーマット

フォーマット名概要制限
PVRTC (Power VR Texture Compression)iPhone独自の独自のテクスチャ圧縮フォーマット。PNG や JPEG などと違って圧縮展開する時間がロスにならず、テクスチャとして読み込んだバイナリファイルがそのままグラフィックスハードウェアで利用できるので効率がいい。1.最小pixelは8以上 2.pixel数は2の累乗 3.画像は正方形
ETC1

リンク

GPU名称対応テクスチャーフォーマット
PowerVR SGXETC1, PVRTC
Qualcomm AdrenoETC1, ATITC, 3DC, PALETTE
ATI ImageonETC1, ATITC, 3DC, PALETTE
NVIDIA Tegra2ETC1, S3TC(DXT), LATC
ZiiLabs ZMS-08 HDETC1, S3TC(DXT), PALETTE
フォーマットα付FourCCピクセル深度
PVRTCRGB4bpp
PVRTCRGBA4bpp
PVRTCRGB2bpp
PVRTCRGBA2bpp
ATITCRGB'ATC '4bpp
ATITCRGBA'ATCA'8bpp Explicit Alpha
ATITCRGBA'ATCI'8bpp Interpolated Alpha
S3TCRGB'DXT1'4bpp BC1
S3TCRGBA'DXT1'4bpp BC1 (1bit alpha)
S3TCRGBA'DXT3'8bpp BC2
S3TCRGBA'DXT5'8bpp BC3
ETCRGB'ETC '4bpp

|DDS|RGB '1TXD' DXT1 '2TXD' DXT2 '3TXD' DXT3 '4TXD' DXT4 '5TXD'

Edit
ライティング

用語概要
光源光っている点。点座標で表現され、環境光・拡散光・鏡面光の3つが設定できる。またハードによって光源の設定できる数に上限がある。(通常8個程度)初期値:座標(0,0,1)、環境光 (0,0,0,1)、拡散光(1,1,1,1)、鏡面光(1,1,1,1)
マテリアル(質感)物体の表面にも光源と同じように、環境光・拡散光・鏡面光の3つが設定できる。これにより光源とのマテリアルの値の2つを利用して質感の表現を行う。初期値:環境光(0.2, 0.2, 0.2, 1.0)、拡散光(0.8, 0.8, 0.8, 1.0)、鏡面光(0, 0, 0, 1)
環境光 (ambient)
拡散光 (diffuse)
鏡面光 (specular)

Edit
手順概要

Edit
テクスチャー

テクスチャーとは、ポリゴンの表面に画像を貼り付けることで少ないポリゴン数で物体表現を向上させる技術であり、OpenGLではテクスチャーオブジェクトを作成し、そこにテクスチャー画像をバインドすることで利用することができる。また特徴的な点として、OpenGLでは、テクスチャ名は内部的には番号(整数)で管理される。

Edit
関数

種別関数名機能
TextureInitTextureテクスチャーをGLuintの配列を通して登録する
glGenTextures
glDeleteTextures
glTexCoord2fテクスチャーをポリゴンに貼り付ける
glEnable(GL_TEXTURE_2D)テクスチャーマップを有効にする
glDisable(GL_TEXTURE_2D)フラットシェーディングに戻す
glActiveTextureテクスチャーユニットを切り替える
Texture ObjectglBindTextureテクスチャーオブジェクトを設定する
DrawTexture ExtentionglDrawTexfOES

Edit
定数

定数意味
GL_TEXTURE_1Dテクチャーの次元を表す。2Dが2次元で、1Dが1次元テクスチャとなる
GL_TEXTURE_2D
GL_PROXY_TEXTURE_2D

Edit
HOWTO

Edit
ハードスペックの取得

GLint maxTex;
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTex);    // ここでは最大テクスチャーサイズの取得
iPhpne3GiPhone3GS以降
テクスチャーサイズ(GL_MAX_TEXTURE_SIZE)10242048
テクスチャメモリ上限24MB制限無し
3次元テクスチャーの上限(GL_MAX_3D_TEXTURE_SIZE)
テクスチャーユニット数(GL_MAX_TEXTURE_UNITS)28
ライトの数(GL_MAX_LIGHTS)88

Edit
ハード情報の取得

const char* res = (const char*)glGetString( GL_VERSION );
glGetString用の定数概要
GL_VERSIONOpenGLのバージョン
GL_VENDORGPUの製造会社
GL_RENDERERチップセットの名称と型番
GL_EXTENSIONS対応している extention の一覧
GL_SHADING_LANGUAGE_VERSION対応しているシェーダー言語のバージョン

※この GL_EXTENSIONS に記載されていても、対応していない機能や、逆の対応している場合など、メーカーによってここの記載はいい加減な場合がある。

Edit
テクチャーの大きさ

OpenGLライブラリを実装した機種では、ハードに依存する問題ではあるが、テクスチャーのサイズが、2^n(2のn乗)でなければならないものがあったり、サイズに制限が無い場合でも、描画速度に2倍ほどの違いが発生する。(2^nのサイズの方が約2倍速い)

Edit
半透明の合成

glBlendFunc(src_factor, dest_factor)を利用する。

src = 元画像(テクスチャー)の色
dest = 描画先画像(つまり、画面バッファ)の色

とした場合、計算式的は、

実際に画面に描画される色 = src * src_factor + dest * dest_factor
合成名Src FactorDest Factor
アルファ合成GL_SRC_ALPHAGL_ONE_MINUS_SRC_ALPHA
加算合成GL_SRC_ALPHAGL_ONE
乗算合成GL_ZEROGL_SRC_COLOR
反転合成GL_ONE_MINUS_DST_COLORGL_ZERO
スクリーン合成GL_ONE_MINUS_DST_COLORGL_ONE
排他的論理和合成GL_ONE_MINUS_DST_COLORGL_ONE_MINUS_SRC_COLOR

Edit
Extention

OpenGLでは、通常のOpenGLの命令の他に次世代命令およびメーカー依存命令などをExtensionと呼び、利用することでGPUの能力を最大限に活用することができる。

Edit
リンク

添付ファイル: fileRBO.png 1175件 [詳細]