XR8.addCameraPipelineModule()
XR8.addCameraPipelineModule(modul)
Beschreibung
8th Wall Kameraanwendungen werden mit Hilfe eines Kamera-Pipeline-Modul-Frameworks erstellt. Eine vollständige Beschreibung der Kamera-Pipeline-Module finden Sie unter CameraPipelineModule.
Anwendungen installieren Module, die dann das Verhalten der Anwendung zur Laufzeit steuern. Ein Modulobjekt muss einen .name String haben, die innerhalb der Anwendung eindeutig ist, und sollte dann eine oder mehrere der Lebenszyklusmethoden der Kamera bereitstellen, die an der entsprechenden Stelle in der Laufschleife ausgeführt werden.
Während der Hauptlaufzeit einer Anwendung durchläuft jedes Kamerabild den folgenden Zyklus:
onBeforeRun
-> onCameraStatusChange
(requesting
-> hasStream
-> hasVideo
| failed
) -> onStart
-> onAttach
-> onProcessGpu
-> onProcessCpu
-> onUpdate
-> onRender
Kameramodule sollten eine oder mehrere der folgenden Methoden für den Lebenszyklus einer Kamera implementieren:
Funktion | Beschreibung |
---|---|
onAppResourcesLoaded | Wird aufgerufen, wenn wir die mit einer App verbundenen Ressourcen vom Server erhalten haben. |
onAttach | Wird aufgerufen, bevor ein Modul zum ersten Mal Rahmenaktualisierungen empfängt. Sie wird für Module aufgerufen, die entweder vor oder nach der Ausführung der Pipeline hinzugefügt wurden. |
onBeforeRun | Wird unmittelbar nach XR8.run() aufgerufen. Wenn irgendwelche Versprechen zurückgegeben werden, wartet XR auf alle Versprechen, bevor es weitergeht. |
onCameraStatusChange | Wird aufgerufen, wenn eine Änderung bei der Abfrage der Kamerarechte auftritt. |
onCanvasSizeChange | Wird aufgerufen, wenn sich die Größe der Leinwand ändert. |
onDetach | wird aufgerufen, nachdem ein Modul zum letzten Mal Rahmenaktualisierungen erhalten hat. Dies geschieht entweder, nachdem der Motor abgestellt oder das Modul manuell aus der Pipeline entfernt wurde, je nachdem, was zuerst eintritt. |
onDeviceOrientationChange | Wird aufgerufen, wenn das Gerät die Ausrichtung Querformat/Hochformat ändert. |
onException | Wird aufgerufen, wenn ein Fehler in XR auftritt. Wird mit dem Fehlerobjekt aufgerufen. |
onPaused | Wird aufgerufen, wenn XR8.pause() aufgerufen wird. |
onProcessCpu | Wird aufgerufen, um die Ergebnisse der GPU-Verarbeitung zu lesen und verwertbare Daten zurückzugeben. |
onProcessGpu | Wird aufgerufen, um die GPU-Verarbeitung zu starten. |
onRemove | wird aufgerufen, wenn ein Modul aus der Pipeline entfernt wird. |
onRender | Wird nach onUpdate aufgerufen. Dies ist der Zeitpunkt, an dem die Rendering-Engine alle WebGL-Zeichenbefehle ausgibt. Wenn eine Anwendung ihre eigene Laufschleife bereitstellt und sich auf XR8.runPreRender() und XR8.runPostRender() verlässt, wird diese Methode nicht aufgerufen und das gesamte Rendering muss von der externen Laufschleife koordiniert werden. |
onResume | Wird aufgerufen, wenn XR8.resume() aufgerufen wird. |
onStart | Wird aufgerufen, wenn XR startet. Erster Callback nach XR8.run() wird aufgerufen. |
onUpdate | Wird aufgerufen, um die Szene vor dem Rendern zu aktualisieren. Die von den Modulen in onProcessGpu und onProcessCpu zurückgegebenen Daten werden als processGpu.modulename und processCpu.modulename vorliegen, wobei der Name durch module.name = "modulename" angegeben wird. |
onVideoSizeChange | Wird aufgerufen, wenn sich die Größe der Leinwand ändert. |
requiredPermissions | Module können angeben, welche Browserfunktionen sie benötigen, für die möglicherweise Berechtigungsanfragen erforderlich sind. Diese können vom Framework verwendet werden, um die entsprechenden Berechtigungen anzufordern, wenn sie nicht vorhanden sind, oder um Komponenten zu erstellen, die die entsprechenden Berechtigungen anfordern, bevor XR ausgeführt wird. |
Hinweis: Kameramodule, die onProcessGpu
oder onProcessCpu
implementieren, können Daten an nachfolgende Stufen der Pipeline liefern. Dies geschieht über den Namen des Moduls.
Parameter
Parameter | Typ | Beschreibung |
---|---|---|
module | Objekt | Das Modulobjekt. |
Returns
Keine
Beispiel 1 - Ein Kamera-Pipeline-Modul zur Verwaltung von Kamerazulassungen:
XR8.addCameraPipelineModule({
name: 'camerastartupmodule',
onCameraStatusChange: ({status}) {
if (status == 'requesting') {
myApplication.showCameraPermissionsPrompt()
} else if (status == 'hasStream') {
myApplication.dismissCameraPermissionsPrompt()
} else if (status == 'hasVideo') {
myApplication.startMainApplictation()
} else if (status == 'failed') {
myApplication.promptUserToChangeBrowserSettings()
}
},
})
Beispiel 2 - eine Anwendung zum Scannen von QR-Codes könnte wie folgt aufgebaut sein
// Installieren Sie ein Modul, das den Kamerafeed als UInt8Array abruft.
XR8.addCameraPipelineModule(
XR8.CameraPixelArray.pipelineModule({luminance: true, width: 240, height: 320}))
// Installieren Sie ein Modul, das den Kamerafeed auf die Leinwand zeichnet.
XR8.addCameraPipelineModule(XR8.GlTextureRenderer.pipelineModule())
// Erstellen Sie unsere eigene Anwendungslogik zum Scannen und Anzeigen von QR-Codes.
XR8.addCameraPipelineModule({
name: 'qrscan',
onProcessCpu: ({processGpuResult}) => {
// CameraPixelArray.pipelineModule() liefert diese in onProcessGpu.
const { pixels, rows, cols, rowBytes } = processGpuResult.camerapixelarray
const { wasFound, url, corners } = findQrCode(pixels, rows, cols, rowBytes)
return { wasFound, url, corners }
},
onUpdate: ({processCpuResult}) => {
// Diese wurden von diesem Modul ('qrscan') in onProcessCpu zurückgegeben
const {wasFound, url, corners } = processCpuResult.qrscan
if (wasFound) {
showUrlAndCorners(url, corners)
}
},
})