public D3D11Mesh ToMesh() { var drawable = new D3D11Mesh(_topology, _indices.ToArray()); drawable.SetAttribute(Semantics.POSITION, VertexAttribute.Create(_positions.ToArray())); drawable.SetAttribute(Semantics.COLOR, VertexAttribute.Create(_colors.ToArray())); return(drawable); }
public static VertexAttribute Create <T>(T[] values) where T : struct { var size = Marshal.SizeOf <T>(); var va = new VertexAttribute { Value = new ArraySegment <byte>(new byte[size * values.Length]), ElementSize = size, }; using (var pin = UniGLTF.Pin.Create(values)) { Marshal.Copy(pin.Ptr, va.Value.Array, va.Value.Offset, va.Value.Count); } return(va); }
public void SetAttribute(Semantics semantics, VertexAttribute attribute) { m_attributes[semantics] = attribute; if (semantics == Semantics.POSITION) { VertexCount = attribute.Value.Count / attribute.ElementSize; _positions = new Vector3[VertexCount]; var pinnedArray = GCHandle.Alloc(_positions, GCHandleType.Pinned); { var ptr = pinnedArray.AddrOfPinnedObject(); var positions = attribute.Value; Marshal.Copy(positions.Array, positions.Offset, ptr, positions.Count); } pinnedArray.Free(); } }
public static D3D11Mesh CreateQuadrangle() { var drawable = new D3D11Mesh(SharpDX.Direct3D.PrimitiveTopology.TriangleList, new int[] { 0, 1, 2, 2, 3, 0 }); drawable.SetAttribute(Semantics.POSITION, VertexAttribute.Create(new Vector3[] { new Vector3(-1, 1, 0), new Vector3(1, 1, 0), new Vector3(1, -1, 0), new Vector3(-1, -1, 0), })); drawable.SetAttribute(Semantics.TEXCOORD, VertexAttribute.Create(new Vector2[] { new Vector2(0, 0), new Vector2(1, 0), new Vector2(1, 1), new Vector2(0, 1), })); return(drawable); }