在3D中加粗线条?

时间:2015-05-20 22:38:43

标签: ios swift opengl-es scenekit

参考这个问题

  

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)
  }

但它不起作用,iOS 8.2。

还有其他办法吗?

更新

来自文档

  

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

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

2 个答案:

答案 0 :(得分:2)

@G亚历山大:在这里你进行我的圆柱体实施。这有点乏味,但这是我现在所拥有的。 如果您给我分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 .... / p>

希望它适合你。

答案 1 :(得分:1)

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

glGetFloatv(GL_LINE_WIDTH_RANGE,sizes);

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