#include <Inventor/nodes/SoTextureCoordinateEnvironment.h>SoTextureCoordinateEnvironment - Узел, задающий текстурные координаты, проецируемые на сферуЭтот узел создаёт текстурные координаты путём проецирования точек поверхности на окружающую её сферу.
|
#include <Inventor/nodes/SoTextureCoordinatePlane.h>SoTextureCoordinatePlane - Узел, задающий текстурные координаты проекцией на плоскостьЭтот узел создаёт текстурные координаты из точек на поверхности путём их проекции на плоскость.
|
#include <Inventor/nodes/SoTransform.h>SoTransform - Узел, задающий 3D геометрические трансформацииЭтот узел задаёт неоднородные трансформации, вращения и перемещения. Все трансформации происходят вокруг текущей точки начала координат. C++ 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <Inventor/Win/SoWin.h>
#include <Inventor/Win/viewers/SoWinExaminerViewer.h>
#include <Inventor/nodes/SoSeparator.h>
#include <Inventor/nodes/SoCube.h>
#include <Inventor/nodes/SoTransform.h>
#include <Inventor/nodes/SoBaseColor.h>
#include "SoAutoPtr.h"
#include <math.h>
int main(int argc, char* argv[])
{
HWND wnd = SoWin::init( "example" );
SoAutoPtr<SoSeparator> root;
SoAutoPtr<SoCube> cube;
SoAutoPtr<SoBaseColor> colors[3];
colors[0]->rgb = SbColor(1.0f, 0, 0);
colors[1]->rgb = SbColor(0, 1.0f
...
Читать дальше »
|
#include <Inventor/nodes/SoTranslation.h>SoTranslation - Узел, задающий 3D переносЭтот узел задаёт перемещения при в 3D пространстве. C++ 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <Inventor/Win/SoWin.h>
#include <Inventor/Win/viewers/SoWinExaminerViewer.h>
#include <Inventor/nodes/SoSeparator.h>
#include <Inventor/nodes/SoCube.h>
#include <Inventor/nodes/SoTranslation.h>
#include <Inventor/nodes/SoBaseColor.h>
#include "SoAutoPtr.h"
int main(int argc, char* argv[])
{
HWND wnd = SoWin::init( "example" );
SoAutoPtr<SoSeparator> root;
SoAutoPtr<SoCube> cube;
SoAutoPtr<SoTranslation> move;
move->translation = SbVec3f(2.0f, 0.0f, 0);
SoAutoPtr<SoBaseColor> red;
red->rgb = SbColor(1.0f, 0, 0);
root->addChild(red);
root->addChild(cube);
root->addChild(move);
...
Читать дальше »
|
#include <Inventor/nodes/SoUnits.h>SoUnits - Узел, преобразующий текущие единицы длиныЭтот узел определяет однородное 3D масштабирование в соответствии с указанными единицами измерения. По умолчанию длина задаётся в метрах. C++ 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <Inventor/Win/SoWin.h>
#include <Inventor/Win/viewers/SoWinExaminerViewer.h>
#include <Inventor/nodes/SoSeparator.h>
#include <Inventor/nodes/SoCube.h>
#include <Inventor/nodes/SoUnits.h>
#include <Inventor/nodes/SoTransform.h>
#include <Inventor/nodes/SoBaseColor.h>
#include "SoAutoPtr.h"
#include <math.h>
int main(int argc, char* argv[])
{
HWND wnd = SoWin::init( "example" );
SoAutoPtr<SoSeparator> root;
SoAutoPtr<SoCube> cube;
SoAutoPtr<SoBaseColor> colors[3];
colors[0]->rgb
...
Читать дальше »
|
В библиотеке Coin3D есть возможность сохранения и последующей загрузки граф-сцены, полностью или частично.Для загрузки используется объект класса SoInput и статические функции класса SoDB.Для сохранения используется объект класса SoOutput.В этом примере создаётся утилита для просмотра сохранённых граф-сцен. На её примере можно разобраться, как происходит загрузка граф-сцены из файла и последующая работа с загруженной граф-сценой.Как видно из кода, это не консольное, а оконное MFC приложение. Loader.cpp 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#define VC_EXTRALEAN
#include <afxext.h>
#include <Inventor/Win/SoWin.h>
#include <Inventor/Win/viewers/SoWinExaminerViewer.h>
#include <Inventor/nodes/SoSeparator.h>
#include <Inventor/SoInput.h>
class CLoaderApp : public CWinApp
{
public:
virtual BOOL InitInstance()
{
CWinApp::InitInstance();
while(tru
...
Читать дальше »
|
Небольшая функция, позволяющая выгружать в файл части графа или весь граф полностью, для последующей его загрузки и использования. saver.cpp 1
2
3
4
5
6
7
8
9
10
11
#include <Inventor/SoOutput.h>
#include <Inventor/actions/SoWriteAction.h>
void Save( const char * fileName, SoNode * root )
{
SoOutput output;
output.openFile( fileName );
SoWriteAction wa( &output );
wa.apply( root );
}
|
При использовании библиотеки coin3d интенсивно используется динамическое создание объектов, при этом запрещено непосредственное объектов посредством вызова деструктора, т.е. создание объектов графа-сцены в стеке невозможно.Удаление объектов происходит аналогично COM-объектам. В каждом объекта реализован интрузивный счётчик ссылок, при каждом добавлении объекта в граф-сцену счётчик ссылок увеличивается, при изымании объекта или удалении граф-сцены счётчик уменьшается. При обнулении счётчика объект удаляется.Это создаёт небольшую проблему: велика возможность утечек памяти, если в процессе построения граф-сцены случится что-то неожиданное. Чтобы хоть как-то уменьшить эту проблему я написал аналог класса std::auto_ptr, но для объектов граф-сцены.Для упрощения создания объектов, не требуется явная передача указателя на динамически созданный объект. По умолчанию, автоматически конструируется объект заданного типа. При явной передаче указателя на управление, указатель может быть указанного ти
...
Читать дальше »
|
#UPD: Хм. Собрал версию 3.1.3 и опять не увидел теней. Вероятно, сам что-то поменял в настройках, а не в койне дело. Будем искать...В репозитории появилась тестовая версия coin4. Обрадовался. Вроде всё работало даже, к счастью не успел уроки на четвёртую версию переделать.Оказалось, что какая-то проблема с шейдерами там, разбираться не стал. К не релизным версиям не придираются.Следующий файл содержит сцену с перемещающимися объектами, отбрасывающими динамические тени.При открытии появятся диалоги, сообщающие об удачной компиляции каждого шейдера.Это дурацкая ошибка библиотеки, исправление которой я опишу позже (разработчикам я про неё тоже написал, жду их реакции).Чтобы открыть этот файл, нужно собрать загрузчик сцен из предыдущего урока.Как это не печально, но открыв сцену в coin4 теней я не увидел.P.S.: Убедитесь, что перед "#Inventor V2.1 ascii" нет пробелов. Это должна быть первая строка файла. shadow.iv 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
...
Читать дальше »
|
#UPD: Упс, таблицу стилей перепутал. Вот эти стили подключать надо.Мне не удалось найти готового решения для подсветки синтаксиса, интегрируемого в ЖЖ, поэтому была создана программа "BeCode, выполняющая обработку исходных кодов и подготовку их для помещения в блог.Выбранное мной решение привело к небольшой проблеме, подсветка осуществляется только при наличии необходимых стилей, т.е. вне блога coin3d-ru код остаётся чёрно-белым.Эта проблема лего устраняется, путём добавления необходимых стилей к текущему стилю вашего журнала. Это даже даёт некоторое преимущество, т.к. вы можете настроить отображение кода по своему усмотрению. coin3d-ru.css 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/* classes for code highlight */
.sc_CodeHeader {
color: #FFF;
background-color: #666;
font-weight: 700;
font-size:12px;
}
.sc_LineNumber {
color: #EEE;
background-color: #AAA;
padding-left: 5px;
padding-right: 5px;
}
.sc_codeBlock
...
Читать дальше »
|