Bagaimana memodifikasi konten 3D dalam skenario AR saat runtime di XRFame mini-program
Artikel ini memberikan panduan praktis untuk kontrol strategi visibilitas dalam pelacakan AR, transformasi Transform saat runtime, dan pembaruan dinamis material GLTF.
Sebelum memulai
Bagaimana mengkonfigurasi strategi kontrol visibilitas runtime block
Strategi kontrol visibilitas komponen BlockController visibleStrategy memiliki tiga jenis:
| Strategi | Penjelasan |
|---|---|
| VisibleWhileTracked | Nilai default. Hanya ditampilkan saat Block berhasil dilacak, tersembunyi jika kehilangan pelacakan. |
| VisibleAfterFirstTracked | Tetap ditampilkan meskipun kehilangan pelacakan, asalkan Block pernah berhasil dilacak sekali. |
| None | Visibilitas tidak dikendalikan oleh mesin, dikelola secara mandiri oleh pengembang. |
Strategi visibilitas dapat dimodifikasi setelah BlockHolder memanggil holdBlock() untuk membuat node Block di bawah ShadowRoot.
Cara menemukan BlockID dapat merujuk ke memasang konten tanpa ema.
const blockInfo: easyar.BlockInfo = { id: blockId };
blockHolder.holdBlock(blockInfo);
const block = blockHolder.getBlockById(blockInfo.id);
// Ubah strategi menjadi: ditampilkan permanen setelah pertama kali dilacak
block.visibleStrategy = BlockVisibleStrategy.VisibleAfterFirstTracked;
Strategi Visibilitas default adalah VisibleWhileTracked, artinya konten (termasuk node anak) hanya ditampilkan saat Block berada dalam pelacakan MegaTracker.
Metode pengeditan dan modifikasi konten
Memodifikasi Transform objek
Untuk
Elementdalam skenario, perlu memanggil metode getComponent() untuk mendapatkanComponentyang sesuai sebelum dimodifikasi.const xrFrameSystem = wx.getXrFrameSystem(); let transform = model.getComponent(xrFrameSystem.Transform); transform.position.setValue(1.0, 0.0, -1.0); /** Menyalin quaternion asli */ let originalQuaternion = modelTF.quaternion.clone(); /** Memutar 180 derajat mengelilingi sumbu Y */ let targetQuaternion = originalQuaternion.multiply(new xrFrameSystem.Quaternion().setValue(0, 1, 0, 0)); transform.quaternion.setValue(targetQuaternion);Dalam contoh ini, program mendapatkan
xrFrameSystem.Transformdarimodel, lalu memodifikasi posisi dan rotasinya.Mengganti tekstur
Sebelum mengganti tekstur, aset tekstur itu sendiri harus dimuat secara manual menggunakan sistem manajemen aset adegan xr-frame dengan memanggil loadAsset.
Kemudian dapatkan properti
GLTFmodel, dan panggil metodesetTexture()padamaterialsetiapmesh.const textureAsset = await scene.assets.loadAsset({ type: 'texture', assetId: `texture01`, src: 'some-texture-url.png', }); model.getComponent(xrFrameSystem.GLTF).meshes.forEach((m: any) => { m.material.setTexture('u_baseColorMap', textureAsset.value); });Dalam contoh ini, program pertama memuat
textureAssetmenggunakan manajer aset adegan, lalu menggunakannya untuk mengganti tekstur model GLTF.Mengganti material terdaftar
Mengganti material terdaftar memerlukan pengambilan aset material terlebih dahulu menggunakan sistem manajemen aset adegan xr-frame dengan memanggil getAsset().
Kemudian dapatkan properti
GLTFmodel, dan modifikasi propertimaterialsetiapmeshke material target menggunakansetData.let occlusionMaterial = scene.assets.getAsset("material", "easyar-occlusion"); model.getComponent(xrFrameSystem.GLTF).meshes.forEach((m: any) => { m.setData({ material: occlusionMaterial }); });Dalam contoh ini, program memuat material oklusi EasyAR
easyar-occlusionmenggunakan manajer aset adegan, lalu menetapkannya sebagai material model GLTF.