在 3D 中使线条变粗?

Make a line thicker in 3D?

参考这个问题

Drawing a line between two points using SceneKit

我在 3D 中画一条线,想用这段代码把它加粗

  func renderer(aRenderer: SCNSceneRenderer, willRenderScene scene: SCNScene, atTime time: NSTimeInterval) {
    //Makes the lines thicker
    glLineWidth(20)
  }

但是不行,iOS8.2.

还有其他方法吗?

更新

来自文档

https://developer.apple.com/library/prerelease/ios/documentation/SceneKit/Reference/SCNSceneRendererDelegate_Protocol/index.html#//apple_ref/occ/intfm/SCNSceneRendererDelegate/renderer:updateAtTime:

我确实添加了SCNSceneRendererDelegate和一个有效的线宽,但仍然无法增加线宽。

您不能将任何号码分配给 glLineWidth()。 您可以通过以下方式检查 glLineWidth() 的可能值范围:

glGetFloatv(GL_LINE_WIDTH_RANGE,sizes);

一个疯狂的想法是使用圆柱体来绘制线条 ;)。当我想要漂亮且可控的线条时我会使用它,但我不知道有一个方便的 OpenGl 函数可以做到这一点。

@G Alexander:给你我的圆柱体实现。这有点乏味,但这就是我目前所拥有的。 如果你给我点 p0p1,向量 normal=(p1-p0).normalize() 将是圆柱体的轴。 选择不在向量 Normal.

上的点 p2
q=(p2-p0).normalize();
normal.crossproduct(q)=v0;
normal.crossproduct(v0)=v1;

有了这两个向量,您可以使用以下函数将具有任意半径的圆沿圆柱体的轴堆叠起来(圆柱体是一堆圆):

public Circle make_circle(Point center, Vector v0, Vector v1, double radius)
        {
            Circle c;
            for (double i = 0; i < 2 * Math.PI; i += 0.05)
            {
                Point p = new Point(center + radius * Math.Cos(i) * v0 + radius * Math.Sin(i) * v1);
                c.Add(p);
            }
          return c;
        }

你只需要使用这个函数沿着圆柱体的轴做圆:

List<Circle> Cylinder = new List<Circle>();
for(double i=0;i<1;i+=0.1)
{
  Cylinder.add( make_circle(P0+i*normal, v0, v1,radius);

}

现在你应该取两个连续的圆,并通过均匀采样将它们与四边形连接起来。

因为我已经实现了圈子,所以我已经这样实现了。

一个更简单的实现方法是沿 x 轴制作圆,然后旋转并将其平移到 p0 并使其与法线对齐,或者如果您是 Glu 的粉丝,则使用 gluCylinder ... .

希望对你有用。