Класс pc.GraphicsDevice

pc.GraphicsDevice является основным классом для работы с графической системой в PlayCanvas. Этот класс предоставляет низкоуровневые средства взаимодействия с графическим оборудованием, обеспечивая рендеринг, управление шейдерами, буферами и текстурами. Через объект pc.GraphicsDevice происходит доступ к множеству функций, связанных с графическим контекстом, и его настройка позволяет более гибко управлять производительностью и качеством визуализации в PlayCanvas.

Инициализация pc.GraphicsDevice

Объект pc.GraphicsDevice создаётся автоматически при инициализации приложения PlayCanvas. Он является частью объекта pc.Application, который управляет всей игровой или визуальной сценой. GraphicsDevice может быть получен через свойство graphicsDevice объекта pc.Application.

var graphicsDevice = app.graphicsDevice;

С помощью этого объекта можно настроить различные параметры графической системы, такие как разрешение экрана, режимы антиалиасинга, поддержка WebGL, а также получать доступ к важным меткам для работы с графическими ресурсами.

Основные методы и свойства

width и height

Свойства width и height объекта pc.GraphicsDevice возвращают текущие размеры области рендеринга в пикселях. Эти значения могут быть полезны при настройке размеров текстур и объектов, которые должны быть отрисованы на экране.

var width = graphicsDevice.width;
var height = graphicsDevice.height;

pixelRatio

Свойство pixelRatio предоставляет коэффициент масштабирования для устройства. Это важно для ретинизированных дисплеев, где плотность пикселей значительно выше, чем у стандартных экранов.

var pixelRatio = graphicsDevice.pixelRatio;

maxPixelRatio

Свойство maxPixelRatio указывает максимальный коэффициент пиксельного масштаба, поддерживаемый устройством. Это может быть полезно для ограничения производительности при работе с высокоразрешёнными дисплеями.

var maxPixelRatio = graphicsDevice.maxPixelRatio;

getRenderTarget()

Метод getRenderTarget используется для получения объекта pc.RenderTarget, который представляет собой буфер кадра для рендеринга. Этот метод полезен при создании эффектов постобработки или при рендеринге в отдельные текстуры.

var renderTarget = graphicsDevice.getRenderTarget();

createShader()

Метод createShader позволяет создать шейдер на основе переданных исходных кодов для вершинного и фрагментного шейдера. Важной особенностью является поддержка шейдеров в формате GLSL ES.

var shader = graphicsDevice.createShader(vertexShaderSource, fragmentShaderSource);

setClearColor()

Метод setClearColor используется для установки цвета, которым будет очищен экран при каждом новом кадре. Это может быть полезно для создания различных визуальных эффектов или просто для настройки фона сцены.

graphicsDevice.setClearColor(0.0, 0.0, 0.0, 1.0); // Черный цвет с полной непрозрачностью

Режимы рендеринга

draw()

Метод draw() является основным для отрисовки объектов на экране. Он принимает в качестве аргументов различные параметры, такие как геометрия, шейдеры, материалы и другие ресурсы, которые необходимы для выполнения рендеринга.

graphicsDevice.draw(mesh, material);

clear()

Метод clear() используется для очистки экрана перед рендерингом нового кадра. Он позволяет задать, какие части экрана должны быть очищены (цветовой буфер, глубинный буфер и т.д.).

graphicsDevice.clear();

setDepthTest()

Метод setDepthTest() позволяет задать режим проверки глубины, который используется при рендеринге. Это важно для правильной отрисовки объектов в 3D-пространстве, чтобы те, которые ближе к камере, перекрывали объекты, находящиеся дальше.

graphicsDevice.setDepthTest(true);  // Включение проверки глубины

Буферы и текстуры

createTexture()

Метод createTexture() используется для создания текстурных объектов, которые могут быть использованы в рендеринге. Он позволяет настроить текстуру, указав её размер, формат и другие параметры.

var texture = graphicsDevice.createTexture({
    width: 512,
    height: 512,
    format: pc.PIXELFORMAT_R8_G8_B8_A8
});

createBuffer()

Метод createBuffer() используется для создания различных типов буферов: вершинных, индексных и других. Буферы являются основными средствами хранения данных, которые передаются в шейдеры для отрисовки.

var vertexBuffer = graphicsDevice.createBuffer(pc.BUFFER_STATIC, vertices);

Управление шейдерами и материалами

createProgram()

Метод createProgram() используется для создания шейдерной программы, которая связывает вершинный и фрагментный шейдеры. Он компилирует и связывает шейдеры в единый объект, который можно использовать для рендеринга.

var program = graphicsDevice.createProgram(vertexShaderSource, fragmentShaderSource);

createMaterial()

Метод createMaterial() позволяет создать материал, который содержит информацию о том, как объекты будут выглядеть при рендеринге. Он использует шейдеры и текстуры для наложения визуальных эффектов на геометрию.

var material = new pc.StandardMaterial();
material.diffuse = new pc.Color(1, 0, 0);  // Красный цвет
material.update();

Взаимодействие с WebGL

pc.GraphicsDevice работает поверх WebGL, и все операции рендеринга в PlayCanvas осуществляются через WebGL API. PlayCanvas скрывает низкоуровневые детали работы с WebGL, но предоставляет разработчику полный контроль над рендерингом через классы и методы, такие как pc.GraphicsDevice. Все функции, связанные с работой с буферами, текстурами и шейдерами, фактически используют WebGL команды.

Настройки и производительность

С помощью pc.GraphicsDevice можно управлять различными аспектами производительности рендеринга. Например, через метод setViewport можно изменять область рендеринга, а параметры, такие как антиалиасинг, могут быть настроены при инициализации графического устройства.

setViewport()

Метод setViewport() используется для установки области, в которой будет происходить рендеринг. Это может быть полезно при работе с разделёнными экранами или различными областями рендеринга.

graphicsDevice.setViewport(0, 0, 1920, 1080);

setScissor()

Метод setScissor() позволяет установить область для обрезки, что может быть полезно для улучшения производительности в сложных сценах, где требуется ограничить рендеринг только для части экрана.

graphicsDevice.setScissor(100, 100, 800, 600);

Вывод

pc.GraphicsDevice является важнейшим компонентом PlayCanvas, предоставляющим интерфейс для работы с графическим оборудованием. Этот класс управляет рендерингом, буферами, текстурами и шейдерами, предоставляя разработчику высокоуровневые абстракции для создания графически сложных приложений. Управление производительностью, настройка графических параметров и доступ к ресурсам WebGL делают pc.GraphicsDevice незаменимым инструментом для разработчиков игр и визуализаций на платформе PlayCanvas.