2016-07-07 175 views
0

我有一個3D對象(SCNPlane)我想將這個平面分成正方形。想法是將飛機劃分成瓦片,每個瓦片都有自己的紋理(紋理座標)。並且瓦片的數量由用戶界面控制。以編程方式生成頂點

enter image description here

在上述圖像平面被分成沿x軸3瓷磚和沿y軸的3瓷磚和每個區塊被進一步分成兩個三角形。現在我正在嘗試使用for循環來生成這些頂點。我對這個金屬/ opengl世界是陌生的,如果任何人都能指出我的方向是正確的,那將是非常棒的。

感謝

回答

1

這只是數學...

var x0 = 0, x1 = 1000 
    var y0 = 0, y1 = 1000 
    var ySplit = 4 
    var xSplit = 6 

    for y in (0..<ySplit).reverse() 
    { 
     var localY0 = y * ((y1 - y0)/ySplit) 
     var localY1 = (y+1) * ((y1 - y0)/ySplit) 

     for x in 0..<xSplit 
     { 
      var localX0 = x * ((x1 - x0)/xSplit) 
      var localX1 = (x+1) * ((x1 - x0)/xSplit) 

      //Now you can easily get any vertex/square/triangle set from the given (x0,y) (x1,y1) 
     } 
    } 
+0

感謝。這就是我所做的,你我更清潔。這是唯一的方法,或者像金屬或OpenGLES這樣的圖形工具包中有可用的api,它們實際上將平面劃分爲頂點並返回頂點 – krishnan

1

SCNPlanewidthSegmentCountheightSegmentCount性質做到這一點(見SCNPlane Reference)。

編輯 如果您需要自定義紋理座標,那麼你就必須建立使用SCNGeometry.init(sources:elements:)定製的幾何形狀和計算頂點位置自己。

注意,在斯威夫特你有得心應手

SCNGeometryElement.init(indices:primitiveType:) 

和iOS的10,10 tvOS,MACOS 10.12和watchOS 3以下便利初始化:

SCNGeometrySource.init(normals:) 
SCNGeometrySource.init(textureCoordinates:) 
SCNGeometrySource.init(vertices:) 
+0

,謝謝mnuages,但它不返回頂點。我必須將紋理座標添加到頂點。 – krishnan

+0

再次感謝。沒有看到你的編輯。多數民衆贊成什麼我結束了做SCNGeometry(來源:[vertexSource,textureSource],元素:[geometryElement]) – krishnan