in examples-vite/layers/gltf/index.ts [26:133]
await test(true, 'PolarisLite', () => {
const p = new PolarisLite({
container: document.querySelector('#container') as HTMLDivElement,
lights: { ambientLight: { type: 'ambient', intensity: 1 } },
// background: 'transparent',
// autoplay: false,
})
p.setStatesCode('1|119.310764|26.073899|0.000000|0.00000|-0.03000|15')
const h = new HelperLayer()
p.add(h)
h.setProps({ box: false })
// p.addEventListener('viewChange', (e) => {
// console.log(e)
// })
globalThis.p = p
console.log(p)
// 加载GLTF
const gltfLayer = new GLTF2Layer({ rotateX: false })
p.add(gltfLayer)
const gltfObject = testData.gltfs
const keys = Object.keys(gltfObject)
for (let i = 0; i < keys.length; i++) {
const key = keys[i]
const url = gltfObject[key] // 注意url源数据是否为空模型
// 分类设色
let color = new Color('#ffffff')
switch (key) {
case 'water': {
color = new Color('#1E90FF')
break
}
case 'green': {
color = new Color('#008000')
break
}
case 'road': {
color = new Color('#8A2BE2')
break
}
case 'building_lod1': {
color = new Color('#FFA07A')
break
}
case 'building_lod2': {
color = new Color('#FF7F50')
break
}
case 'building_lod3': {
color = new Color('#FF4500')
break
}
case 'building_lod4': {
color = new Color('#FF0000')
break
}
}
gltfLayer.loadGLB(url).then((meshes) => {
console.log(meshes)
const projection = gltfLayer.resolveProjection()
if (projection) {
// 平移模型
const centerPt = projection.project(...center3D)
for (const item1 of meshes.children.values()) {
if (item1.children.size > 0) {
for (const item2 of item1.children.values()) {
// 判断是否是空模型
if (IR.isRenderable(item2)) {
const positions = item2.geometry.attributes.position?.array as Float32Array
for (let i = 0; i < positions.length / 3; i++) {
positions[i * 3] += centerPt[0]
positions[i * 3 + 1] += centerPt[1]
positions[i * 3 + 2] += centerPt[2]
}
// 改变颜色
item2.material['baseColorFactor'] = color
item2.material['roughnessFactor'] = 0.5
item2.material['metallicFactor'] = 0.1
}
}
} else {
// 判断是否是空模型
if (IR.isRenderable(item1)) {
const positions = item1.geometry.attributes.position?.array as Float32Array
for (let i = 0; i < positions.length / 3; i++) {
positions[i * 3] += centerPt[0]
positions[i * 3 + 1] += centerPt[1]
positions[i * 3 + 2] += centerPt[2]
}
// 改变颜色
item1.material['baseColorFactor'] = color
item1.material['roughnessFactor'] = 0.5
item1.material['metallicFactor'] = 0.1
}
}
}
} else {
console.warn('layer not inited')
}
})
}
})