Описание
Низкоуровневая графическая библиотека.
Используйте этот класс для управления активными матрицами преобразования, выполнения команд рендеринга, аналогичных непосредственному режиму OpenGL, и выполнения других низкоуровневых графических задач. Обратите внимание, что почти во всех случаях использование Graphics.DrawMesh или CommandBuffer более эффективен, чем использование немедленного режима рисования.
Функции немедленного рисования GL используют любой «текущий материал», настроенный прямо сейчас (см. Material.SetPass). Материал управляет тем, как выполняется рендеринг (смешивание, текстуры и т. д.), поэтому, если вы явно не установите что-то перед использованием функций рисования GL, материал может оказаться чем угодно. Кроме того, если вы вызываете какие-либо другие команды рисования из кода рисования GL, они могут установить материал на что-то другое, поэтому убедитесь, что он также находится под контролем.
Команды рисования GL выполняются немедленно. Это означает, что если вы вызовете их в Update(), они будут выполнены до того, как камера отобразится (и камера, скорее всего, очистит экран, сделав рисунок GL невидимым).
Обычно вызов GL-отрисовки чаще всего происходит в OnPostRender() из скрипта, прикрепленного к камере, или внутри функции эффекта изображения (OnRenderImage).
using UnityEngine;
public class ExampleClass : MonoBehaviour
{
// При добавлении к объекту рисует цветные лучи от
// трансформируем позицию.
public int lineCount = 100;
public float radius = 3.0f;
static Material lineMaterial;
static void CreateLineMaterial()
{
if (!lineMaterial)
{
// В Unity есть встроенный шейдер, полезный для рисования
// простые цветные вещи.
Shader shader = Shader.Find("Hidden/Internal-Colored");
lineMaterial = new Material(shader);
lineMaterial.hideFlags = HideFlags.HideAndDontSave;
// Включаем альфа-смешивание
lineMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
lineMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
// Отключаем отсечение обратной стороны
lineMaterial.SetInt("_Cull", (int)UnityEngine.Rendering.CullMode.Off);
// Отключить запись глубины
lineMaterial.SetInt("_ZWrite", 0);
}
}
// Будет вызываться после завершения обычного рендеринга
public void OnRenderObject()
{
CreateLineMaterial();
// Применяем материал линии
lineMaterial.SetPass(0);
GL.PushMatrix();
// Установить матрицу преобразования для рисования в
// соответствует нашему преобразованию
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));
// Одна вершина в позиции трансформации
GL.Vertex3(0, 0, 0);
// Другая вершина на краю круга
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()
{
// Установите ваши материалы
GL.PushMatrix();
// yourMaterial.SetPass( );
// Нарисуй свой материал
GL.PopMatrix();
}
}
Где в «// Нарисуй свой материал» вы должны сделать SetPass() на каком-то ранее объявленном материале, который будет использоваться для рисования. Если вы не вызовете SetPass, вы получите в основном случайный материал (независимо от того, что использовалось ранее), что не очень хорошо.
Статические Свойства
invertCulling | Указывает, следует ли инвертировать отбраковку обратной стороны (true) или нет (false). |
LINE_STRIP | Режим для начала: рисование линейной полосы. |
LINES | Режим начала: рисовать линии. |
modelview | Получает или задает матрицу представления модели. |
QUADS | Начальный режим: рисование четырехугольников. |
sRGBWrite | Определяет, выполняется ли преобразование линейного цвета в sRGB при рендеринге. |
TRIANGLE_STRIP | Режим начала: рисование треугольной полосы. |
TRIANGLES | Режим начала: рисование треугольников. |
wireframe | Должен ли рендеринг выполняться в каркасном виде? |
Статические Методы
Begin | Начинает рисовать 3D-примитивы. |
Clear | Очищает текущий буфер рендеринга. |
ClearWithSkybox | Очищает текущий буфер рендеринга с помощью скайбокса камеры. |
Color | Устанавливает текущий цвет вершины. |
End | Завершает рисование 3D-примитивов. |
Flush | Отправляет поставленные в очередь команды в буфере команд драйвера на GPU. |
GetGPUProjectionMatrix | Вычисляет матрицу проекции графического процессора на основе матрицы проекции камеры. |
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 | Устанавливает область просмотра рендеринга. |