Version: 2019.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 モード
modelviewGets or sets the modelview matrix.
QUADS四角形(Quad)描画の Begin モード
sRGBWriteレンダリング中に Linear から sRGB に色変換を実行するかどうか制御します。
TRIANGLE_STRIPトライアングルストリップ描画の Begin モード
TRIANGLESトライアングル描画の Begin モード

Static 関数

Begin3D プリミティブの描画を開始します
End3D プリミティブの描画を終了します
Flushドライバのコマンドバッファのキューにたまったコマンドを GPU に送ります。
GetGPUProjectionMatrixカメラの射影行列から、GPU の射影行列を計算します
LoadIdentityLoad an identity into the current model and view matrices.
LoadOrthoHelper function to set up an orthograhic projection.
MultiTexCoord実際のテクスチャ unit に現在のテクスチャ座標 (v.x,v.y,v.z) を設定します。
MultiTexCoord2実際のテクスチャ unit に現在のテクスチャ座標 (x, y) を設定します。
MultiTexCoord3実際のテクスチャ unit に現在のテクスチャ座標 (x, y, z) を設定します。
MultMatrixSets the current model matrix to the one specified.
PopMatrixRestores the model, view and projection matrices off the top of the matrix stack.
PushMatrixSaves the model, view and projection matrices to the top of the matrix stack.
RenderTargetBarrierサンプリングから後に続く操作のために Render Target を解決します。
TexCoordすべてのテクスチャユニットの現在のテクスチャ座標 (v.x,v.y,v.z) を設定します。
TexCoord2すべてのテクスチャユニットの現在のテクスチャ座標 (x, y) を設定します。
TexCoord3すべてのテクスチャユニットの現在のテクスチャ座標 (x, y, z) を設定します。