在3D中增加一条线?
参照这个问题
使用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
和一个有效的线宽,但仍然无法获得线宽增加。
你不能指定任何数字到glLineWidth()
。 您可以通过以下方法检查glLineWidth()
的可能值的范围:
glGetFloatv(GL_LINE_WIDTH_RANGE,sizes);
一个疯狂的想法是使用一个圆柱画线;)。 我使用它时,我想有良好的和可控的线,但我不知道一个方便的OpenGl函数来这样做。
@亚历山大:在这里你去我的缸的实施。 这有点乏味,但这是我目前所拥有的。 如果给定点p0
和p1
,Vector normal=(p1-p0).normalize()
将是圆柱体的轴。 select点p2不在vectorNormal上。
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; }
您只需要沿圆柱轴使用此function制作圆形:
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
,使其与正常或使用gluCinderinder如果你是谷歌的风扇….
希望它适合你。