[Музей программирования ]
Главная » 2015 » Сентябрь » 10 » SoShapeHints
07:10
SoShapeHints
#include <Inventor/nodes/SoShapeHints.h>SoShapeHints - Узел, предоставляющий подсказки о геометрии в сценеПо умолчанию, библиотеке очень мало известно о визуализируемой геометрии. Это может отрицательно сказываться как на скорости, так и на качестве изображения. Этот узел позволяет явно задать некоторые свойства геометрии, основанной на вершинах.Эти подсказки позволяют указывать порядок вершин, включить отбрасывание задних граней (треугольников, "отвёрнутых" от камеры) и отключить двустороннее освещение.Так же этот узел влияет на генерацию нормалей по умолчанию. Полем creaseAngle можно задавать угол для гладкого перехода между гранями. 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 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101    #include <Inventor/Win/SoWin.h> #include <Inventor/Win/viewers/SoWinExaminerViewer.h> #include <Inventor/nodes/SoSeparator.h> #include <Inventor/nodes/SoIndexedFaceSet.h> #include <Inventor/nodes/SoCoordinate3.h> #include <Inventor/nodes/SoShapeHints.h> #include <Inventor/nodes/SoBaseColor.h> #include <Inventor/nodes/SoTranslation.h> #include <Inventor/nodes/SoCube.h> #include "SoAutoPtr.h" int main(int argc, char* argv[]) { HWND wnd = SoWin::init( "example" ); SoAutoPtr<SoSeparator> root; SoAutoPtr<SoBaseColor> color[4]; color[0]->rgb = SbColor(1.0f, 1.0f, 0); color[1]->rgb = SbColor(1.0f, 0, 0); color[2]->rgb = SbColor(0, 1.0f, 0); color[3]->rgb = SbColor(0, 0, 1.0f); SoAutoPtr<SoCoordinate3> coord; coord->point.setNum(4); coord->point.set1Value( 0, -5.0, -5.0f, 0); coord->point.set1Value( 1, 5.f, -5.0f, 0); coord->point.set1Value( 2, 5.f, 5.f, 0); coord->point.set1Value( 3, -5.0f, 5.0f, 0); root->addChild(coord); SoAutoPtr<SoIndexedFaceSet> faceset; faceset->coordIndex.set1Value( 0, 0 ); faceset->coordIndex.set1Value( 1, 1 ); faceset->coordIndex.set1Value( 2, 2 ); faceset->coordIndex.set1Value( 3, 3 ); faceset->coordIndex.set1Value( 4, SO_END_FACE_INDEX ); SoAutoPtr<SoCube> cube; { SoAutoPtr<SoSeparator> sep1; sep1->addChild(color[1]); sep1->addChild(cube); SoAutoPtr<SoShapeHints> hint; hint->vertexOrdering = SoShapeHints::UNKNOWN_ORDERING; hint->faceType = SoShapeHints::CONVEX; hint->shapeType = SoShapeHints::SOLID; sep1->addChild(hint); sep1->addChild(color[0]); sep1->addChild( faceset ); root->addChild(sep1); } SoAutoPtr<SoTranslation> move; move->translation = SbVec3f(10.0f,0,0); root->addChild(move); { SoAutoPtr<SoSeparator> sep2; sep2->addChild(color[2]); sep2->addChild(cube); SoAutoPtr<SoShapeHints> hint; hint->vertexOrdering = SoShapeHints::CLOCKWISE; hint->faceType = SoShapeHints::CONVEX; hint->shapeType = SoShapeHints::SOLID; sep2->addChild(hint); sep2->addChild(color[0]); sep2->addChild( faceset ); root->addChild(sep2); } root->addChild(move); { SoAutoPtr<SoSeparator> sep3; sep3->addChild(color[3]); sep3->addChild(cube); SoAutoPtr<SoShapeHints> hint; hint->vertexOrdering = SoShapeHints::COUNTERCLOCKWISE; hint->faceType = SoShapeHints::CONVEX; hint->shapeType = SoShapeHints::SOLID; sep3->addChild(hint); sep3->addChild(color[0]); sep3->addChild( faceset ); root->addChild(sep3); } SoWinExaminerViewer * viewer = new SoWinExaminerViewer(wnd); viewer->setSceneGraph( root ); viewer->setBackgroundColor( SbColor(0.7f, 0.7f, 0.8f) ); viewer->setSize( SbVec2s(800, 600) ); viewer->show(); SoWin::mainLoop(); return 0; }
Просмотров: 48 | Добавил: admin | Рейтинг: 0.0/0
Всего комментариев: 0
avatar