다음을 통해 공유


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 매우 가변적일 수 있습니다. 다음 예제에서는 단일 텍스처가 매핑되는 삼각형을 정의하는 꼭짓점의 사용을 보여 줍니다. 내 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 });

적용 대상