Esempio n. 1
0
        public void SetStreamedVertices(IPrimitiveReader <TMaterial> srcPrim, PackedEncoding vertexEncoding)
        {
            Guard.NotNull(srcPrim, nameof(srcPrim));

            var attributeNames = VertexTypes.VertexUtils
                                 .GetVertexAttributes(srcPrim.Vertices[0], srcPrim.Vertices.Count, vertexEncoding)
                                 .Select(item => item.Name)
                                 .ToList();

            var vAccessors = new List <MACCESSOR>();

            GuardAll.MustBeEqualTo(vAccessors.Select(item => item.Attribute.ByteOffset), 0, nameof(vAccessors));
            GuardAll.MustBeEqualTo(vAccessors.Select(item => item.Attribute.ByteStride), 0, nameof(vAccessors));

            foreach (var an in attributeNames)
            {
                var vAccessor = VertexTypes.VertexUtils.CreateVertexMemoryAccessor(srcPrim.Vertices, an, vertexEncoding);
                if (vAccessor == null)
                {
                    continue;
                }

                vAccessors.Add(vAccessor);
            }

            _VertexAccessors = vAccessors.ToArray();

            MACCESSOR.SanitizeVertexAttributes(_VertexAccessors);
        }
Esempio n. 2
0
        public InstanceBuilder AddSkinnedMesh(MESHBUILDER mesh, Matrix4x4 meshWorldMatrix, params NodeBuilder[] joints)
        {
            Guard.NotNull(mesh, nameof(mesh));
            Guard.IsTrue(meshWorldMatrix.IsValid(_Extensions.MatrixCheck.WorldTransform), nameof(meshWorldMatrix));
            GuardAll.NotNull(joints, nameof(joints));

            var instance = new InstanceBuilder(this);

            instance.Content = new SkinnedTransformer(mesh, meshWorldMatrix, joints);

            _Instances.Add(instance);

            return(instance);
        }