Как нарисовать линию в Open Inventor 3D Graphics API?
Я новичок в Open Inventor 3D Graphics API и хочу нарисовать линию между заданными трехмерными координатами. Скажем, первая точка 0,0,0, а вторая 1,1,1. Документация и примеры этого API действительно ужасны и не могут сделать это правильно. Я использую Visual Studio.
3 ответа
Предполагая, что вы просто спрашиваете о создании формы линии - просто сохраните координаты в узле SoVertexProperty, установите этот узел в узле SoLineSet, а затем добавьте набор линий в граф сцены. Open Inventor предполагает, что вы хотите использовать все заданные координаты, поэтому это все, что вам нужно сделать. Только для двух координат может быть проще использовать метод set1Value, но вы также можете установить координаты из массива. Вы не сказали, какой язык вы используете, поэтому я покажу код на C++ (C# и Java будут практически одинаковыми, за исключением различий синтаксиса языка):
SoVertexProperty* vprop = new SoVertexProperty();
vprop->vertex.set1Value( 0, 0,0,0 ); // Set first vertex to be 0,0,0
vprop->vertex.set1Value( 1, 1,1,1 ); // Set second vertex to be 1,1,1
SoLineSet* line = new SoLineSet();
line->vertexProperty = vprop;
sceneGraph->addChild( line );
Если вам просто нужно установить базовый цвет (то, что Open Inventor и OpenGL называют диффузным цветом), что обычно имеет место для геометрии линии, то вы можете установить его непосредственно в узле SoVertexProperty.
Например, чтобы сделать строку в предыдущем примере "красной", добавьте эту строку:
vprop->orderedRGBA = 0xff0000ff; // By default applies to all vertices
или, более удобно:
vprop->orderedRGBA = SbColor(1,0,0).getPackedValue();
Если вам нужно больше контроля над внешним видом геометрии, добавьте узел SoMaterial к графу сцены перед узлом геометрии.
Толщина линии задается путем создания узла свойства SoDrawStyle и добавления его к графу сцены перед / над узлом геометрии. Как это:
SoDrawStyle* style = new SoDrawStyle();
style->lineWidth = 3; // "pixels" but see OpenGL docs
parent->addChild( style );