OpenGL Lib Перемещение по сцене

  !   Данная информация предназначена только только для IT-специалистов по системной интеграции модулей БИОСОФТ-М. (см. Руководства пользователя к программным продуктам)
Перемещение по сцене

OpenGL Lib реализует 3 вида перемещения по сцене:

  • Перемещение в плоскости перпендикулярной направлению камеры, проходщей через точку в которую направлена камера (Pan)
  • Приближение/отдаление камеры к/от точки, в которую она направлена (Zoom)
  • Вращение камеры вокруг точки, в которую она направлена (Orbit)

Объект управления перемещением доступен через COpenGlIfaceGp:

class COpenGlIfaceGp : public object
{
public:
 
    // scene manipulation
    ref<COpenGlTravelIfaceGp> x_rOpenGlTravel,
            abstract;
    ref<COpenGlTravelIfaceGp> x_rOpenGlTravel_Get()
            new virtual auto;
};

Для управления перемещением OpenGL Lib использует специальное UI, которое должно быть наложено поверх окна в которое выводится результат визуализации OpenGL:

class COpenGlTravelIfaceGp : public object
{
public:
 
    // OpenGL overlay panel for manipulating scene with mouse
    ref<UiContainer> NewUiOpenGlTravelOverlay()
            new virtual auto;
};

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

class COpenGlTravelIfaceGp : public object
{
public:
 
// Attributes
 
    num x_numPanScale = 1.0,
            auto(Get, Set),
            assert(value > 0);
 
    num x_numZoomScale = 1.0,
            auto(Get, Set),
            assert(value > 0);
 
    num x_numOrbitScale = 1.0,
            auto(Get, Set),
            assert(value > 0);
 
// Operations
 
    // pan mode on/off
    void EnablePanMode(
            bool bEnable)
            new virtual auto;
 
    // zoom mode on/off
    void EnableZoomMode(
            bool bEnable)
            new virtual auto;
 
    // rotation mode on/off
    void EnableRotationMode(
            bool bEnable)
            new virtual auto;