Alles über die Frame-Schleife
Recientemente, publiqué la virtuelle RealitätLa Realidad Virtual es un mundo artificial creado por medio de programas informáticos. Un usuario es teléfono celular en este mundo. La sección respectivo del mundo digital creado artificialmente se adapta a los movimientos y puntos de vista del usuario. Al ingresar en la realidad virtual, todos los movimientos del cuerpo pueden ser utilizados para la navegación y la percepción. "Las "gafas de realidad virtual" se usan normalmente como interfaz Plus llega a la web, un PostConcepto de Post¿Qué es un Post?Un Post es todo aquel contenido, sea post, opinión, noticia u otro género, que un autor publica en un blog. Este puede ser de carácter corporativo o meramente ocioso; pero siempre tiene como meta arrojar información o reflejar una idea, al mismo tiempo de facilitar que los usuarios encuentren la web donde se recoge por medio de de buscadores y demás plataformas online.Generalmente, se han Plus que presenta conceptos básicos detrás de la WebXR-Geräte-API. Además proporcioné instrucciones para solicitar, acceder y culminar una sesión de XR.
Este post describe el bucle de tramas, que es un bucle infinito controlado por el usuario-agente en el que el InhaltEl contenido puede ser muy difícil de definir con precisión. Es una definición que se refiere a las declaraciones contenidas en un documento o publicación de cualquier tipo y puede incluir las tecnologías de la información y la comunicación. Esto cubre todos los tipos de medios como imágenes y texto. A parte de esto, en el campo de la optimización de motores de búsqueda, los términos duplicar contenido, contenido único, Plus se dibuja repetidamente en la pantalla. El contenido se dibuja en bloques discretos llamados marcos. La sucesión de fotogramas crea la ilusión de movimiento.
Was ist dieser Artikel nicht?
WebGL y WebGL2 son los únicos medios para representar contenido durante un bucle de cuadro en una aplicación WebXR. Por suerte, muchos marcos proporcionan una capa de abstracción al mismo tiempo de WebGL y WebGL2. Dichos marcos incluyen three.js,
babylonjsy
Playcanvas, Während Ein Rahmen y
Reaccionar 360 están diseñados para interactuar con WebXR.
Este post no es un tutorial de WebGL ni de RahmenEl framework se refiere a una estructura básica subyacente en la ingeniería de software, que sirve al programador como estructura de desarrollo para su programación de apps. Los frameworks se usan principalmente en el desarrollo de software orientado a objetos y en enfoques de desarrollo basados en componentes. Características Un framework incluye los bloques de construcción básicos de un programa y por ende determina el diseño de la estructura básica Plus. Explica los conceptos básicos de un bucle de fotogramas usando la muestra de sesión de realidad virtual inmersiva del Grupo de trabajo web inmersivo (Manifestation,
Quelle). Si desea sumergirse en WebGL o en uno de los marcos, Internet proporciona una lista creciente de posts.
Die Spieler und das Spiel
Cuando trataba de comprender el bucle de cuadros, seguía perdiéndome en los detalles. Hay muchos objetos en juego, y algunos de ellos solo se nombran por propiedades de referencia en otros objetos. Para ayudarte a mantenerlo claro, describiré los objetos, a los que llamo «jugadores». Posteriormente describiré cómo interactúan, a lo que llamo «el juego».
Spieler
XRViewerPose
Una pose es la posición y orientación de algo en el espacio 3D. Tanto los espectadores como los dispositivos de entrada disponen una pose, pero lo que nos preocupa aquí es la pose del espectador. Ambas poses de visor y dispositivo de entrada disponen verwandeln AttributAtributo es una definición que se usa en varios campos de IT. Generalmente, un atributo se usa para describir un fichero o un campo de datos con más detalle. En la programación orientada a objetos, los atributos son una propiedad o característica que se puede asignar a un objeto (elemento). A través el uso de atributos se pueden asignar valores específicos a ciertos items. Áreas de aplicación Las tres áreas Plus que describe su posición como vector y su orientación como un cuaternión relativo al origen. El origen se especifica en función del tipo de espacio de referencia solicitado al llamar XRSession.requestReferenceSpace ().
Los espacios de referencia tardan un poco en explicarse. Los cubro en profundidad en realidad aumentada¿Qué es la realidad aumentada?Tecnología que posibilita la reproducción en pantalla del entorno real captado por una cámara, sobre el que se superpone una capa de contenidos virtuales e interactivos generando una nueva realidad combinada. Plus. La muestra que estoy utilizando como base para este post utiliza un 'lokal' Referenzraum, dh der Ursprung befindet sich zum Zeitpunkt der Sitzungserstellung ohne genau definierten Boden in der Position des Betrachters, und seine genaue Position kann je nach Plattform variieren.
XRView
Una vista corresponde a una cámara que visualiza la escena virtual. Una vista además cuenta con una
verwandeln atributo que describe su posición como vector y su orientación. Estos se proporcionan como un par de vector / cuaternión y como una matriz idéntico, puede utilizar cualquiera de las representaciones dependiendo de cuál se ajuste mejor a su código. Cada vista corresponde a una pantalla o una parte de una pantalla utilizada por un dispositivo para presentar imágenes al espectador. XRView Objekte werden in einem Array von der zurückgegeben XRViewerPose objeto. El número de vistas de la matriz varía. En los dispositivos móviles, una escena de RA cuenta con una vista, que puede o no cubrir la pantalla del dispositivo. Los auriculares suelen tener dos vistas, una para cada ojo.
XRWebGLLayer
Ebenen bieten eine Quelle für Bitmap-Bilder und Beschreibungen, wie diese Bilder auf dem Gerät gerendert werden sollen. Diese Beschreibung erfasst nicht, was dieser Player tut. Ich habe es mir als Vermittler zwischen einem Gerät und einem Gerät vorgestellt
WebGLRenderingContext. MDN vertritt den gleichen Standpunkt und erklärt, dass es eine "Verbindung" zwischen beiden herstellt. Als solches bietet es Zugriff auf die anderen Spieler.
Im Allgemeinen speichern WebGL-Objekte Statusinformationen zum Rendern von 2D- und 3D-Grafiken.
WebGLFramebuffer
Ein Framebuffer liefert Bilddaten an die WebGLRenderingContext. Posteriormente de recuperarlo del XRWebGLLayer, básicamente pásalo a la corriente
WebGLRenderingContext. Abgesehen von einem Anruf bindFramebuffer () (más sobre eso más adelante) nunca accederá a este objeto de forma directa. Básicamente lo pasará del XRWebGLLayer zum WebGLRenderingContext.
XRViewport
Ein Grafikfenster liefert die Koordinaten und Abmessungen eines rechteckigen Bereichs in der WebGLFramebuffer.
WebGLRenderingContext
Un contexto de representación es un punto de acceso programático para un lienzo (el espacio en el que estamos dibujando). Para hacer esto, requiere un WebGLFramebuffer und ein XRViewport.
Note la vinculación entre XRWebGLLayer y WebGLRenderingContext. Einer entspricht dem Gerät des Betrachters und der andere der Webseite.
WebGLFramebuffer y XRViewport Sie gehen von der ersten zur zweiten.

La vinculación entre XRWebGLLayer y WebGLRenderingContext
Das Spiel
Ahora que sabemos quiénes son los jugadores, veamos el juego que juegan. Es un juego que comienza de nuevo con cada fotograma. Recuerde que los fotogramas son parte de un bucle de fotogramas que surge a una velocidad que depende del Hardware-En informática, el término hardware se refiere a cualquier componente de un sistema informático que sea un objeto físico real, al contrario que el software que existe en forma digital. Esto incluye el disco duro y las unidades incorporadas, es decir, todos los componentes que son "duros", de ahí su nombre. Desarrollo El desarrollo del hardware informático comienza con la creación de los primeros ordenadores y tiene su verdadero origen Plus subyacente. Para las aplicaciones de realidad virtual, los fps pueden oscilar entre 60 y 144. AR para Android se ejecuta a 30 fps. Su código no debe hacerse cargo ninguna velocidad de fotogramas en particular.
El procedimiento básico para el bucle de cuadro se ve así:
- Anruf
XRSession.requestAnimationFrame (). En respuesta, el User-AgentEl agente de usuario o agente es el identificador o nombre con el que un programa inicia sesión en el servidor web para solicitar un documento. El nombre se pasa por medio de del encabezado HTTP. Los programas de software y los robots de los motores de búsqueda pueden identificarse con este nombre. El agente de usuario permite ver precisamente cuándo un robot de motor de búsqueda visitó el portal Plus invoca elXRFrameRequestCallback, que usted establece. - Innerhalb Ihrer Rückruffunktion:
- Anruf
XRSession.requestAnimationFrame ()nochmal. - Holen Sie sich die Pose des Betrachters.
- Pass ('Link') die
WebGLFramebuffervon demXRWebGLLayerzumWebGLRenderingContext. - Iterieren Sie über jeden
XRViewObjekt, Abrufen seinerXRViewportvon demXRWebGLLayerund weitergeben anWebGLRenderingContext. - Zeichne etwas in den Framebuffer.
- Anruf
Como los pasos 1 y 2a se trataron en el post anterior, comenzaré en el paso 2b.
Holen Sie sich die Pose des Zuschauers
Probablemente no es necesario decirlo. Para dibujar cualquier cosa en AR o VR, necesito saber dónde está el espectador y hacia dónde está mirando. La posición y la orientación del espectador son proporcionadas por un XRViewerPose-Objekt. Ich bekomme die Pose des Zuschauers, der anruft XRFrame.getViewerPose () im aktuellen Animationsrahmen. Ich übergebe Ihnen den Referenzraum, den ich beim Einrichten der Sitzung erworben habe. Die von diesem Objekt zurückgegebenen Werte beziehen sich immer auf den Referenzbereich, den ich beim Betreten der aktuellen Sitzung angefordert habe. Wie Sie sich vielleicht erinnern, muss ich den aktuellen Referenzraum übergeben, wenn ich die Pose anfordere.
Funktion onXRFrame(hrTime, xrFrame) {
Lassen xrSession = xrFrame.Sitzung;
xrSession.requestAnimationFrame(onXRFrame);
Lassen xrViewerPose = xrFrame.getViewerPose(xrRefSpace);
wenn (xrViewerPose) {
}
}
Hay una pose del espectador que representa la posición general del usuario, dicho de otra forma, la cabeza del espectador o la cámara del teléfono en el caso de un teléfono inteligente. La pose le dice a su aplicación dónde está el espectador. Usos reales de renderizado de imágenes
XRView Objekte, zu denen ich gleich komme.
Antes de continuar, pruebo si la pose del espectador fue devuelta en caso de que el sistema pierda el seguimiento o bloquee la pose por razones de privacidad. El seguimiento es la capacidad del dispositivo XR para comprender dónde está y / o sus dispositivos de entrada en vinculación con el entorno. El seguimiento se puede perder de varias formas y varía según el método utilizado para realizar el seguimiento. A modo de ejemplo, si se usan cámaras en los auriculares o en el teléfono para rastrear, el dispositivo puede perder su capacidad para establecer dónde se encuentra en situaciones con poca luz o sin luz, o si las cámaras están cubiertas.
Un ejemplo de bloqueo de la pose por motivos de privacidad es que si el auricular muestra un cuadro de diálogo de seguridad, como una solicitud de permiso, el BrowserUn navegador (además: browser) es una herramienta informática que te permite ver documentos y datos y navegar por la red. Los navegadores pueden mostrar distintos tipos de recursos de información; principalmente documentos HTML, a pesar de todo, además son posibles otros tipos de archivos y contenido multimedia, como PDF, JPEG, MPEG, GIF o el lenguaje de meta marcado. A través el uso de complementos especiales y la configuración respectivo, los Plus puede dejar de proporcionar poses a la aplicación mientras esto ocurre. Pero ya llamé
XRSession.requestAnimationFrame () de modo que si el sistema puede recuperarse, el bucle de tramas continuará. Caso contrario, el agente de usuario finalizará la sesión y llamará al
Ende Event-Handler.
Ein kleiner Umweg
El paso siguiente necesita objetos creados durante la configuración de la sesión. Recuerde que creé un lienzo y le indiqué que creara un contexto de representación Web GL compatible con XR, que obtuve llamando canvas.getContext (). Todo el dibujo se realiza a través de la APIConcepto de API¿Qué es una API?Una API, siglas de Application Programming Interface o Interfaz de Programación de Apps, es un recopilatorio de código que se puede emplear para que varias apps se comuniquen entre ellas. Es algo que realiza una tarea equivalente a la interfaz de usuario al momento de promover la interacción entre persona y programa, solo que aplicado única y exclusivamente dentro del entorno del software.Aún cuando suene Plus de WebGL, la API de WebGL2 o un marco basado en WebGL como Three.js. Este contexto se pasó al objeto de sesión a través de updateRenderState ()zusammen mit einer neuen Instanz von XRWebGLLayer.
Lassen canvas = Dokument.createElement('canvas');
Lassen webGLRenContext = canvas.getContext('webgl', { xrCompatible: wahr });
xrSession.updateRenderState({
baseLayer: new XRWebGLLayer(xrSession, webGLRenContext)
});
Übergeben Sie den WebGLFramebuffer ('binden')
das XRWebGLLayer stellt einen Framebuffer für die bereit WebGLRenderingContext
Wird speziell für die Verwendung mit WebXR bereitgestellt und überschreibt den Standard-Framebuffer zum Rendern von Kontexten. Dies wird in der Sprache von WebGL als "Bindung" bezeichnet.
Funktion onXRFrame(hrTime, xrFrame) {
Lassen xrSession = xrFrame.Sitzung;
xrSession.requestAnimationFrame(onXRFrame);
Lassen xrViewerPose = xrFrame.getViewerPose(xrRefSpace);
wenn (xrViewerPose) {
Lassen glLayer = xrSession.renderState.baseLayer;
webGLRenContext.bindFramebuffer(webGLRenContext.FRAMEBUFFER, glLayer.framebuffer);
}
}
Durchlaufen Sie jedes XRView-Objekt
Posteriormente de conseguir la pose y vincular el framebuffer, es hora de conseguir las ventanas gráficas. los XRViewerPose enthält ein Array von XRView-Schnittstellen, von denen jede einen Bildschirm oder einen Teil eines Bildschirms darstellt. Sie enthalten Informationen, die zum Rendern von Inhalten erforderlich sind, die für das Gerät und den Betrachter korrekt positioniert sind, z. B. Sichtfeld, Augenbewegung und andere optische Eigenschaften. Als Zwei-Augen-Zeichnung habe ich zwei Ansichten, die ich durchschleife und für jede ein eigenes Bild zeichne.
Al poner en práctica para la realidad aumentada basada en teléfonos, solo tendría una vista, pero todavía usaría un bucle. Aún cuando puede parecer inútil iterar a través de una vista, hacerlo le posibilita tener una única ruta de renderizado para un espectro de experiencias inmersivas. Esta es una diferencia importante entre WebXR y otros sistemas inmersivos.
Funktion onXRFrame(hrTime, xrFrame) {
Lassen xrSession = xrFrame.Sitzung;
xrSession.requestAnimationFrame(onXRFrame);
Lassen xrViewerPose = xrFrame.getViewerPose(xrRefSpace);
wenn (xrViewerPose) {
Lassen glLayer = xrSession.renderState.baseLayer;
webGLRenContext.bindFramebuffer(webGLRenContext.FRAMEBUFFER, glLayer.framebuffer);
zum (Lassen xrView of xrViewerPose.views) {
}
}
}
Übergeben Sie das XRViewport-Objekt an den WebGLRenderingContext
EIN XRView objeto se refiere a lo que se puede observar en una pantalla. Pero para dibujar en esa vista, necesito coordenadas y dimensiones que sean específicas de mi dispositivo. Del mismo modo que con el framebuffer, los solicito al XRWebGLLayer und gib sie weiter
WebGLRenderingContext.
Funktion onXRFrame(hrTime, xrFrame) {
Lassen xrSession = xrFrame.Sitzung;
xrSession.requestAnimationFrame(onXRFrame);
Lassen xrViewerPose = xrFrame.getViewerPose(xrRefSpace);
wenn (xrViewerPose) {
Lassen glLayer = xrSession.renderState.baseLayer;
webGLRenContext.bindFramebuffer(webGLRenContext.FRAMEBUFFER, glLayer.framebuffer);
zum (Lassen xrView of xrViewerPose.views) {
Lassen viewport = glLayer.getViewport(xrView);
webGLRenContext.viewport(viewport.x, viewport.y, viewport.Breite, viewport.Höhe);
}
}
}
Der webGLRenContext
Al escribir este post, tuve un debate con algunos colegas sobre el nombre del webGLRenContext objeto. Los SkripteConcepto de Scripts¿Qué son los Scripts?Los Scripts son fragmentos de código que se usan para dar forma a herramientas tanto en Internet como en el sector de la informática en general. Son una parte crucial del software, puesto que se trata exactamente del código que conforma a una aplicación en su totalidad o a una de sus funciones, como además el que puedes hallar explorando cómo está hecha una web.Desde Plus de muestra y la mayoría del código WebXR básicamente llaman a esta variable gl. Cuando estaba trabajando para saber las muestras, seguía olvidando lo que gl bezogen auf. ich nannte es webGLRenContext um Sie daran zu erinnern, wie Sie erfahren, dass dies ein Beispiel für ist WebGLRenderingContext.
La razón es que utilizar gl posibilita que los nombres de los métodos se parezcan a sus contrapartes en la API de OpenGL ES 2.0, que se usa para crear realidad virtual en lenguajes compilados. Este hecho es obvio si ha escrito aplicaciones de realidad virtual utilizando OpenGL, pero confuso si es absolutamente nuevo en esta tecnología.
Zeichne etwas in den Framebuffer
Si se siente verdaderamente ambicioso, puede utilizar WebGL de forma directa, pero no lo recomiendo. Es mucho más sencillo usar uno de los marcos enumerados en la parte superior.
Fazit
Este no es el final de las actualizaciones o posts de WebXR. Puedes hallar un Referenz für alle Schnittstellen und Mitglieder von WebXR
in MDN. Befolgen Sie für bevorstehende Verbesserungen der Benutzeroberfläche die einzelnen Funktionen unter Chrome-Status.
Foto von JESHOOTS.COM im Unsplash




