下图是一个城市glb模型,使用geojson通过程序化贴图得到的模型,内部包含了丰富的贴图。我们来分析下 他是如何贴图的。
拉近查看
点击中间建筑物后,查看到节点名是208,我们看到建筑物底部和顶部是一个mesh。
底部常见有门面房,大厅等。
既然是一个mesh用的材质是一个,我们来获取208的材质。代码来自Cursor
function convertToBase64(material) {
const texture = material.map; // 获取材质的纹理
if (texture && texture.image) {
const canvas = document.createElement('canvas');
const context = canvas.getContext('2d');
// 设置画布大小
canvas.width = texture.image.width;
canvas.height = texture.image.height;
// 将图像绘制到画布上
context.drawImage(texture.image, 0, 0);
// 获取 Base64 字符串
const base64String = canvas.toDataURL('image/jpeg'); // 或 'image/png'
console.log(base64String); // 输出 Base64 字符串
} else {
console.error('纹理图像未加载或不存在');
}
}
底部和顶部通过定义uv坐标来使用下面的材质。高度上没有平铺贴图。横向设定一个窗户多少米,然后根据geojson polygon边的长度(米)计算uv坐标。
207的材质是楼面,也是定义好材质的宽高和建筑物轮廓的长度以及高度,计算uv贴图坐标。
总结一个楼栋的材质分为3部分楼顶、楼面、建筑底部和顶部。
假设建筑物是polygon1,程序上将polygon拆分为3部分。
1、中间平铺
2、顶部和底部
3、屋顶是一个平面。
在实际应用中,如果有5000个建筑物。根据高度或建筑物类型将建筑物分类贴图。 比如材质1是 行政大楼 材质2是 小区。将相同材质的建筑物放到一个mesh中。