制作思路:
1.加载模型。我用的是OBJ模型 官网API:https://threejs.org/docs/index.html?q=OBJLoader#examples/zh/loaders/OBJLoader
2.给模型贴上透明材质
3.使用EdgesGeometry创建这个模型描边数据。官网API:https://threejs.org/docs/index.html?q=EdgesGeometry#api/zh/geometries/EdgesGeometry
4.按照描边生成线条,赋上材质,把线条添加到场景中。
5.把模型添加到场景中
直接上代码:
// 建筑面材质
let buildMaterial = new THREE.MeshBasicMaterial({
color: "#009EFF", // 颜色
transparent: true, // 是否开启使用透明度
opacity: 0.25, // 透明度
depthWrite: false, // 关闭深度写入 透视效果
side: THREE.DoubleSide, // 双面显示
});
// 建筑线材质
let lineMaterial = new THREE.LineBasicMaterial({
color: "#36BCFF",
transparent: true,
opacity: 0.4,
depthWrite: false,
side: THREE.DoubleSide,
});
const loader = new OBJLoader(); //引用加载obj模型组件
loader.load(
'images/test/baida.obj',
function (object) {
object.scale.set(0.1, 0.1, 0.1); // 设置模型缩放
object.traverse((e) => { // 遍历模型中所有mesh
e.material = buildMaterial; // 赋模型材质
if (e.geometry) {
const edges = new THREE.EdgesGeometry(
e.geometry
);
const line = new THREE.LineSegments(
edges,
lineMaterial // 赋线条材质
);
object.add(line); // 把每一个mesh生成的线条添加到场景中
}
});
scene.add(object); // 添加到场景中
},
function (xhr) {
console.log((xhr.loaded / xhr.total * 100) + '% 加载进度');
},
function (error) {
console.log("错误,检查你的模型路径是否准确,模型是否存在!", error);
}
);