Параметры командной строки передаются через аргументы функции main(). В прошлых примерах мы тщательно помечали эти параметры как неиспользуемые, теперь же воспользуемся ими, чтобы сообщить нашей программе некоторые данные при её запуске.

В OSG есть встроенные средства разбора командной строки.

Создадим следующий пример

main.h

#ifndef     MAIN_H
#define     MAIN_H

#include    <osgDB/ReadFile>
#include    <osgViewer/Viewer>

#endif // MAIN_H

main.cpp

#include    "main.h"

int main(int argc, char *argv[])
{
    osg::ArgumentParser args(&argc, argv);
    std::string filename;
    args.read("--model", filename);

    osg::ref_ptr<osg::Node> root = osgDB::readNodeFile(filename);
    osgViewer::Viewer viewer;
    viewer.setSceneData(root.get());

    return viewer.run();
}

Задаем параметры запуска программы в QtCreator

Запустив программу на выполнение получаем результат (моделька грузовика взята из того же OpenSceneGraph-Data)

Теперь разберем пример построчно

osg::ArgumentParser args(&argc, argv);

создает экземпляр класса парсера командной строки osg::ArgumentParser. При создании конструктору класса передаются аргументы, принимаемые функцией main() от операционной системы.

std::string filename;
args.read("--model", filename);

выполняем разбор аргументов, а именно ищем среди них ключ “–model”, помещая его значение в строку filename. Таким образом, посредством этого ключа мы передаем в программу имя файла с трехмерной моделью. Далее мы загружаем эту модель и отображаем её

osg::ref_ptr<osg::Node> root = osgDB::readNodeFile(filename);
osgViewer::Viewer viewer;
viewer.setSceneData(root.get());

return viewer.run();

Метод read() класса osg::ArgumentParser имеет массу перегрузок, позволяющих читать из командной строки не только строковые значения, но и целые числа, числа с плавающей запятой, векторы и т.д. Например, можно прочитать некий параметр типа float

float	size = 0.0f;
args.read("--size", size);

Если в командной строке не окажется данного параметра, то его значение останется таким, каким было после инициализации переменной size.