2015-05-20 44 views
1

在談到這個問題在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) 
    } 

,使之厚,但它不工作,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和有效的線寬,但還是沒能得到線寬增加。

回答

1

您不能指定任何編號到glLineWidth()。 可以通過檢查glLineWidth()可能值的範圍:

glGetFloatv(GL_LINE_WIDTH_RANGE,sizes); 

一個瘋狂的想法是使用一個汽缸畫線)。當我想擁有漂亮且可控的線條時,我使用它,但我不知道使用方便的OpenGl函數。

+0

謝謝你。你有一個圓柱體的功能,可以接受兩點並將圓柱體放在那裏嗎? –

+0

我想我是...讓我去吃晚飯,我會在2小時內回來;) –

2

@G亞歷山大:在這裏你去我的缸實施。這有點乏味,但這是我目前所擁有的。 如果你給我點p0p1,矢量normal=(p1-p0).normalize()將是圓柱的軸。 選擇點p2不在矢量Normal上。

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

具有這兩個矢量可以有與沿使用下面的函數的圓柱體的軸堆疊的任何半徑的圓(A氣缸是圓的堆棧):

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,使其與正常對齊或使用gluCylinder如果你是穀氨酸的風扇....

希望它適合你。

+0

謝謝!我可以做這個工作,我想最初你使用的是原始的SCNCylinder,並不知道你將如何去做角度的數學。 –

+0

:))))有時我癡迷於我瘋狂的做事方式 –