XR8.addCameraPipelineModule()
XR8.addCameraPipelineModule(module)
Description
les applications de caméra 8th Wall sont construites à l'aide d'un module de pipeline de caméra. Pour une description complète des modules de pipeline de caméras, voir CameraPipelineModule.
Les applications installent des modules qui contrôlent ensuite le comportement de l'application au moment de l'exécution. Un objet module doit avoir une chaîne .name qui est unique dans l'application, et doit ensuite fournir une ou plusieurs méthodes du cycle de vie de la caméra qui seront exécutées au moment approprié dans la boucle d'exécution.
Au cours de l'exécution principale d'une application, chaque image de la caméra suit le cycle suivant :
onBeforeRun
-> onCameraStatusChange
(requesting
-> hasStream
-> hasVideo
| failed
) -> onStart
-> onAttach
-> onProcessGpu
-> onProcessCpu
-> onUpdate
-> onRender
Les modules de caméra doivent mettre en œuvre une ou plusieurs des méthodes de cycle de la caméra suivantes :
Fonction | Description |
---|---|
onAppResourcesLoaded | Appelé lorsque nous avons reçu du serveur les ressources attachées à une application. |
onAttach | Appelé avant la première fois qu'un module reçoit des mises à jour de trames. Il est appelé sur les modules qui ont été ajoutés avant ou après l'exécution du pipeline. |
onBeforeRun | Appelé immédiatement après XR8.run() . Si des promesses sont renvoyées, XR attendra toutes les promesses avant de continuer. |
onCameraStatusChange | Appelé lorsqu'un changement survient lors de la demande d'autorisation de la caméra. |
onCanvasSizeChange | Appelé lorsque le support change de taille. |
onDetach | est appelé après la dernière fois qu'un module reçoit des mises à jour de trames. Cette opération a lieu soit après l'arrêt du moteur, soit après le retrait manuel du module de pipeline, selon ce qui se produit en premier. |
onDeviceOrientationChange | Appelé lorsque l'appareil change d'orientation paysage/portrait. |
onException | Appelé lorsqu'une erreur se produit dans le XR. Appelé avec l'objet d'erreur. |
onPaused | Appelé lorsque XR8.pause() est appelé. |
onProcessCpu | Appelé pour lire les résultats du traitement GPU et renvoyer des données utilisables. |
onProcessGpu | Appelé pour démarrer le traitement GPU. |
onRemove | est appelée lorsqu'un module est retiré du pipeline. |
onRender | Appelé après onUpdate. C'est le moment pour le moteur de rendu d'émettre des commandes de dessin WebGL. Si une application fournit sa propre boucle d'exécution et s'appuie sur XR8.runPreRender() et XR8.runPostRender() , cette méthode n'est pas appelée et tous les rendus doivent être coordonnés par la boucle d'exécution externe. |
onResume | Appelé lorsque XR8.resume() est appelé. |
onStart | Appelé au démarrage du XR. Premier rappel après l'appel de XR8.run() . |
onUpdate | Appelé pour mettre à jour la scène avant le rendu. Les données renvoyées par les modules dans onProcessGpu et onProcessCpu seront présentes en tant que processGpu.modulename et processCpu.modulename où le nom est donné par module.name = "modulename". |
onVideoSizeChange | Appelé lorsque le support change de taille. |
autorisations requises | Les modules peuvent indiquer les fonctionnalités du navigateur dont ils ont besoin et qui peuvent nécessiter des demandes d'autorisation. Elles peuvent être utilisées par le cadre pour demander les autorisations appropriées en cas d'absence, ou pour créer des composants qui demandent les autorisations appropriées avant d'exécuter XR. |
Remarque : les modules de caméra qui implémentent onProcessGpu
ou onProcessCpu
peuvent fournir des données à des étapes ultérieures du pipeline. Cela se fait par le nom du module.
Paramètres
Paramètres | Type | Description |
---|---|---|
module | Objet | L'objet du module. |
Retours
Aucun
Exemple 1 - Module de gestion des autorisations pour les caméras :
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()
}
},
})
Exemple 2 - une application de scan de code QR pourrait être construite comme suit
// Installez un module qui récupère le flux de la caméra sous la forme d'un tableau UInt8.
XR8.addCameraPipelineModule(
XR8.CameraPixelArray.pipelineModule({luminance: true, width: 240, height: 320}))
// Installez un module qui dessine le flux de la caméra sur le support.
XR8.addCameraPipelineModule(XR8.GlTextureRenderer.pipelineModule())
// Créez notre logique d'application personnalisée pour scanner et afficher les codes QR.
XR8.addCameraPipelineModule({
name : 'qrscan',
onProcessCpu : ({processGpuResult}) => {
// CameraPixelArray.pipelineModule() renvoie ces données dans onProcessGpu.
const { pixels, rows, cols, rowBytes } = processGpuResult.camerapixelarray
const { wasFound, url, corners } = findQrCode(pixels, rows, cols, rowBytes)
return { wasFound, url, corners }
},
onUpdate : ({processCpuResult}) => {
// Ces données ont été renvoyées par ce module ('qrscan') dans onProcessCpu
const {wasFound, url, corners } = processCpuResult.qrscan
if (wasFound) {
showUrlAndCorners(url, corners)
}
},
})