public static Vec3[] ToVec3Array(Vector3[] v) { if (v == null) { return(null); } int count = v.Length; if (count == 0) { return(new Vec3[0]); } Vec3[] o = new Vec3[count]; unsafe { fixed(Vector3 *v0 = &v[0]) { Vector3 *ps = v0; fixed(Vec3 *v1 = &o[0]) { Vec3 *pt = v1; for (int i = 0; i < count; i++) { *pt = *( Vec3 * )ps; ++ps; ++pt; } } } } return(o); }
VertexData CreateVertexData(Vec3[] vertices) { VertexData vertexData = new VertexData(); VertexDeclaration declaration = vertexData.VertexDeclaration; declaration.AddElement(0, 0, VertexElementType.Float3, VertexElementSemantic.Position); VertexBufferBinding bufferBinding = vertexData.VertexBufferBinding; HardwareVertexBuffer vertexBuffer = HardwareBufferManager.Instance.CreateVertexBuffer( 12, vertices.Length, HardwareBuffer.Usage.StaticWriteOnly); bufferBinding.SetBinding(0, vertexBuffer, true); vertexData.VertexCount = vertices.Length; unsafe { Vec3 *buffer = (Vec3 *)vertexBuffer.Lock(HardwareBuffer.LockOptions.Normal).ToPointer(); foreach (Vec3 position in vertices) { *buffer = position; buffer++; } vertexBuffer.Unlock(); } return(vertexData); }