Визуализация и анимация / 3D-визуализация |
Описание демо-примера
C:\SimInTech64\Demo\Визуализация и анимация\3D-визуализация\Базовые приемы
Примеры демонстрируют работу со скриптовыми функции языка программирования, позволяющими производить различные операции с модулем 3D-визуализации.
В таблице приведено описание примеров, применяемые в примере функции и их назначение.
Выполнение каждого демо примера начинается с создания окна 3D визуализации (Id = Viewer3DCreate или Id = Viewer3DCreateWindow). Функции выполняют создание окна 3D-визуализации. Функции используются в секции инициализации. Id - идентификатор созданного окна визуализации.
Название демо | Описание демо | Применяемые функции | Описание функций |
---|---|---|---|
Видимость 3D-объекта | Пример демонстрирует работу флага видимости 3D-объекта. См. скрипт проекта. | ObjId = Viewer3DPlotSphere(Id, R, X, Y, Z) | Viewer3DPlotSphere(Id, R, X, Y, Z) – функция выполняет создание сферы с радиусом R в точке (X,Y,Z) окна с идентификатором Id. |
Viewer3DSetVisibility(Id, ObjId, vis) | Viewer3DSetVisibility(Id, ObjId, vis) - функция управляет видимостью 3D-объекта ObjID в окне Id согласно заданному аргументу vis. (vis=0 - объект не виден, vis=1 - объект виден). | ||
Видимость горизонтальной координатной сетки | Пример демонстрирует работу флага видимости горизонтальной координатной сетки. | Viewer3DSetGridVisibility(Id, flag); | Viewer3DSetGridVisibility(Id, flag) - функция задания видимости сетки на плоскости Y=0. Flag - флаг видимости сетки (flag=true - сетка видна, flag=false - сетка не видна). |
Видимость нодализационной сетки | Пример демонстрирует работу флага видимости нодализационной сетки для 3D-объектов. | ObjId = Viewer3DPlotSphere(Id, R, X, Y, Z) | Viewer3DPlotSphere(Id, R, X, Y, Z) – функция выполняет создание сферы с радиусом R в точке (X,Y,Z) окна с идентификатором Id. |
Viewer3DSetNodeGridVisibility (Id, flag); | Viewer3DSetNodeGridVisibility (Id, flag) - функция задания видимости нодализационной сетки 3D-примитивов. Flag - флаг видимости сетки (flag=true - сетка видна, flag=false - сетка не видна). | ||
Видимость осей ГСК | Пример демонстрирует работу флага видимости осей ГСК. | Viewer3DSetAxesVisibility(Id, flag); | Viewer3DSetAxesVisibility(Id, flag) - функция задания видимости осей ГСК. Flag - флаг видимости осей (flag=true - оси видны, flag=false - оси не видны). |
Видимость осей ЛСК 3D объекта | Пример демонстрирует работу флага видимости осей ЛСК, связанной с 3D-объектом. | Viewer3DShowObjAxes(Id, ObjId, flag); | Viewer3DShowObjAxes(Id, ObjId, flag) - функция задания видимости осей локальной системы координат 3D-примитива ObjId в окне Id. Flag - флаг видимости осей (flag=true - оси видны, flag=false - оси не видны). |
Вращение 3D объекта в ЛСК относительно заданной оси | Пример демонстрирует вращение 3D объекта в связанной с ним ЛСК вокруг оси (1, 0, 1) со скоростью 90 градусов/с. | ObjID = Viewer3DPlotCone(Id, RDO, RDI, RUO, RUI, h, X, Y, Z); | Viewer3DPlotCone(view3d, RDO, RDI, RUO, RUI, h, X, Y, Z) - функция выполняет создаение конуса с внешним радиусов нижнего основания RDO, с внутренним радиусов нижнего основания RDI, внешним радиусом верхнего основания RUO, внутренним радиусом верхнего основания RUI, с высотой h в точке (X, Y, Z) окна с идентификатором Id. |
Viewer3DRotate(Id, ObjId, Xr, Yr, Zr, Angle); | Viewer3DRotate(Id, ObjId, Xr, Yr, Zr, Angle) - функция выполняет вращение примитива вокруг заданной оси (Xr, Yr, Zr) на заданный угол Angle. | ||
Вывод текстовой информации на окно 3D визуализации | Пример демонстрирует возможность вывода произвольной текстовой информации на окно 3D-визуализации. Размеры задаются в количестве пикселей. | ObjID = Viewer3DPlotTextLabel(Id, text, X, Y, Z, h, col); | Viewer3DPlotTextLabel(Id, text, X, Y, Z, h, col) - функция создания текстового лейбла на окне. text - текст для отображения, задается в кавычках либо в виде переменной типа string; (X, Y, Z) - координаты текстовой подписи в пространстве окна; h - высота текста; col - цвет текста. |
Viewer3DSetTextLabel(Id, ObjId, text) | Viewer3DSetTextLabel(Id, ObjId, text) - функция установки текста для текстового лейбла. text - текст для отображения, задается в кавычках либо в виде переменной типа string. | ||
Задание вектров Up и Direction 3D-объекта | На этапе инициализации выполняется поворот 3D-объекта, за счет задания векторов Up (направление собственной координатной оси Y 3D-объекта в его ЛСК) и Direction (направление собственной координатной оси Z 3D-объекта в его ЛСК). | ObjId = Viewer3DPlotParallelepiped(Id, width, length, height, X, Y, Z); | Viewer3DPlotParallelepiped(Id, width, length, height, X, Y, Z) - функция создания параллелеипеда с шириной width, длиной length и высотой heigth в точке с координатами (X, Y, Z) окна с идентификатором Id. |
Viewer3DSetUp(Id, ObjId, X, Y, Z); | Viewer3DSetUp(Id, ObjId, X, Y, Z) - функция установки координатной оси Y объекта в ЛСК в направлении вектора, заданного координатами (X, Y, Z). | ||
Viewer3DSetDirection(Id, ObjId, X, Y, Z); | Viewer3DSetDirection(Id, ObjId, X, Y, Z) - функция установки координатной оси Z объекта в ЛСК в направлении вектора, заданного координатами (X, Y, Z). | ||
Задание имени 3D-объекта | На этапе инициализации выполняется задание имени для созданного 3D-объекта. Имена отображаются в дереве объектов. | ObjID = Viewer3DPlotCone(Id, RDO, RDI, RUO, RUI, h, X, Y, Z); | Viewer3DPlotCone(view3d, RDO, RDI, RUO, RUI, h, X, Y, Z) - функция выполняет создаение конуса с внешним радиусов нижнего основания RDO, с внутренним радиусов нижнего основания RDI, внешним радиусом верхнего основания RUO, внутренним радиусом верхнего основания RUI, с высотой h в точке (X, Y, Z) окна с идентификатором Id. |
Viewer3DSetObjName(Id, ObjId, "name"); | Viewer3DSetObjName(Id, ObjId, "name") - функция задает новое имя name 3D объекта. | ||
Задание координат 3D-объекта в ЛСК | На этапе инициализации задется смещение 3D-объекта относительно ЛСК, связанной с ним. | ObjID = Viewer3DPlotCone(Id, RDO, RDI, RUO, RUI, h, X, Y, Z); | Viewer3DPlotCone(view3d, RDO, RDI, RUO, RUI, h, X, Y, Z) - функция выполняет создаение конуса с внешним радиусов нижнего основания RDO, с внутренним радиусов нижнего основания RDI, внешним радиусом верхнего основания RUO, внутренним радиусом верхнего основания RUI, с высотой h в точке (X, Y, Z) окна с идентификатором Id. |
Viewer3DSetLocalDispl(Id, ObjId, Xloc, Yloc, Zloc); | Viewer3DSetLocalDispl(Id, ObjId, Xloc, Yloc, Zloc) - функция смещает 3D объект относительно его ЛСК в точку (Xloc, Yloc, Zloc). | ||
Задание координат камеры | Пример демонстрирует изменение координат базовой точки камеры в динамике по закону: [0, sin(time), 0], где time - текущее модельное время. | ObjId = Viewer3DPlotSphere(Id, R, X, Y, Z) | Viewer3DPlotSphere(Id, R, X, Y, Z) – функция выполняет создание сферы с радиусом R в точке (X,Y,Z) окна с идентификатором Id. |
Viewer3DSetCameraPosition(Id, X, Y, Z); | Viewer3DSetCameraPosition(Id, X, Y, Z) - функция устанавливает координаты базовой точки камеры. | ||
Задание координат ЛСК 3D-объекта в динамике | В процессе расчета координаты ЛСК, связанной с созданным 3D-объектом, и, следовательно, положение самого 3D-объекта относительно ГСК меняются по закону: [0, sin(time), 0], где time - текущее модельное время. | ObjId = Viewer3DPlotSphere(Id, R, X, Y, Z) | Viewer3DPlotSphere(Id, R, X, Y, Z) – функция выполняет создание сферы с радиусом R в точке (X,Y,Z) окна с идентификатором Id. |
Viewer3DSetPosition(Id, ObjId, X, Y, Z); | Viewer3DSetPosition(Id, ObjId, X, Y, Z) - функция выполняет задание новых координат ЛСК для объекта относительно ГСК. | ||
Задание углов Эйлера ЛСК 3D-объекта в динамике | В процессе расчета углы Эйлера ЛСК, связанной с созданным 3D-объектом, и, следовательно, углы Эйлера самого 3D-объекта меняются по закону: [90*sin(time), 90*sin(time), 0], где time - текущее модельное время. | ObjID = Viewer3DPlotCone(Id, RDO, RDI, RUO, RUI, h, X, Y, Z); | Viewer3DPlotCone(view3d, RDO, RDI, RUO, RUI, h, X, Y, Z) - функция выполняет создаение конуса с внешним радиусов нижнего основания RDO, с внутренним радиусов нижнего основания RDI, внешним радиусом верхнего основания RUO, внутренним радиусом верхнего основания RUI, с высотой h в точке (X, Y, Z) окна с идентификатором Id. |
Viewer3DSetEulerAngles (Id, OId, alfa, beta, gamma); | Viewer3DSetEulerAngles (Id, OId, alfa, beta, gamma) - функция выполняет задание углов Эйлера (угол прецессии, угол нутации и угол собственного вращения) связанной с объектом ЛСК. ЛСК получает заданные уголы поворота, а вместе с ней поворачивается и сам объект. | ||
Задание цели камеры | Пример демонстрирует возможность задания 3D-объекта в качестве цели камеры. | ObjId = Viewer3DPlotSphere(Id, R, X, Y, Z) | Viewer3DPlotSphere(Id, R, X, Y, Z) – функция выполняет создание сферы с радиусом R в точке (X,Y,Z) окна с идентификатором Id. |
Viewer3DSetCameraTarget(Id, ObjId); | Viewer3DSetCameraTarget(Id, ObjId) - функция задания 3D-объекта в качестве цели камеры. | ||
Viewer3DSetPosition(Id, ObjId, X, Y, Z); | Viewer3DSetPosition(Id, ObjId, X, Y, Z) - функция выполняет задание новых координат ЛСК для объекта относительно ГСК. | ||
Массовое удаление 3D-объектов | На этапе инициализации выполняется рендеринг сфер радиусом 1 м в точке (0,0,0) для всех существующих окон 3D-визуализации. На этапе финализации все 3D-объекты, созданные из скрипта, уничтожаются. | ObjId = Viewer3DPlotSphere(Id, R, X, Y, Z) | Viewer3DPlotSphere(Id, R, X, Y, Z) – функция выполняет создание сферы с радиусом R в точке (X,Y,Z) окна с идентификатором Id. |
Viewer3DRemoveScriptObjects(Id) | Viewer3DRemoveScriptObjects(Id) - функция удаления всех созданных из скрипта 3D-объектов в окне. | ||
Масштабирование 3D-объекта | В процессе расчета выполняется масштабирование 3D-объекта относительно собственных координтаных осей по следующему закону: [50+40*sin(time), 50+40*sin(time), 50+40*sin(time)], где time - текущее модельное время. | ObjId = Viewer3DPlotSphere(Id, R, X, Y, Z) | Viewer3DPlotSphere(Id, R, X, Y, Z) – функция выполняет создание сферы с радиусом R в точке (X,Y,Z) окна с идентификатором Id. |
Viewer3DSetScale(Id, OId, Xscale, Yscale, Zscale); | Viewer3DSetScale(Id, OId, Xscale, Yscale, Zscale) - функция выполняет масштабирование 3D-объекта согласно заданному по осям масштабу в процентах. | ||
Поворот 3D-объекта в ЛСК относительно собственных осей | В процессе расчета 3D-объект поворачивается на 90 градусов вокруг осей X, Z и Y связанной с ним ЛСК по заданному в схемном окне проекта закону. | ObjID = Viewer3DPlotCone(Id, RDO, RDI, RUO, RUI, h, X, Y, Z); | Viewer3DPlotCone(view3d, RDO, RDI, RUO, RUI, h, X, Y, Z) - функция выполняет создаение конуса с внешним радиусов нижнего основания RDO, с внутренним радиусов нижнего основания RDI, внешним радиусом верхнего основания RUO, внутренним радиусом верхнего основания RUI, с высотой h в точке (X, Y, Z) окна с идентификатором Id. |
Viewer3DSetNodeGridVisibility (Id, flag); | Viewer3DSetNodeGridVisibility (Id, flag) - функция задания видимости нодализационной сетки 3D-примитивов. Flag - флаг видимости сетки (flag=true - сетка видна, flag=false - сетка не видна). | ||
Viewer3DSetPitch(Id, ObjId, Angle); | Viewer3DSetPitch(Id, ObjId, Angle) - функция выполняет поворот объекта в окне вокруг его оси X на заданный угол Angle. | ||
Viewer3DSetRoll (Id, ObjId, Angle); | Viewer3DSetRoll (Id, ObjId, Angle) - функция выполняет поворот объекта в окне вокруг его оси Z на заданный угол Angle. | ||
Viewer3DSetTurn (Id, ObjId, Angle); | Viewer3DSetTurn (Id, ObjId, Angle) - функция выполняет поворот объекта в окне вокруг его оси Y на заданный угол Angle. | ||
Получение Id окон 3D-визуализации | На этапе инициализации выполняется создание окон 3D-визуализации. Далее при помощи функции Viewer3DGetWindowList находится массив ID всех существующих окон 3D-визуализации. | Id = Viewer3DGetWindowList; | Viewer3DGetWindowList - функция позволяет получить Id всех существующих окон, функция возвращает массив идентификаторов всех окон. |
Рендеринг 3D-объекта из файла | На этапе инициализации выполняется рендеринг 3D-объекта из файла. При этом начало локальной системы координат, связанной с 3D-объектом, находится в точке (0,0,0). | ObjId = Viewer3DPlotFromFile(Id path, X, Y, Z, c); | Viewer3DPlotFromFile(Id path, X, Y, Z, c) - функция выполняет создание
3D-объекта в окне, расположенного по пути path, в точке (X, Y, Z). c -
целочисленный массив атрибутов для центрирования примитива (1 – центрирование по
оси X, 2 – центрирование по оси Y, 3 – центрирование по оси Z, 4 – центрирование
по барицентру, 0 – центрирование по умолчанию). Прим.: список поддерживаемых форматов 3D: *.glsm, *.obj, *.objf, *.stl, *.lwo, *.q3bsp, *.bsp, *.oct, *.ms3d, *.nmf, *.md3, *.3ds, *.prj, *.md2, *.smd, *.ply, *.gts, *.wrl, *.md5mesh, *.md5anim, *.tin, *.dxf, *.grd. |
Рендеринг параллелепипеда | На этапе инициализации выполняется рендеринг 3D-примитива параллелепипеда. При этом начало локальной системы координат, связанной с 3D-объектом, находится в точке (0,-1,-1). | ObjId = Viewer3DPlotParallelepiped(Id, width, length, height, X, Y, Z); | Viewer3DPlotParallelepiped(Id, width, length, height, X, Y, Z) - функция создания параллелеипеда с шириной width, длиной length и высотой heigth в точке с координатами (X, Y, Z) окна с идентификатором Id. |
Рендеринг сферы | На этапе инициализации выполняется рендеринг 3D-примитива сферы радиусом 1 м. При этом начало локальной системы координат, связанной с 3D-объектом, находится в точке (0,-1,-1). | ObjId = Viewer3DPlotSphere(Id, R, X, Y, Z) | Viewer3DPlotSphere(Id, R, X, Y, Z) – функция выполняет создание сферы с радиусом R в точке (X,Y,Z) окна с идентификатором Id. |
Рендеринг усеченного конуса | На этапе инициализации выполняется рендеринг 3D-примитива усеченного конуса. При этом начало локальной системы координат, связанной с 3D-объектом, находится в точке (0,-1,-1). | ObjID = Viewer3DPlotCone(Id, RDO, RDI, RUO, RUI, h, X, Y, Z); | Viewer3DPlotCone(view3d, RDO, RDI, RUO, RUI, h, X, Y, Z) - функция выполняет создаение конуса с внешним радиусов нижнего основания RDO, с внутренним радиусов нижнего основания RDI, внешним радиусом верхнего основания RUO, внутренним радиусом верхнего основания RUI, с высотой h в точке (X, Y, Z) окна с идентификатором Id. |
Создание окна без автоматического уничтожения | На этапе инициализации создается новое окно 3D-визуализации. | Id = Viewer3DCreateWindow; | Viewer3DCreateWindow - функция выполняет создание окна 3D-визуализации без привязки к скриптовой функции. Каждый раз при выполнении функции создается новое окно. |
Создание окна с автоматическим уничтожением | На этапе инициализации создается новое окно 3D-визуализации. При этом окно, созданное данной функцией ранее, автоматически уничтожается. | Id = Viewer3DCreate; | Viewer3DCreate - функция выполняет создание окна 3D-визуализации с привязкой к скриптовой функции. Окно 3D-визуализации получает привязку к конкретной скриптовой функции (строке кода), создавшей данное окно. Каждый раз при выполнении функции связанное с ней окно уничтожается и создается новое. |
Степень прозрачности 3D-объекта | Пример демонстрирует возможность задания степени прозрачности 3D-объекта. | ObjId = Viewer3DPlotSphere(Id, R, X, Y, Z) | Viewer3DPlotSphere(Id, R, X, Y, Z) – функция выполняет создание сферы с радиусом R в точке (X,Y,Z) окна с идентификатором Id. |
Viewer3DSetTransparency(Id, ObjId, tr); | Viewer3DSetTransparency(Id, ObjId, tr) - функция управляет степенью прозрачности 3D-объекта в окне согласно заданному значению tr. | ||
Текстура 3D-объекта | Пример демонстрирует возможность задания цвета 3D-объекта. | ObjId = Viewer3DPlotSphere(Id, R, X, Y, Z) | Viewer3DPlotSphere(Id, R, X, Y, Z) – функция выполняет создание сферы с радиусом R в точке (X,Y,Z) окна с идентификатором Id. |
Viewer3DSetTexture(Id, ObjId, FilePath); | Viewer3DSetTexture(Id, ObjId, FilePath) - функция наложения текстуры из файла, раположенного по пути FilePath на 3D-объект. | ||
Удаление 3D-объекта | На этапе инициализации выполняется рендеринг сфер радиусом 1 м в точке (0,0,0) для всех существующих окон 3D-визуализации. На этапе финализации 3D-объект, созданный из скрипта, уничтожается. | Viewer3DRemoveObject(Id, ObjId); | Viewer3DRemoveObject(Id, ObjId) - функция выполняет удаление объекта созданного из скрипта, с идентификатором ObjId. |
Уничтожение окна через скрипт | На этапе инициализации создается новое окно 3D-визуализации. На финализации оно уничтожается. | Viewer3DDestroyWindow(Id); | Viewer3DDestroyWindow(Id) - функция выполняет полное уничтожение окна 3D-визуализации. |
Установка положения окна | Пример демонстрирует возможность установки положения окна 3D-визуализации. Величины отступов задаются в количестве пикселей. | Viewer3DSetWindowPosition(Id, L, T); | Viewer3DSetWindowPosition(Id, L, T) - функция устанавливается положение окна относительно левой верхней точки экрана. L - отступ слева в пикселях, T - отступ сверху. |
Установка размеров окна | Пример демонстрирует возможность установки размеров окна 3D-визуализации. Размеры задаются в количестве пикселей. | Viewer3DSetWindowSize(Id, W, H); | Viewer3DSetWindowSize(Id, W, H) - функция выполняет установку размеров окна 3D-визуализации, где W - ширина окна, H - высота. |
Цвет 3D-объекта | Пример демонстрирует возможность задания цвета 3D-объекта. | ObjId = Viewer3DPlotSphere(Id, R, X, Y, Z) | Viewer3DPlotSphere(Id, R, X, Y, Z) – функция выполняет создание сферы с радиусом R в точке (X,Y,Z) окна с идентификатором Id. |
Viewer3DSetColor(Id, ObjId, Color); | Viewer3DSetColor(Id, ObjId, Color) - функция устанавливает цвет объекта. Значение агрумента Color может быть получено при помощи функции RBGToColor. | ||
Цвет фона | Пример демонстрирует возможность динамического задания цвета фона 3D-модели. | Viewer3DSetBackground(Id, Color); | Viewer3DSetBackground(Id, Color) - функция устанавливает цвет фона. Значение агрумента Color может быть получено при помощи функции RBGToColor. |