-
Notifications
You must be signed in to change notification settings - Fork 43
/
ns-SceneKit.xml
235 lines (220 loc) · 10.2 KB
/
ns-SceneKit.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
<Namespace Name="SceneKit">
<Docs>
<summary>The SceneKit namespace provides high-level, scene-graph-based 3D graphics.</summary>
<remarks>
<para>Scene Kit is a framework for 3D graphics, based on hierarchical scene-graphs.</para>
<para>The fundamental classes in Scene Kit are <see cref="T:SceneKit.SCNScene" />, which holds all content, and <format type="text/html"><a href="https://docs.microsoft.com/en-us/search/index?search=T:CoreGraphics.SceneKit.SCNView&scope=Xamarin" title="T:CoreGraphics.SceneKit.SCNView">T:CoreGraphics.SceneKit.SCNView</a></format>, a <see cref="T:UIKit.UIView" /> that renders an <see cref="T:SceneKit.SCNScene" />.</para>
<para>An <see cref="T:SceneKit.SCNScene" /> has a <see cref="P:SceneKit.SCNScene.RootNode" /> property of type <see cref="T:SceneKit.SCNNode" />. <see cref="T:SceneKit.SCNNode" />'s have <format type="text/html"><a href="https://docs.microsoft.com/en-us/search/index?search=P:SceneKit.SCNNode.ChildNode&scope=Xamarin" title="P:SceneKit.SCNNode.ChildNode">P:SceneKit.SCNNode.ChildNode</a></format>s and implement <c><![CDATA[System.Collections.Generic.IEnumerable`1<class MonoTouch.SceneKit.SCNNode>]]></c>. Properties of <see cref="T:SceneKit.SCNNode" /> include <see cref="P:SceneKit.SCNNode.Camera" />, of type <see cref="T:SceneKit.SCNCamera" />, <see cref="P:SceneKit.SCNNode.Geometry" />, of type <see cref="T:SceneKit.SCNGeometry" />, and <see cref="P:SceneKit.SCNNode.Light" />, of type <see cref="T:SceneKit.SCNLight" />.</para>
<para>Additionally, every <see cref="T:SceneKit.SCNNode" /> has a <see cref="P:SceneKit.SCNNode.Position" /> property that defines a location in space relative to the <see cref="T:SceneKit.SCNNode" />'s <see cref="P:SceneKit.SCNNode.ParentNode" /> and <format type="text/html"><a href="https://docs.microsoft.com/en-us/search/index?search=P:SceneKit.SCNNode.FirstMaterial&scope=Xamarin" title="P:SceneKit.SCNNode.FirstMaterial">P:SceneKit.SCNNode.FirstMaterial</a></format> and <format type="text/html"><a href="https://docs.microsoft.com/en-us/search/index?search=P:SceneKit.SCNNode.Materials&scope=Xamarin" title="P:SceneKit.SCNNode.Materials">P:SceneKit.SCNNode.Materials</a></format> that create the <see cref="T:SceneKit.SCNNode" />'s appearance.</para>
<para>The following example shows a minimal Scene Kit view:</para>
<example>
<code lang="csharp lang-csharp"><![CDATA[
public MySceneView (RectangleF frame) : base(frame)
{
BackgroundColor = UIColor.Blue;
this.Scene = new SCNScene ();
var material = new SCNMaterial ();
material.Diffuse.Contents = UIImage.FromFile("textureX.png");
material.Specular.Contents = UIColor.Gray;
material.LocksAmbientWithDiffuse = true;
Scene.RootNode.Geometry = new SCNBox {
Width = 1,
Height = 1,
Length = 1,
ChamferRadius = 0.2f,
FirstMaterial = material
};
Scene.RootNode.Light = new SCNLight {
LightType = SCNLightType.Ambient,
Color = UIColor.Gray,
};
var camera = new SCNCamera ();
var cameraNode = new SCNNode () {
Camera = camera,
Position = new SCNVector3 (3, 3, 3),
Constraints = new SCNConstraint[] { SCNLookAtConstraint.Create(Scene.RootNode) }
};
Scene.RootNode.AddChildNode (cameraNode);
}
]]></code>
</example>
<para>
<img href="~/SceneKit/_images/SceneKit.Namespace.Image1.png" alt="Screenshot showing a cube with rounded edges." />
</para>
<format type="text/html">
<h3>Geometry</h3>
</format>
<para>All geometry in SceneKit is described by subclasses of <see cref="T:SceneKit.SCNGeometry" />:</para>
<list type="table">
<item>
<term>
<see cref="T:SceneKit.SCNCapsule" />
</term>
<description>A pill-shaped capsule with adjustable end caps</description>
<description>
<img href="~/SceneKit/_images/SceneKit.SCNCapsule.png" alt="Scene showing SCNCapsule geometry" />
</description>
</item>
<item>
<term>
<see cref="T:SceneKit.SCNCone" />
</term>
<description>A cone whose top can be truncated</description>
<description>
<img href="~/SceneKit/_images/SceneKit.SCNCone.png" alt="Scene showing SCNCone geometry" />
</description>
</item>
<item>
<term>
<see cref="T:SceneKit.SCNBox" />
</term>
<description>A rectangular box.</description>
<description>
<img href="~/SceneKit/_images/SceneKit.SCNBox.png" alt="Scene showing SCNBox geometry" />
</description>
</item>
<item>
<term>
<see cref="T:SceneKit.SCNCylinder" />
</term>
<description>A cylinder.</description>
<description>
<img href="~/SceneKit/_images/SceneKit.SCNCylinder.png" alt="Image showing a SceneKit cylinder." />
</description>
</item>
<item>
<term>
<see cref="T:SceneKit.SCNFloor" />
</term>
<description>An infinite plane with the ability to reflect the geometry above it.</description>
<description>
<img href="~/SceneKit/_images/SceneKit.SCNFloor.png" alt="Scene showing SCNFloor geometry" />
</description>
</item>
<item>
<term>
<see cref="T:SceneKit.SCNPlane" />
</term>
<description>A one-sided rectangle.</description>
<description>
<img href="~/SceneKit/_images/SceneKit.SCNPlane.png" alt="Scene showing SCNPlane geometry" />
</description>
</item>
<item>
<term>
<see cref="T:SceneKit.SCNPyramid" />
</term>
<description>A tetrahedron.</description>
<description>
<img href="~/SceneKit/_images/SceneKit.SCNPyramid.png" alt="Scene showing SCNPyramid geometry" />
</description>
</item>
<item>
<term>
<see cref="T:SceneKit.SCNShape" />
</term>
<description>A 2D shape that has been extruded into the 3rd dimension.</description>
<description>
<img href="~/SceneKit/_images/SceneKit.SCNShape.png" alt="Scene showing SCNShape geometry" />
</description>
</item>
<item>
<term>
<see cref="T:SceneKit.SCNSphere" />
</term>
<description>A ball.</description>
<description>
<img href="~/SceneKit/_images/SceneKit.SCNSphere.png" alt="Scene showing SCNSphere geometry" />
</description>
</item>
<item>
<term>
<see cref="T:SceneKit.SCNText" />
</term>
<description>Extruded text.</description>
<description>
<img href="~/SceneKit/_images/SceneKit.SCNText.png" alt="Scene showing SCNText geometry" />
</description>
</item>
<item>
<term>
<see cref="T:SceneKit.SCNTorus" />
</term>
<description>A donut shape.</description>
<description>
<img href="~/SceneKit/_images/SceneKit.SCNTorus.png" alt="Scene showing SCNTorus geometry" />
</description>
</item>
<item>
<term>
<see cref="T:SceneKit.SCNTube" />
</term>
<description>An uncapped cylinder.</description>
<description>
<img href="~/SceneKit/_images/SceneKit.SCNCylinder.png" alt="Image showing a SceneKit cylinder." />
</description>
</item>
</list>
<para>In addition, SceneKit can load entire scenes from .DAE files with the <see cref="M:SceneKit.SCNScene.FromFile*" /> method.</para>
<para>Finally, developers can create custom geometry using the <format type="text/html"><a href="https://docs.microsoft.com/en-us/search/index?search=M:SceneKit.SCNGeometry.Create(SceneKit.SCNGeometrySource[], SceneKit.SCNGeometryElement[]*&scope=Xamarin" title="M:SceneKit.SCNGeometry.Create(SceneKit.SCNGeometrySource[], SceneKit.SCNGeometryElement[]*">M:SceneKit.SCNGeometry.Create(SceneKit.SCNGeometrySource[], SceneKit.SCNGeometryElement[]*</a></format> method with arrays of appropriate <see cref="T:SceneKit.SCNGeometrySource" /> and <see cref="T:SceneKit.SCNGeometryElement" /> objects. The following shows the creation of a custom pyramid:</para>
<example>
<code lang="csharp lang-csharp"><![CDATA[
//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);
//These texture coords will cause the texture to wrap
var txCoords = new [] {
new CGPoint(-1, -1),
new CGPoint(-1, 1),
new CGPoint(1, 1),
new CGPoint(1, -1)
};
var txCoordsSource = SCNGeometrySource.FromTextureCoordinates(txCoords);
var geometry = SCNGeometry.Create(new [] { locSource, normSource, txCoordsSource }, new [] { element });
]]></code>
</example>
<para>
<img href="~/SceneKit/_images/SceneKit.CustomGeometry.png" alt="An example of custom geometry." />
</para>
</remarks>
</Docs>
</Namespace>