Inheritance: System.IO.MemoryStream
Esempio n. 1
0
        public bool GetNormals(out Vector3[] normals, int usageIndex)
        {
            normals = null;

            VertexLayout vertexLayout = GetVertexLayout(0);

            if (vertexLayout == null)
            {
                return(false);
            }

            VertexLayout.Entry.DataTypes dataType;
            int streamOffset;
            int streamIndex;

            //todo: if normal does not exist, we can determine it from the tangent and binormal, if it exists
            bool normalExists = vertexLayout.GetEntryInfo(VertexLayout.Entry.DataUsages.Normal, usageIndex, out dataType, out streamIndex, out streamOffset);

            if (!normalExists)
            {
                return(false);
            }

            normals = new Vector3[VertexCount];

            Mesh.VertexStream vertexStream = VertexStreams[streamIndex];

            switch (dataType)
            {
            case VertexLayout.Entry.DataTypes.Float3:
            {
                vertexStream.ReadFloat3s(normals, streamOffset, 0, (int)VertexCount);
            }
            break;

            case VertexLayout.Entry.DataTypes.ubyte4n:
            {
                vertexStream.ReadUByte4Ns(normals, streamOffset, 0, (int)VertexCount);
            }
            break;

            default:
                break;
            }

            return(true);
        }
Esempio n. 2
0
        public bool GetTexCoords(out Vector2[] texCoords, int usageIndex)
        {
            texCoords = null;

            VertexLayout vertexLayout = GetVertexLayout(0);

            if (vertexLayout == null)
            {
                return(false);
            }

            VertexLayout.Entry.DataTypes dataType;
            int streamOffset;
            int streamIndex;

            bool texcoordExists = vertexLayout.GetEntryInfo(VertexLayout.Entry.DataUsages.Texcoord, usageIndex, out dataType, out streamIndex, out streamOffset);

            if (!texcoordExists)
            {
                return(false);
            }

            texCoords = new Vector2[VertexCount];

            Mesh.VertexStream vertexStream = VertexStreams[streamIndex];

            switch (dataType)
            {
            case VertexLayout.Entry.DataTypes.Float2:
            {
                vertexStream.ReadFloat2s(texCoords, streamOffset, 0, (int)VertexCount);
            }
            break;

            case VertexLayout.Entry.DataTypes.float16_2:
            {
                vertexStream.ReadHalf2s(texCoords, streamOffset, 0, (int)VertexCount);
            }
            break;

            default:
                break;
            }

            return(true);
        }
Esempio n. 3
0
        public bool GetPositions(out List <Vector3> positions, int usageIndex)
        {
            positions = null;

            VertexLayout vertexLayout = GetVertexLayout(0);

            if (vertexLayout == null)
            {
                return(false);
            }

            VertexLayout.Entry.DataTypes dataType;
            int streamOffset;
            int streamIndex;

            bool positionExists = vertexLayout.GetEntryInfo(VertexLayout.Entry.DataUsages.Position, usageIndex, out dataType, out streamIndex, out streamOffset);

            if (!positionExists)
            {
                return(false);
            }

            positions = new List <Vector3>((int)VertexCount);

            Mesh.VertexStream vertexStream = VertexStreams[streamIndex];

            switch (dataType)
            {
            case VertexLayout.Entry.DataTypes.Float3:
            {
                vertexStream.ReadFloat3s(positions, streamOffset, 0, (int)VertexCount);
            }
            break;

            default:
                break;
            }

            return(true);
        }