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; } }
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); }