Ejemplo n.º 1
0
    public void AddMeshWithMaterials(Mesh mesh, Material[] materials, Matrix4x4 mat_, string name)
    {
        if (mesh == null)
        {
            Debug.LogWarning("Mesh is null. Object name " + name);
            return;
        }
        var matNames = GetMaterialNames(materials);

        mat_ = Matrix4x4.Scale(new Vector3(-1, 1, 1)) * mat_;

        // create geometry
        var geometryId = CreateMeshWithSubmeshes(mesh, matNames);

        // create node
        var nodeInstance = new node();

        nodes.Add(nodeInstance);
        nodeInstance.name             = name;
        nodeInstance.ItemsElementName = new ItemsChoiceType2[]
        {
            ItemsChoiceType2.matrix
        };
        nodeInstance.id = CreateId();
        var mat = new matrix();

        nodeInstance.Items = new object[]
        {
            mat
        };
        mat.Values = new double[16];
        for (int i = 0; i < 16; i++)
        {
            mat.Values[i] = mat_[i / 4, i % 4];
        }
        nodeInstance.instance_geometry = new instance_geometry[]
        {
            new instance_geometry()
        };
        nodeInstance.instance_geometry[0].url           = "#" + geometryId;
        nodeInstance.instance_geometry[0].bind_material = new bind_material();
        nodeInstance.instance_geometry[0].bind_material.technique_common = new instance_material[matNames.Count];
        for (int i = 0; i < matNames.Count; i++)
        {
            var imat = new instance_material();
            imat.symbol = matNames[i];
            imat.target = "#" + matNames[i];
            nodeInstance.instance_geometry[0].bind_material.technique_common[i] = imat;
        }
    }
Ejemplo n.º 2
0
        private static bind_material MakeBindedMaterial(ref Model3D mdl)
        {
            bind_material bm = new bind_material();

            instance_material[] materials = new instance_material[mdl.builder.TextureImages.Count];
            for (int id_num = 0; id_num < materials.Length; id_num++)
            {
                materials[id_num]        = new instance_material();
                materials[id_num].symbol = "MaterialInstance_" + id_num;
                materials[id_num].target = "#material_" + id_num;
            }

            bm.technique_common = materials;
            return(bm);
        }