2016-07-07 7 views
0

Ich habe ein 3D-Objekt (SCNPlane) Ich möchte diese Ebene in Quadrate teilen. Die Idee besteht darin, die Ebene in Kacheln zu unterteilen, und jede Kachel hat ihre eigenen Texturen (Texturkoordinaten). Und die Anzahl der Kacheln wird über die Benutzeroberfläche gesteuert.Vertices programmgesteuert generieren

enter image description here

In dem obigen Bild ist das Flugzeug in 3 Fliese entlang der X-Achse und 3 Fliese entlang der Y-Achse aufgeteilt, und jede Platte weiter in zwei Dreiecke unterteilt ist. Im Moment versuche ich die For-Schleifen zu verwenden, um diese Knoten zu generieren. Ich bin neu in dieser Metall/OpenGL-Welt, wenn mir jemand in die richtige Richtung zeigen könnte, wäre es großartig.

Dank

Antwort

1

Dies ist nur Mathe ...

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

Dank. Dies ist, was ich getan habe, deins ich viel sauberer. Ist dies der einzige Weg oder gibt es eine API in Grafik-Kit wie Metall oder OpenGLES, die tatsächlich die Ebene in Scheitelpunkte teilen und die Scheitelpunkte – krishnan

1

SCNPlane hat widthSegmentCount und heightSegmentCount Eigenschaften, die genau das tun (siehe SCNPlane Reference).

bearbeiten Wenn Sie benutzerdefinierte Textur benötigen Koordinaten dann werden Sie eine benutzerdefinierte Geometrie bauen müssen, um mit SCNGeometry.init(sources:elements:) und berechnen Vertex selbst positioniert.

Beachten Sie, dass in Swift Sie haben das handliche

SCNGeometryElement.init(indices:primitiveType:) 

und die folgenden Bequemlichkeit initializers in iOS 10, tvOS 10, macOS 10.12 und watchOS 3:

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

Dank Mnuages ​​zurückgibt, aber es gibt die Scheitelpunkte nicht zurück. Ich muss den Scheitelpunkten Texturkoordinaten hinzufügen. – krishnan

+0

danke nochmal. habe deine Bearbeitung nicht gesehen. Das ist, was ich am Ende SCNGeometry getan habe (Quellen: [VertexSource, TextureSource], Elemente: [GeometryElement]) – krishnan