GL
класс в UnityEngine
Выполнено в:UnityEngine.CoreModule
Описание
Низкоуровневая графическая библиотека.
С помощью этого класса работают с активными матрицами преобразования, отдают команды рендеринга в духе непосредственного режима OpenGL и решают другие низкоуровневые графические задачи. Учтите, что почти во всех случаях использование Graphics.RenderMesh или CommandBuffer
является более эффективным, чем использование чертежа в режиме немедленного.
GL Функции мгновенного рисования используют любой "текущий материал", настроенный в данный момент (см. Material.SetPass). Материал контролирует, как выполняется рендеринг (смешивание, текстуры и т.д.), так что если вы явно не установите его на что-то перед использованием функций рисования GL, материал может быть любым. Кроме того, если вы вызываете любые другие команды рисования из кода рисования GL, они могут установить материал на что-то другое, так что убедитесь, что это также под контролем.
Команды рисования GL выполняются немедленно. Это означает, что если вы вызываете их в Update(), они будут выполнены до того, как камера будет рендирована (и камера, скорее всего, очистит экран, сделав рисунок GL невидимым).
Обычное место для вызова рисунка GL чаще всего в Camera.OnPostRender() из скрипта, прикрепленного к камере, или внутри функции эффекта изображения (Camera.OnRenderImage).
Примечание: High Definition Render Pipeline (HDRP) и Universal Render Pipeline (URP) не поддерживают Camera.OnPostRender. Вместо этого использовать RenderPipelineManager.endCameraRendering или RenderPipelineManager.endFrameRendering.
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(); } }
В месте, отмеченном комментарием "// Draw your stuff", следует вызвать SetPass() для одного из ранее объявленных материалов, который будет использован для отрисовки. Если не вызвать SetPass, фактически будет выбран случайный материал (тот, который использовался до этого), что нежелательно. Поэтому обязательно вызовите SetPass.
Статические свойства
| Свойство | Описание |
|---|---|
| invertCulling | Выберите, следует ли инвертировать вычеркивание обратной стороны (true) или нет (false). |
| LINE_STRIP | Режим для начала: нарисовать полосу линии. |
| LINES | Режим для начинать: рисовать линии. |
| modelview | Получает или устанавливает матрицу modelview. |
| QUADS | Режим для начинающих: рисовать четырёхугольники. |
| sRGBWrite | Контролирует, линейный-к-sRGB преобразование цвета выполняется во время рендеринга. |
| TRIANGLE_STRIP | Режим для начала: нарисовать треугольник полосы. |
| TRIANGLES | Режим для Начало: рисовать треугольники. |
| wireframe | Должно ли рендеринг выполняться в wireframe? |
Статические методы
| Метод | Описание |
|---|---|
| Begin | Начните рисовать примитивы 3D. |
| Clear | Очистить текущий буфер отображения. |
| ClearWithSkybox | Очистить текущий буфер рендеринга с помощью skybox камеры. |
| Color | Задает цвет текущей вершины. |
| End | Конец рисования 3D примитивов. |
| Flush | Отправляет команды из буфера команд драйвера в GPU. |
| GetGPUProjectionMatrix | Рассчитать матрицу проекции GPU из матрицы проекции камеры. |
| InvalidateState | Сбросить внутренне кэшированное состояние отображения. |
| IssuePluginEvent | Отправка события, определенного пользователем, в плагин нативного кода. |
| LoadIdentity | Загрузить идентификатор в текущую модель и просмотреть матрицы. |
| LoadOrtho | Помощная функция для создания ортографической проекции. |
| LoadPixelMatrix | Настройка матрицы для пиксельно-корректного рендеринга. |
| LoadProjectionMatrix | Загрузить произвольную матрицу в текущую матрицу проекции. |
| MultiTexCoord | Устанавливает текущую координату текстуры (v.x,v.y,v.z) на фактическую единицу текстуры. |
| MultiTexCoord2 | Устанавливает текущую координату текстуры (x,y) для фактической единицы текстуры. |
| MultiTexCoord3 | Устанавливает текущую координату текстуры (x,y,z) в фактическую единицу текстуры. |
| MultMatrix | Задает текущую матрицу модели в указанном виде. |
| PopMatrix | Восстанавливает матрицы модели, представления и проекции из верхней части стека матриц. |
| PushMatrix | Сохраняет матрицы модели, представления и проекции в верхней части стека матриц. |
| RenderTargetBarrier | Разрешает цель отображения для последующих операций выборки из нее. |
| TexCoord | Устанавливает текущую координату текстуры (v.x,v.y,v.z) для всех единиц текстуры. |
| TexCoord2 | Устанавливает текущую координату текстуры (x,y) для всех единиц текстуры. |
| TexCoord3 | Устанавливает текущую координату текстуры (x,y,z) для всех единиц текстуры. |
| Vertex | Представьте вершину. |
| Vertex3 | Представьте вершину. |
| Viewport | Устанавливает окно отображения. |