首页 / 浏览问题 / 组件GIS / 问题详情
ModelBuilder3D.linearExtrude 线性拉伸后,如何赋贴图
1EXP 2022年12月20日
Model model = newGeoModel3D.getModel(); int skeletoncount = model.getSkeletonCount(-1);//数据只有一级lod,所以直接从-1索引即可 System.out.println(skeletoncount); String strPath = "D:/1/tieTu.jpg"; //遍历对象的所有子对象 for (int i = 0; i < skeletoncount; i++) { SkeletonID skeletonid = new SkeletonID(-1, i);//获取子对象ID,此处的-1也是lod的索引 Skeleton skeleton = model.getSkeleton(skeletonid);//根据ID获取到子对象 Material3D material3D = skeleton.getMaterial();//获取子对象的材质 //获取骨架对应的材质并删除纹理 //int iCountTexture = material3D.getTextures().size(); //material3D.removeTextures(); System.out.println("骨骼:" + skeleton.getName() + ",材质: " + material3D.getName()); TextureData textureData = new TextureData(); textureData.setName("Texture" + i); textureData.fromFile(strPath); Material3D newMaterial3D = new Material3D(); newMaterial3D.setName(material3D.getName()); newMaterial3D.setTexture(textureData); newMaterial3D.addTexture(strPath); //将新定义的材质赋给骨架的材质 skeleton.setMaterial(newMaterial3D); model.update(skeleton); } ModelFileSetting modelFileSetting = new ModelFileSetting(); //根据不同类型导出 modelFileSetting.setFilePath("D:/home/tiles/fbxto.obj"); //导出模型及导出位置并转换 ModelConvertor.toFile(model, modelFileSetting); newGeoModel3D.dispose();

1个回答

您好,可以有两种方法为模型贴图:

1、如果数据集中对象较多的话,建议使用图层风格设置为其贴图。先将贴图的全路径存储到属性表中,然后通过Layer3DSettingVector设置顶部贴图和底部贴图字段。具体可以参考帮助文档Layer3DSettingVector部分,有示范代码。

2、如果数据集中对象不多的话,可以通过GeoModel3D.Style3D为单个对象赋材质:

GeoStyle3D.SideTextureFiles :获取或设置用于侧面纹理渲染的一系列图片文件的全路径。对三维场景中的线、面几何对象设置拉伸高度时,会形成拉伸面,拉伸面就是侧面,使用该属性指示的图片可对侧面进行纹理渲染。该属性仅当将三维场景中的线、面几何对象的高度模式设置为非地表高度模式时有效。由于可设置多张例如:形成了9个拉伸面,如果设置9张侧面贴图,则每个面一张贴图;设置8张侧面贴图,则前7个面分别各用一张贴图,最后两个面共用一张贴图;设置7张侧面贴图,前6个拉伸面各用一张贴图,后三个面共用一张贴图;依次类推。

希望可以帮助到您!

陈巡
1
2,513EXP 2022年12月20日
...