2

我是 Open Inventor 3D Graphics API 的新手,我只想在给定的 3-D 坐标之间画一条线。假设第一个点是 0,0,0,第二个点是 1,1,1。这个 API 的文档和示例真的很糟糕,并且无法正确显示。我正在使用 Visual Studio。

4

3 回答 3

4

如果您只需要设置基本颜色(Open Inventor & OpenGL 称之为漫反射颜色),这通常是线几何的情况,那么您可以直接在 SoVertexProperty 节点中进行设置。

例如,要将前面示例中的行设为“红色”,请添加以下行:

vprop->orderedRGBA = 0xff0000ff; // By default applies to all vertices

或者,更方便的是:

vprop->orderedRGBA = SbColor(1,0,0).getPackedValue();

如果您需要对几何体的外观进行更多控制,请在几何体节点之前将 SoMaterial 节点添加到场景图中。

于 2017-03-27T13:55:04.567 回答
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 );
于 2017-03-26T22:56:29.133 回答
3

线条粗细是通过创建SoDrawStyle属性节点并将其添加到几何节点之前/上方的场景图来指定的。像这样:

SoDrawStyle* style = new SoDrawStyle();
style->lineWidth = 3;  // "pixels" but see OpenGL docs
parent->addChild( style );
于 2018-03-24T20:45:21.030 回答