低レベルのグラフィックスライブラリです。
Use this class to manipulate active transformation matrices,
issue rendering commands similar to OpenGL's immediate mode and do other low-level
graphics tasks. Note that in almost all cases using Graphics.DrawMesh or CommandBuffer
is more efficient than using immediate mode drawing.
GL immediate drawing functions use whatever is the "current material" set up right now (see Material.SetPass).
The material controls how the rendering is done (blending, textures, etc.), so unless you explicitly
set it to something before using GL draw functions, the material can happen to be anything.
Also, if you call any other drawing commands from inside GL drawing code, they can set
material to something else, so make sure it's under control as well.
GL drawing commands execute immediately. That means if you call them in Update(), they will be executed
before the camera is rendered (and the camera will most likely clear the screen, making the GL drawing
not visible).
The usual place to call GL drawing is most often in OnPostRender() from a script attached to a
camera, or inside an image effect function (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 | バックフェースかリングを反転させるかどうかを選択する |
LINE_STRIP | Mode for Begin: draw line strip. |
LINES | 線(Line)描画の Begin モード |
modelview | 現在の ModelView 行列 |
QUADS | 四角形(Quad)描画の Begin モード |
sRGBWrite | レンダリング中に Linear から sRGB に色変換を実行するかどうか制御します。 |
TRIANGLE_STRIP | トライアングルストリップ描画の Begin モード |
TRIANGLES | トライアングル描画の Begin モード |
wireframe | ワイヤフレームでレンダリングすべきか。 |
Begin | 3D プリミティブの描画を開始します |
Clear | 現在のレンダリングバッファをクリアします |
ClearWithSkybox | カメラのスカイボックスで現在のレンダーバッファをクリアします |
Color | 現在の頂点カラーを設定します |
End | 3D プリミティブの描画を終了します |
Flush | ドライバのコマンドバッファのキューにたまったコマンドを GPU に送ります。 |
GetGPUProjectionMatrix | カメラの射影行列から、GPU の射影行列を計算します |
InvalidateState | 内部的にキャッシュされたレンダーステートを無効にします。 |
IssuePluginEvent | ネイティブコードプラグインにユーザーが定義したイベントを送信します |
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 | レンダリングビューポートを設定します。 |