低レベルのグラフィックスライブラリです。
OpenGL の即時モードと同様のアクティブな変換行列、
レンダリングコマンドでの出力などの低レベルグラフィックスのタスクを実行します。
ほとんどの場合で GL 関数の即時描画モードを使用するよりも Graphics.DrawMesh や CommandBuffer 関数を使用する方が
効率的であることに注意してください。
GL 即時描画関数は設定した"現在のマテリアル"を使用します(Material.SetPassを参照してください。)。
どのようにレンダリングを行うかマテリアルを制御 (ブレンディングやテクスチャなど)します。
GL 描画関数を使用する前に明示的に設定しなければマテリアルは何もできません。
また、 GL 描画コード内から他の描画コマンドを呼び出す場合、
それらは同様に制御の下にあることを確認してマテリアルを別のものに設定できます。
GL 描画コマンドは直ちに実行されます。つまり、Update() でそれらを呼び出すと、
カメラが表示される前にそれらが実行されます ( GL 描画は非表示にし、カメラは画面をほとんどクリア
したようになります)。
GL drawing を呼ぶための場所は、ほとんどの場合、カメラにアタッチされているスクリプトから OnPostRender() の中か、
イメージエフェクト関数 ( OnRenderImage ) の内部です。
using UnityEngine;
public class ExampleClass : MonoBehaviour { // When added to an object, draws colored rays from the // transform position. public int lineCount = 100; public float radius = 3.0f;
static Material lineMaterial; static void CreateLineMaterial () { if (!lineMaterial) { // Unity has a built-in shader that is useful for drawing // simple colored things. Shader shader = Shader.Find ("Hidden/Internal-Colored"); lineMaterial = new Material (shader); lineMaterial.hideFlags = HideFlags.HideAndDontSave; // Turn on alpha blending lineMaterial.SetInt ("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha); lineMaterial.SetInt ("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); // Turn backface culling off lineMaterial.SetInt ("_Cull", (int)UnityEngine.Rendering.CullMode.Off); // Turn off depth writes lineMaterial.SetInt ("_ZWrite", 0); } }
// Will be called after all regular rendering is done public void OnRenderObject () { CreateLineMaterial (); // Apply the line material lineMaterial.SetPass (0);
GL.PushMatrix (); // Set transformation matrix for drawing to // match our transform GL.MultMatrix (transform.localToWorldMatrix);
// Draw lines GL.Begin (GL.LINES); for (int i = 0; i < lineCount; ++i) { float a = i / (float)lineCount; float angle = a * Mathf.PI * 2; // Vertex colors change from red to green GL.Color (new Color (a, 1-a, 0, 0.8F)); // One vertex at transform position GL.Vertex3 (0, 0, 0); // Another vertex at edge of circle GL.Vertex3 (Mathf.Cos (angle) * radius, Mathf.Sin (angle) * radius, 0); } GL.End (); GL.PopMatrix (); } }
注: このクラスはラインやトライアングルの組を描画する必要があるときにはほぼ常に使用し、メッシュには使わないでください。 予想外の動作をさけるため、基本的な使用方法は:
using UnityEngine; using System.Collections;
public class ExampleClass : MonoBehaviour { void OnPostRender() { // Set your materials GL.PushMatrix(); // yourMaterial.SetPass( ); // Draw your stuff GL.PopMatrix(); } }
"// 何かを描画" において SetPass() を事前に宣言したマテリアルで使用し、描画のために使用すべきです。 SetPass を呼び出ししない場合、マテリアルはランダムに選ばれる(過去に使用されたたものの中から)ため必ず呼び出すべきです。
invertCulling | バックフェースかリングを反転させるかどうかを選択する |
LINES | 線(Line)描画の Begin モード |
modelview | 現在の ModelView 行列 |
QUADS | 四角形(Quad)描画の Begin モード |
sRGBWrite | レンダリング中に Linear から sRGB に色変換を実行するかどうか制御します。 |
TRIANGLE_STRIP | トライアングルストリップ描画の Begin モード |
TRIANGLES | トライアングル描画の Begin モード |
wireframe | ワイヤフレームでレンダリングすべきか。 |
Begin | 3D プリミティブの描画を開始します |
Clear | 現在のレンダリングバッファをクリアします |
ClearWithSkybox | カメラのスカイボックスで現在のレンダーバッファをクリアします |
Color | 現在の頂点カラーを設定します |
End | 3D プリミティブの描画を終了します |
GetGPUProjectionMatrix | カメラの射影行列から、GPU の射影行列を計算します |
InvalidateState | 内部的にキャッシュされたレンダーステートを無効にします。 |
LoadIdentity | 現在の ModelView 行列に単位行列を読み込みます。 |
LoadOrtho | オルソパースペクティブ変換を設定するヘルパー関数 |
LoadPixelMatrix | ピクセル修正レンダリングのための行列を設定します。 |
LoadProjectionMatrix | 任意の行列を現在の射影行列を読み込みます。 |
MultiTexCoord | 実際のテクスチャ unit に現在のテクスチャ座標 (v.x,v.y,v.z) を設定します。 |
MultiTexCoord2 | 実際のテクスチャ unit に現在のテクスチャ座標 (x, y) を設定します。 |
MultiTexCoord3 | 実際のテクスチャ unit に現在のテクスチャ座標 (x, y, z) を設定します。 |
MultMatrix | 指定されたひとつの現在の ModelView 行列を乗算します。 |
PopMatrix | 行列をスタックして上から ModelView 行列と射影行列の両方を復元します。 |
PushMatrix | ModelView 行列と射影行列を行列スタックに保存します。 |
RenderTargetBarrier | サンプリングから後に続く操作のために Render Target を解決します。 |
TexCoord | すべてのテクスチャユニットの現在のテクスチャ座標 (v.x,v.y,v.z) を設定します。 |
TexCoord2 | すべてのテクスチャユニットの現在のテクスチャ座標 (x, y) を設定します。 |
TexCoord3 | すべてのテクスチャユニットの現在のテクスチャ座標 (x, y, z) を設定します。 |
Vertex | 頂点を送信します。 |
Vertex3 | 頂点を送信します。 |
Viewport | レンダリングビューポートを設定します。 |