2016-07-07 8 views
0

私は3Dオブジェクト(SCNPlane)を持っています。この平面を四角形に分割したいと思います。アイデアは平面をタイルに分割することで、各タイルは独自のテクスチャ(テクスチャ座標)を持ちます。また、タイルの数はユーザーインターフェイスによって制御されます。上記画像における頂点をプログラムで生成する

enter image description here

平面は、x軸に沿って3タイルおよびy軸に沿って3タイルに分割され、各タイルは、さらに2つの三角形に分割されます。今私はこれらの頂点を生成するために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

SCNPlaneは(SCNPlane Referenceを参照)ちょうどそれをwidthSegmentCountheightSegmentCount特性を有しています。

編集 カスタムテクスチャを必要とするならば、あなたはSCNGeometry.init(sources:elements:)を使用してカスタムジオメトリーを構築し、位置頂点を自分で計算する必要があります座標。

スウィフトにあなたはiOSの10、tvOS 10、MacOSの10.12とwatchOS 3で便利

SCNGeometryElement.init(indices:primitiveType:) 

と、次の利便初期化子を持っていることに注意してください:

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

mnuagesに感謝しますが、頂点を返さない。頂点にテクスチャ座標を追加する必要があります。 – krishnan

+0

もう一度ありがとう。あなたの編集を見たことがありませんでした。私はSCNGeometry(ソース:[vertexSource、textureSource]、要素:[geometryElement])をやってしまったのです – krishnan

関連する問題