Wie man 3D-inhalte in AR-szenen zur laufzeit von XRFame mini-programmen ändert
Dieser Artikel bietet praktische Anleitungen zur Steuerung der Sichtbarkeitsstrategie unter AR-Tracking, zur Laufzeit-Transform-Änderung und zur dynamischen Aktualisierung von GLTF-Materialien.
Bevor Sie beginnen
- Machen Sie sich mit xr-frame Laufzeit-3D-Inhaltsladen vertraut
Wie man die sichtbarkeitssteuerungsstrategie für Laufzeit-blöcke konfiguriert
Die Sichtbarkeitssteuerungsstrategie visibleStrategy der BlockController-Komponente hat drei Modi:
| Strategie | Beschreibung |
|---|---|
| VisibleWhileTracked | Standardwert. Nur anzeigen, wenn der Block erfolgreich verfolgt wird; bei Verlust der Verfolgung ausblenden. |
| VisibleAfterFirstTracked | Einmalig anzeigen, nachdem der Block erfolgreich verfolgt wurde, bleibt sichtbar auch bei späterem Tracking-Verlust. |
| None | Sichtbarkeit wird nicht von der Engine gesteuert, muss vom Entwickler verwaltet werden. |
Nachdem BlockHolder durch Aufruf von holdBlock() einen Blockknoten unter ShadowRoot erstellt hat, kann dessen Sichtbarkeitsstrategie geändert werden.
Wie man die BlockID findet, wird unter Inhalte ohne Annotation einbinden erklärt.
const blockInfo: easyar.BlockInfo = { id: blockId };
blockHolder.holdBlock(blockInfo);
const block = blockHolder.getBlockById(blockInfo.id);
// Strategie ändern: Dauerhaft anzeigen nach erstem Tracking
block.visibleStrategy = BlockVisibleStrategy.VisibleAfterFirstTracked;
Die Standard-VisibleStrategy ist VisibleWhileTracked, d.h. Blockinhalte (inklusive Kindknoten) werden nur angezeigt, wenn der Block von MegaTracker verfolgt wird.
Methoden zur inhaltsbearbeitung und -änderung
Transform von Objekten ändern
Für
Elementin der Szene muss dessen getComponent()-Methode aufgerufen werden, um die entsprechendeComponentfür Änderungen zu erhalten.const xrFrameSystem = wx.getXrFrameSystem(); let transform = model.getComponent(xrFrameSystem.Transform); transform.position.setValue(1.0, 0.0, -1.0); /** Ursprüngliches Quaternion kopieren */ let originalQuaternion = modelTF.quaternion.clone(); /** 180 Grad um Y rotieren */ let targetQuaternion = originalQuaternion.multiply(new xrFrameSystem.Quaternion().setValue(0, 1, 0, 0)); transform.quaternion.setValue(targetQuaternion);In diesem Beispiel holt das Programm die
xrFrameSystem.Transformvonmodelund ändert dessen Position und Rotation.Texturen ersetzen
Vor dem Texturaustausch muss die Texturressource selbst manuell über das Asset-System der xr-frame-Szene mittels loadAsset geladen werden.
Anschließend die
GLTF-Eigenschaft des Modells abrufen und für jedesmeshdessenmaterialdiesetTexture()-Methode aufrufen.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); });Hier lädt das Programm zunächst eine
textureAssetund ersetzt damit die Textur des GLTF-Modells.Registrierte materialien ersetzen
Zum Austausch registrierter Materialien muss zunächst mit dem Asset-System der Szene getAsset() aufgerufen werden, um die Materialressource zu erhalten.
Anschließend die
GLTF-Eigenschaft des Modells abrufen und für jedesmeshdiematerial-Eigenschaft persetDataauf das Zielmaterial setzen.let occlusionMaterial = scene.assets.getAsset("material", "easyar-occlusion"); model.getComponent(xrFrameSystem.GLTF).meshes.forEach((m: any) => { m.setData({ material: occlusionMaterial }); });Dieses Beispiel lädt das von EasyAR registrierte Okklusionsmaterial
easyar-occlusionund weist es dem GLTF-Modell zu.