Низкоуровневая графическая библиотека.
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(); } }
Note: This class is almost always used when you need to draw a couple of lines or triangles, and don't want to deal with meshes. If you want to avoid surprises the usage pattern is this:
using UnityEngine; using System.Collections;
public class ExampleClass : MonoBehaviour { void OnPostRender() { // Set your materials GL.PushMatrix(); // yourMaterial.SetPass( ); // Draw your stuff GL.PopMatrix(); } }
Where at the "// Draw your stuff" you should do SetPass() on some material previously declared, which will be used for drawing. If you dont call SetPass, then you'll get basically a random material (whatever was used before) which is not good. So do it.
invertCulling | Инвертировать отсечение обратных сторон (true) или нет (false). |
LINE_STRIP | Mode for Begin: draw line strip. |
LINES | Режим для Begin: визуализация линий. |
modelview | Текущая modelview матрица. |
QUADS | Режим для Begin: визуализация четырехугольников. |
sRGBWrite | Controls whether Linear-to-sRGB color conversion is performed while rendering. |
TRIANGLE_STRIP | Режим для Begin: визуализация полосы треугольников. |
TRIANGLES | Режим для Begin: визуализация треугольников. |
wireframe | Следует ли производить визуализацию в режиме отображения сетки? |
Begin | Начать визуализацию 3D примитивов. |
Clear | Очистить текущий буфер визуализации. |
ClearWithSkybox | Очистить текущий буфер визуализации цветом skybox камеры. |
Color | Установить текущий цвет вершин. |
End | Закончить визуализацию 3D примитивов. |
Flush | Sends queued-up commands in the driver's command buffer to the GPU. |
GetGPUProjectionMatrix | Вычислить проекционную матрицу GPU на основе проекционной матрицы камеры. |
InvalidateState | Аннулировать закэшированные внутренние renderstate. |
IssuePluginEvent | Отправить пользовательское событие в нативный плагин. |
LoadIdentity | Загрузить единичную матрицу в текущую modelview матрицу. |
LoadOrtho | Вспомогательная функция для установки ортографической перспективной трансформации. |
LoadPixelMatrix | Установить матрицу для попиксельной визуализации. |
LoadProjectionMatrix | Загрузить произвольную матрицу в текущую матрицу проекции. |
MultiTexCoord | Устанавливает текстурные координаты (v.x,v.y,v.z) текстурному блоку unit. |
MultiTexCoord2 | Устанавливает текстурные координаты (x,y) текстурному блоку unit. |
MultiTexCoord3 | Устанавливает текстурные координаты (x,y,z) текстурному блоку unit. |
MultMatrix | Умножает текущую modelview матрицу на указанную. |
PopMatrix | Восстанавливает projection и modelview матрицы с вершины стека матриц. |
PushMatrix | Сохраняет projection и modelview матрицы в стек матриц. |
RenderTargetBarrier | Resolves the render target for subsequent operations sampling from it. |
TexCoord | Устанавливает текстурные координаты (v.x,v.y,v.z) всем текстурным блокам. |
TexCoord2 | Устанавливает текстурные координаты (x,y) для всех текстурных блоков. |
TexCoord3 | Устанавливает текстурные координаты (x,y,z) для всех текстурных блоков. |
Vertex | Отправить вершину. |
Vertex3 | Отправить вершину. |
Viewport | Задать окно визуализации. |