Введение в OpenSceneGraph: Изменение глобальных настроек дисплея. Сглаживание
OSG позволяет разработчику управлять глобальными настройками отображения, на сонове которых работают камеры, вьюверы и рендерятся элементы сцены. Для этого импользуется паттерн синглтон, то есть юникальный объект, содержащий эти настройки, реализованный в виде класса osg::DisplaySettings. Следовательно, из нашего приложения, мы можем изменить эти настройки в любой момент
osg::DisplaySettings *ds = osg::DisplaySettings::instance();
Синглтон osg::DisplaySettings содержит настройки, применяемые к вновь создаваемым устройствам рендеринга, контексту OpenGL графического окна. Можно варьировать следующие параметры:
- setDoubleBuffer() - включение/выключение двойной буферизации. По-умолчанию включено.
- setDepthBuffer() - влючить/выключить буффер глубины. По-умолчанию включен.
- Установить разрядность альфа-буфера (alpha buffer), буфера трафарета (stencil buffer), накопительного буфера (accumulation buffer) птуем использования методов типа setMinimumNumAlphaBits(). По-умолчанию все параметры равны 0.
- Рзарешение использования сглаживание и его глубина, при помощи метода setNumMultiSamples(). По-умолчаниею - 0.
- Включение стерео-режима. Выключен по-умолчанию.
Рассмотрим использование данного синглтона на примере сглаживания
main.h
#ifndef MAIN_H
#define MAIN_H
#include <osgDB/ReadFile>
#include <osgViewer/Viewer>
#endif
main.cpp
#include "main.h"
int main(int argc, char *argv[])
{
(void) argc; (void) argv;
osg::DisplaySettings::instance()->setNumMultiSamples(6);
osg::ref_ptr<osg::Node> model = osgDB::readNodeFile("../data/cessna.osg");
osgViewer::Viewer viewer;
viewer.setSceneData(model.get());
return viewer.run();
}
Существенным здесб является лишь один вызов
osg::DisplaySettings::instance()->setNumMultiSamples(6);
- задание параметра сглаживания, который может принимать занчения 2, 4 и 6 в зависимости от используемого графического устройства. Обратим винмание, как выглядит лопасть винта цессны без применения сглаживания
и после его применения