Version: 2017.4


class in UnityEngine




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 を呼び出ししない場合、マテリアルはランダムに選ばれる(過去に使用されたたものの中から)ため必ず呼び出すべきです。

Static 変数

LINE_STRIPMode for Begin: draw line strip.
LINES線(Line)描画の Begin モード
modelview現在の ModelView 行列
QUADS四角形(Quad)描画の Begin モード
sRGBWriteレンダリング中に Linear から sRGB に色変換を実行するかどうか制御します。
TRIANGLE_STRIPトライアングルストリップ描画の Begin モード
TRIANGLESトライアングル描画の Begin モード

Static 関数

Begin3D プリミティブの描画を開始します
End3D プリミティブの描画を終了します
Flushドライバのコマンドバッファのキューにたまったコマンドを GPU に送ります。
GetGPUProjectionMatrixカメラの射影行列から、GPU の射影行列を計算します
LoadIdentity現在の ModelView 行列に単位行列を読み込みます。
MultiTexCoord実際のテクスチャ unit に現在のテクスチャ座標 (v.x,v.y,v.z) を設定します。
MultiTexCoord2実際のテクスチャ unit に現在のテクスチャ座標 (x, y) を設定します。
MultiTexCoord3実際のテクスチャ unit に現在のテクスチャ座標 (x, y, z) を設定します。
MultMatrix指定されたひとつの現在の ModelView 行列を乗算します。
PopMatrix行列をスタックして上から ModelView 行列と射影行列の両方を復元します。
PushMatrixModelView 行列と射影行列を行列スタックに保存します。
RenderTargetBarrierサンプリングから後に続く操作のために Render Target を解決します。
TexCoordすべてのテクスチャユニットの現在のテクスチャ座標 (v.x,v.y,v.z) を設定します。
TexCoord2すべてのテクスチャユニットの現在のテクスチャ座標 (x, y) を設定します。
TexCoord3すべてのテクスチャユニットの現在のテクスチャ座標 (x, y, z) を設定します。