Example #1
0
            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);
            }
Example #2
0
        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);
        }
Example #3
0
        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();
            }
        }
Example #4
0
        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);
        }