Scenegraph/ru: Difference between revisions

From FreeCAD Documentation
(Updating to match new version of source page)
(Updating to match new version of source page)
Line 11: Line 11:
==Введение==
==Введение==


<div class="mw-translate-fuzzy">
Геометрия которая появляется в [[3D view/ru|трёхмерных видах]] FreeCAD, получается с помощью библиотек [http://ru.wikipedia.org/wiki/Coin3D Coin3d]. Coin3D это реализация стандарта [http://ru.wikipedia.org/wiki/Open_Inventor OpenInventor]. [http://ru.wikipedia.org/wiki/Open_Cascade_Technology OpenCASCADE] тоже поддерживает схожую функциональность, но при создании FreeCAD было решено не использовать встроенный в OpenCASCADE просмотрщик и скорее перейти на более производительный Coin3D. Для изучения этой библиотеки рекомендуется книга [http://www-evasion.imag.fr/Membres/Francois.Faure/doc/inventorMentor/sgi_html/ Open Inventor Mentor].
Геометрия которая появляется в [[3D view/ru|трёхмерных видах]] FreeCAD, получается с помощью библиотек [http://ru.wikipedia.org/wiki/Coin3D Coin3d]. Coin3D это реализация стандарта [http://ru.wikipedia.org/wiki/Open_Inventor OpenInventor]. [http://ru.wikipedia.org/wiki/Open_Cascade_Technology OpenCASCADE] тоже поддерживает схожую функциональность, но при создании FreeCAD было решено не использовать встроенный в OpenCASCADE просмотрщик и скорее перейти на более производительный Coin3D. Для изучения этой библиотеки рекомендуется книга [http://www-evasion.imag.fr/Membres/Francois.Faure/doc/inventorMentor/sgi_html/ Open Inventor Mentor].
</div>


<div class="mw-translate-fuzzy">
<div class="mw-translate-fuzzy">
Line 17: Line 19:
</div>
</div>


<div class="mw-translate-fuzzy">
[http://ru.wikipedia.org/wiki/Open_Inventor OpenInventor] на самом деле язык описания [http://ru.wikipedia.org/wiki/Граф_сцены 3D сцены]. Сцена, описанная в OpenInventor, затем отрисовывается OpenGL на вашем экране. Об этом заботится Coin3D, поэтому программисту не надо иметь дело со сложными вызовами OpenGL, он может просто предоставить корректный (работающий) код OpenInventor. Большим преимуществом является то, что OpenInventor это широко известный и хорошо задокументированный стандарт.
[http://ru.wikipedia.org/wiki/Open_Inventor OpenInventor] на самом деле язык описания [http://ru.wikipedia.org/wiki/Граф_сцены 3D сцены]. Сцена, описанная в OpenInventor, затем отрисовывается OpenGL на вашем экране. Об этом заботится Coin3D, поэтому программисту не надо иметь дело со сложными вызовами OpenGL, он может просто предоставить корректный (работающий) код OpenInventor. Большим преимуществом является то, что OpenInventor это широко известный и хорошо задокументированный стандарт.
</div>


Одну из главных работ, которую FreeCAD делает за вас, это перевод информации о геометрии OpenCASCADE в формат языка OpenInventor.
Одну из главных работ, которую FreeCAD делает за вас, это перевод информации о геометрии OpenCASCADE в формат языка OpenInventor.


<div class="mw-translate-fuzzy">
OpenInventor записывает трехмерную сцену в форме [http://ru.wikipedia.org/wiki/Граф_сцены древа сцен], как показано ниже:
OpenInventor записывает трехмерную сцену в форме [http://ru.wikipedia.org/wiki/Граф_сцены древа сцен], как показано ниже:
</div>


[[Image:Scenegraph.gif]]
[[Image:Scenegraph.gif]]
<div class="mw-translate-fuzzy">
{{Caption|
{{Caption|
Рисунок, взятый с сайта [http://www-evasion.imag.fr/~Francois.Faure/doc/inventorMentor/sgi_html/index.html Inventor mentor]}}
Рисунок, взятый с сайта [http://www-evasion.imag.fr/~Francois.Faure/doc/inventorMentor/sgi_html/index.html Inventor mentor]}}
</div>


<div class="mw-translate-fuzzy">
Дерево сцен в openInventor описывает все части трёхмерной сцены, такие как геометрия, цвета, материалы, освещение, и т.д. и организует все эти данные в удобной и четкой структуре. Все что угодно может быть сгруппировано в субструктуры, позволяя вам организовывать содержание вашей сцены тем способом, который вам нравится. Вот пример файла в формате openInventor:
Дерево сцен в openInventor описывает все части трёхмерной сцены, такие как геометрия, цвета, материалы, освещение, и т.д. и организует все эти данные в удобной и четкой структуре. Все что угодно может быть сгруппировано в субструктуры, позволяя вам организовывать содержание вашей сцены тем способом, который вам нравится. Вот пример файла в формате openInventor:
</div>
{{Code|lang=bash|code=
{{Code|lang=bash|code=
#Inventor V2.0 ascii
#Inventor V2.0 ascii
Line 56: Line 66:
Как вы можете видеть, его структура проста. Вы используете разделители (separator), организуя ваши данные в блоки, это немного похоже на то, как вы организуете ваши файлы в папках. Каждый оператор влияет на то, что будет дальше, например, первые два пункта в вашем корневом разделителе это поворот и перенос(трансляция), как они повлияют на следующий элемент, который тоже является разделителем. В этом сепараторе определяется материал и другое преобразование. Поэтому наш цилиндр будет подвержен обеим трансформациям, то что было применено непосредственно к нем, так и то что было применено к родительскому разделителю.
Как вы можете видеть, его структура проста. Вы используете разделители (separator), организуя ваши данные в блоки, это немного похоже на то, как вы организуете ваши файлы в папках. Каждый оператор влияет на то, что будет дальше, например, первые два пункта в вашем корневом разделителе это поворот и перенос(трансляция), как они повлияют на следующий элемент, который тоже является разделителем. В этом сепараторе определяется материал и другое преобразование. Поэтому наш цилиндр будет подвержен обеим трансформациям, то что было применено непосредственно к нем, так и то что было применено к родительскому разделителю.


<div class="mw-translate-fuzzy">
Мы также обладаем множество элементов других типов для организации нашей сцены, таких как группы, переключатели и аннотации. Мы можем задать очень сложные материалы для ваших объектов, с цветом, текстурой, теневыми режимами и прозрачностью. Мы также можем задать освещение, камеры, и даже движение. Можно даже встроить кусочки сценариев в openInventor файлы, для задания более сложного поведения.
Мы также обладаем множество элементов других типов для организации нашей сцены, таких как группы, переключатели и аннотации. Мы можем задать очень сложные материалы для ваших объектов, с цветом, текстурой, теневыми режимами и прозрачностью. Мы также можем задать освещение, камеры, и даже движение. Можно даже встроить кусочки сценариев в openInventor файлы, для задания более сложного поведения.
</div>


<div class="mw-translate-fuzzy">
Если вы заинтересованы в получении дополнительной информации о openInventor, отправляйтесь напрямую к самому известному руководству [http://www-evasion.imag.fr/~Francois.Faure/doc/inventorMentor/sgi_html/index.html Inventor mentor].
Если вы заинтересованы в получении дополнительной информации о openInventor, отправляйтесь напрямую к самому известному руководству [http://www-evasion.imag.fr/~Francois.Faure/doc/inventorMentor/sgi_html/index.html Inventor mentor].
</div>


<div class="mw-translate-fuzzy">
В FreeCAD, как правило. не нужно напрямую взаимодействовать с древом сцен openInventor. Каждый объект в документе FreeCAD, будь то полигональная модель (mesh), форма детали, или что-нибудь ещё, автоматически преобразуется в код OpenInventor и вставляется в основное дерево сцен, которое вы видите в окне [[3D view/ru|трёхмерного просмотра]]. Это древо сцен непрерывно обновляется, когда вы делает изменения, добавляете или удаляете объекты из документа. В самом деле каждый объект (в пространстве App) обладает поставщиком визуального отображения (соответствующий объект в пространстве Gui), ответственного за выдачу кода OpenInventor.
В FreeCAD, как правило. не нужно напрямую взаимодействовать с древом сцен openInventor. Каждый объект в документе FreeCAD, будь то полигональная модель (mesh), форма детали, или что-нибудь ещё, автоматически преобразуется в код OpenInventor и вставляется в основное дерево сцен, которое вы видите в окне [[3D view/ru|трёхмерного просмотра]]. Это древо сцен непрерывно обновляется, когда вы делает изменения, добавляете или удаляете объекты из документа. В самом деле каждый объект (в пространстве App) обладает поставщиком визуального отображения (соответствующий объект в пространстве Gui), ответственного за выдачу кода OpenInventor.
</div>


<div class="mw-translate-fuzzy">
Но есть множество преимуществ, которые будут возможны при прямом доступе. Например, мы временно можем изменить внешний вид объекты, или мы можем добавить в сцену объекты, которые не обладают реальным представлением в документе FreeCAD, такие как геометрия построений, помощники, графические подсказки или инструменты , такие как манипуляторы или отображающаяся на экране информация.
Но есть множество преимуществ, которые будут возможны при прямом доступе. Например, мы временно можем изменить внешний вид объекты, или мы можем добавить в сцену объекты, которые не обладают реальным представлением в документе FreeCAD, такие как геометрия построений, помощники, графические подсказки или инструменты , такие как манипуляторы или отображающаяся на экране информация.
</div>


FreeCAD обладает несколькими инструментами для просмотра и изменения openInventor кода. На пример, нижеследующий код на python отобразит openInventor представление выбранного объекта:
FreeCAD обладает несколькими инструментами для просмотра и изменения openInventor кода. На пример, нижеследующий код на python отобразит openInventor представление выбранного объекта:

Revision as of 06:48, 30 May 2020

Введение

Геометрия которая появляется в трёхмерных видах FreeCAD, получается с помощью библиотек Coin3d. Coin3D это реализация стандарта OpenInventor. OpenCASCADE тоже поддерживает схожую функциональность, но при создании FreeCAD было решено не использовать встроенный в OpenCASCADE просмотрщик и скорее перейти на более производительный Coin3D. Для изучения этой библиотеки рекомендуется книга Open Inventor Mentor.

Описание

OpenInventor на самом деле язык описания 3D сцены. Сцена, описанная в OpenInventor, затем отрисовывается OpenGL на вашем экране. Об этом заботится Coin3D, поэтому программисту не надо иметь дело со сложными вызовами OpenGL, он может просто предоставить корректный (работающий) код OpenInventor. Большим преимуществом является то, что OpenInventor это широко известный и хорошо задокументированный стандарт.

Одну из главных работ, которую FreeCAD делает за вас, это перевод информации о геометрии OpenCASCADE в формат языка OpenInventor.

OpenInventor записывает трехмерную сцену в форме древа сцен, как показано ниже:

Рисунок, взятый с сайта Inventor mentor

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

#Inventor V2.0 ascii
 
Separator { 
    RotationXYZ {	
       axis Z
       angle 0
    }
    Transform {
       translation 0 0 0.5
    }
    Separator {	
       Material {
          diffuseColor 0.05 0.05 0.05
       }
       Transform {
          rotation 1 0 0 1.5708
          scaleFactor 0.2 0.5 0.2
       }
       Cylinder {
       }
    }
}

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

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

Если вы заинтересованы в получении дополнительной информации о openInventor, отправляйтесь напрямую к самому известному руководству Inventor mentor.

В FreeCAD, как правило. не нужно напрямую взаимодействовать с древом сцен openInventor. Каждый объект в документе FreeCAD, будь то полигональная модель (mesh), форма детали, или что-нибудь ещё, автоматически преобразуется в код OpenInventor и вставляется в основное дерево сцен, которое вы видите в окне трёхмерного просмотра. Это древо сцен непрерывно обновляется, когда вы делает изменения, добавляете или удаляете объекты из документа. В самом деле каждый объект (в пространстве App) обладает поставщиком визуального отображения (соответствующий объект в пространстве Gui), ответственного за выдачу кода OpenInventor.

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

FreeCAD обладает несколькими инструментами для просмотра и изменения openInventor кода. На пример, нижеследующий код на python отобразит openInventor представление выбранного объекта:

obj = FreeCAD.ActiveDocument.ActiveObject
viewprovider = obj.ViewObject
print viewprovider.toString()

А также мы обладаем модулем python открывает полный доступ к управлению чем угодно в Coin3D, такому как ваше дерево сцен в FreeCAD. Также читайте об этом на странице Pivy.