Freigeben über


SCNGeometry.Create Methode

Definition

Überlädt

Create()

Erstellt ein neues geometry-Element.

Create(SCNGeometrySource[], SCNGeometryElement[])

Erstellt ein neues geometry-Objekt aus den angegebenen Arrays von sources und elements.

Create()

Erstellt ein neues geometry-Element.

[Foundation.Export("geometry")]
[ObjCRuntime.Introduced(ObjCRuntime.PlatformName.MacOSX, 10, 9, ObjCRuntime.PlatformArchitecture.All, null)]
public static SceneKit.SCNGeometry Create ();
static member Create : unit -> SceneKit.SCNGeometry

Gibt zurück

Attribute

Gilt für:

Create(SCNGeometrySource[], SCNGeometryElement[])

Erstellt ein neues geometry-Objekt aus den angegebenen Arrays von sources und elements.

[Foundation.Export("geometryWithSources:elements:")]
public static SceneKit.SCNGeometry Create (SceneKit.SCNGeometrySource[] sources, SceneKit.SCNGeometryElement[] elements);
static member Create : SceneKit.SCNGeometrySource[] * SceneKit.SCNGeometryElement[] -> SceneKit.SCNGeometry

Parameter

sources
SCNGeometrySource[]

Ein Array von SCNGeometrySource-Objekten.

elements
SCNGeometryElement[]

Ein Array von SCNGeometryElement-Objekten.

Dieser Parameter kann null sein.

Gibt zurück

Attribute

Hinweise

Wird zum Erstellen einer benutzerdefinierten Geometrie verwendet. Abhängig von den Anforderungen des Entwicklers können die Anzahl und die Typen der sources Arrays und elements sehr variabel sein. Das folgende Beispiel zeigt die Verwendung von Scheitelpunkten, die Dreiecke definieren, auf denen eine einzelne Textur zugeordnet wird. Beachten Sie, wie bestimmte Indexwerte in locs verwendet werden, um zu definieren indices und wie sich die Reihenfolge innerhalb von locs und txCoordsauswirktnormals. Beachten Sie auch, wie die Drillinge in indices mit SCNGeometryPrimitiveType.Trianglesverknüpft sind.

//Lower-left
var a = new SCNVector3(-1, -1, 0);
//Upper-right
var b = new SCNVector3(1, 1, 0);

var halfX = (c.X + a.X) / 2;
var halfY = (c.Y + a.Y) / 2;
var halfZ = (c.Z + a.Z) / 2;

var b = new SCNVector3(a.X, c.Y, halfZ);
var d = new SCNVector3(c.X, a.Y, halfZ);
//Elevate the midpoint so that it's clearly a pyramid
var midPoint = new SCNVector3(halfX, halfY, halfZ + 1.0);

//The vertices of the geometry
var locs = new [] {
	a, b, c, d, midPoint
};
var locSource = SCNGeometrySource.FromVertices(locs);

//Note that this relies on the ordering of locs above
//and it defines triangles (could be triangle strips, etc.)
var indices = new [] {
	//Triangles are defined counter-clockwise!
	4, 1, 0,
	1, 4, 2,
	2, 4, 3,
	3, 4, 0
};


var idxArray = new byte[indices.Length][];
for(int i = 0; i < idxArray.Length; i++)
{
	idxArray[i] = BitConverter.GetBytes(indices[i]);
}
var idxData = NSData.FromArray(idxArray.SelectMany(id => id).ToArray());

//Note that this relies on indices defining triangles
var element = SCNGeometryElement.FromData(idxData, SCNGeometryPrimitiveType.Triangles, indices.Length / 3, sizeof(int));

//Normals are relative to geometry
var normals = new [] {
	new SCNVector3(0, 0, 1),
	new SCNVector3(0, 0, 1),
	new SCNVector3(0, 0, 1),
	new SCNVector3(0, 0, 1),
	new SCNVector3(0, 0, 1),
};;
var normSource = SCNGeometrySource.FromNormals(normals);

var txCoords = new [] {
	new CGPoint(0, 0),
	new CGPoint(0, 1),
	new CGPoint(1, 1),
	new CGPoint(1, 0),
  new CGPoint(0.5, 0.5)
};

var txCoordsSource = SCNGeometrySource.FromTextureCoordinates(txCoords);

var geometry = SCNGeometry.Create(new [] { locSource, normSource, txCoordsSource }, new [] { element });

Gilt für: