我刚开始使用Open 3D图形API,我只想在给定的三维坐标之间画一条线。假设第一点是0,0,0,第二点是1,1,1。这个API的文档和例子非常糟糕,无法正确地得到它。我在使用。
发布于 2017-03-26 14:56:29
假设您只是询问如何创建线条形状--只需将坐标存储在SoVertexProperty节点中,将该节点设置为SoLineSet节点,然后将该线集添加到场景图中。Open将假设您希望使用给定的所有坐标,所以这就是您需要做的全部工作。对于两个坐标,使用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-27 05:55:04
如果您只需要设置基本颜色( OpenGL &OpenGL称之为漫射颜色),这通常是直线几何学的情况,那么您可以直接在SoVertexProperty节点中设置它。
例如,若要在前面的示例“red”中创建行,请添加以下行:
vprop->orderedRGBA = 0xff0000ff; // By default applies to all vertices
或者,更方便地:
vprop->orderedRGBA = SbColor(1,0,0).getPackedValue();
如果您需要对几何图形的外观进行更多的控制,请在几何节点之前向场景图添加一个SoMaterial节点。
发布于 2018-03-24 12:45:21
线宽是通过创建一个SoDrawStyle属性节点并将其添加到几何节点之前/之上的场景图来指定的。如下所示:
SoDrawStyle* style = new SoDrawStyle();
style->lineWidth = 3; // "pixels" but see OpenGL docs
parent->addChild( style );
https://stackoverflow.com/questions/43034213
复制