次の方法で共有


SCNGeometry.Create メソッド

定義

オーバーロード

Create()

新しい geometry 要素を作成します。

Create(SCNGeometrySource[], SCNGeometryElement[])

elementsの指定した配列から新しい geometry オブジェクトをsources作成します。

Create()

新しい geometry 要素を作成します。

[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

戻り値

属性

適用対象

Create(SCNGeometrySource[], SCNGeometryElement[])

elementsの指定した配列から新しい geometry オブジェクトをsources作成します。

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

パラメーター

sources
SCNGeometrySource[]

SCNGeometrySource オブジェクトの配列。

elements
SCNGeometryElement[]

SCNGeometryElement オブジェクトの配列。

このパラメーターは、null に設定できます。

戻り値

属性

注釈

カスタム ジオメトリを作成するために使用します。 開発者のニーズに応じて、 配列elementsと 配列の数と型をsources大きく変えることができます。 次の例は、1 つのテクスチャがマップされる三角形を定義する頂点の使用を示しています。 内locsの特定のインデックス値が定義indicesに使用される方法と、 内locsの順序が および txCoordsにどのように影響するかにnormals注意してください。 また、 のトリプレット indices がどのように にリンクされているかに注目してください SCNGeometryPrimitiveType.Triangles

//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 });

適用対象