Revista Tecnología

Creando una aplicación en Realidad Virtual (VR) y Vista 360° con React VR

Publicado el 03 junio 2017 por Juan Ricardo Castro Lurita @pepoflex

Demo Github

Vamos a construir una aplicación web que va tener un entorno Virtual, es decir en realidad Virtual y podremos tambien mirar los alrededores en una vista de 360° entre otras funcionalidades. Las páginas en Realidad Virtual hacen que el usuario tenga una experiencia diferente. Probablemente sea el futuro de las páginas webs junto con la llamada Web 3.0. En este tutorial aprenderemos a como crear una aplicación básica en Realidad Virtual (VR) con Vista 360°.

Nota: Te aconsejo siempre usar el gestor de linea de comandos de Node JS el NPM – Node Package Manager, para todo este proyecto, es lo más aconsejable según su documentación.

Instalación de Node JS para Gestionar nuestras dependencias

Voy a instalar Node JS para gestionar mis paquetes y dependencias (según la documentación es el que debemos usar, hasta la fecha de creación de este artículo), para ello vamos a su página y  lo descargamos.

Creando una aplicación en Realidad Virtual (VR) y Vista 360° con React VR

Fuente: nodejs.org

Ahora verificamos la versión de Node JS que hemos instalado, con esto compruebo que se ha instalado correctamente Node JS, para ello ejecuto la siguiente instrucción:

node -v
// resultado:
v6.10.1

Instalación de las dependencias para el Proyecto

Primer instalamos el Gestor de líneas de Comandos React VR CLI, ejecutamos:

npm install -g react-vr-cli

// Instalado: 
`-- [email protected]
  `-- [email protected]
    +-- [email protected]
    +-- [email protected]
    +-- [email protected]
    | `-- [email protected]
    +-- [email protected]
    `-- [email protected]

Ahora hago el deployment inicial de mi aplicación con el siguiente comando:

react-vr init miproyectovr

// Resultado
Creating new React VR project...
Project directory created at miproyectovr

Copying assets...

Installing dependencies...

Vista previa de mi Proyecto

Vamos a ver nuestro proyecto en el navegador, para ello ingreso al directorio ‘miproyectovr’ que se ha creado durante el deployment inicial y luego inicio el proyecto:

// ingreso al directorio creado
cd miproyectovr

// luego una ves dentro del directorio arranco mi proyecto con el comando
npm start

Vamos al navegador e ingresamos a la siguiente dirección para ver nuestro proyecto publicado:

http://localhost:8081/vr/

Personalizando mi proyecto

Ahora a mi proyecto le voy a colocar una imagen equirectangular (Fondo) la cual le da un entorno de realidad virtual a 360°, agregare un letrero de bienvenida, 3 botones y un video, podemos ver la imagen a continuación:

Creando una aplicación en Realidad Virtual (VR) y Vista 360° con React VR

Fuente: collectivecloudperu.com

Gestionando la imagen de Fondo y demás archivos

Para modificar la imagen que viene por defecto en mi proyecto ingreso a la carpeta llamada ‘static_assets’ aquí debo de agregar el fondo del proyecto, unaimagen equirectangular, asimismo voy a tener que colocar todos mis archivos multimedia y otros que creamos que deban de verse públicamente en este directorio, este directorio es como la carpeta publica por default en React VR.

Yo agregare mis archivos:

  • bj.jpg
  • sonido.mp3
  • video.mp4

Son los archivos que usare en este proyecto.

Agregando el código

Primero importare las dependencias necesarias para este proyecto:

import React from 'react';
import {
  AppRegistry,
  asset,
  Pano,
  Text,
  VrButton,
  View,
  Image,
  Box,
  Cylinder,
  CylindricalPanel,
  Sound,
  NativeModules,
  Video,
  MediaPlayerState,
  VideoControl,
} from 'react-vr';

Con la siguiente función le digo que me cargue el video automáticamente y sin silenciar el audio:

constructor(props) {
      super(props);
      this.state = {
      playerState: new MediaPlayerState({autoPlay: true, muted: false}),
    };
  }

Creo el letrero de bienvenida:

<Text
          style={{
            backgroundColor: '#305b8e',
            fontSize: 0.8,
            fontWeight: '400',
            layoutOrigin: [0.5, 3.5],
            paddingLeft: 0.2,
            paddingRight: 0.2,
            textAlign: 'center',
            textAlignVertical: 'center',
            transform: [{translate: [0, 0, -7]}],
            borderRadius: 0.1,
          }}>           
            Bienvenido
</Text>

Muestro el video en formato MP4:

<Video 
          style={{
            transform: [{translate: [0, 0, -7]}],
            width: 7.0, 
            height: 3.6,
            layoutOrigin: [0.5, 0.9],
          }} 
          source={{uri: '../static_assets/video.mp4'}}
          playerState={this.state.playerState} />

          <VideoControl
            style={{height: 0.2, width: 4}}
            playerState={this.state.playerState}
          />

Crea el botón para que al hacer click nos envíe a una determinada URL que le especifiquemos:

<VrButton
          style={{width: 1.7,transform: [{translate: [0, 0, -7]}],layoutOrigin: [1.65, 7.9],backgroundColor: '#444444',borderRadius: 0.1,}}
          onClick={() => NativeModules.LinkingManager.openURL('http://collectivecloudperu.com/')}>
          <Text
            style={{              
              fontSize: 0.3,
              fontWeight: '400',              
              paddingLeft: 0.2,
              paddingRight: 0.2,
              textAlign: 'center',
              textAlignVertical: 'center',
            }}>           
              Home
          </Text>
        </VrButton>

Bien también React VR nos da la posibilidad de agregar figuras Geométricas y otros elementos, yo agregare una caja y un cilindro:

<Box
          dimWidth={2}
          dimDepth={2}
          dimHeight={1}
          style={{
            color: '#444444',
          }}
        />

        <Cylinder
          radiusTop={0.2}
          radiusBottom={0.2}
          dimHeight={2}
          segments={12}
        />

Puedes agregar más elementos solo revisa la documentación oficial de React VR con paciencia y mesura.

Código completo

import React from 'react';
import {
  AppRegistry,
  asset,
  Pano,
  Text,
  VrButton,
  View,
  Image,
  Box,
  Cylinder,
  CylindricalPanel,
  Sound,
  NativeModules,
  Video,
  MediaPlayerState,
  VideoControl,
} from 'react-vr';

export default class MiproyectoVR extends React.Component {

  constructor(props) {
      super(props);
      this.state = {
      playerState: new MediaPlayerState({autoPlay: true, muted: false}),
    };
  }

  render() {
    return (
      <View>
        {/*
        <Sound
          source={{
           mp3: asset('sonido.mp3'),
          }}
          autoPlay={false}
        />
        */}

        <Pano source={asset('bg.jpg')} />

        {/*
        <VrButton
          style={{width: 0.7,transform: [{translate: [0, 0, -3]}],layoutOrigin: [0.5, 0.9],}}
          onClick={() => NativeModules.LinkingManager.openURL('http://google.com/')}>
          <Image style={{width:1, height:1}}
            source={asset('fp.jpg')}
            inset={[0.2,0.2,0.2,0.2]}
            insetSize={[0.05,0.45,0.55,0.15]} >
          </Image>
        </VrButton>
        */}

        <Text
          style={{
            backgroundColor: '#305b8e',
            fontSize: 0.8,
            fontWeight: '400',
            layoutOrigin: [0.5, 3.5],
            paddingLeft: 0.2,
            paddingRight: 0.2,
            textAlign: 'center',
            textAlignVertical: 'center',
            transform: [{translate: [0, 0, -7]}],
            borderRadius: 0.1,
          }}>           
            Bienvenido
        </Text>

        <Video 
          style={{
            transform: [{translate: [0, 0, -7]}],
            width: 7.0, 
            height: 3.6,
            layoutOrigin: [0.5, 0.9],
          }} 
          source={{uri: '../static_assets/video.mp4'}}
          playerState={this.state.playerState} />

          <VideoControl
            style={{height: 0.2, width: 4}}
            playerState={this.state.playerState}
          />

        <VrButton
          style={{width: 1.7,transform: [{translate: [0, 0, -7]}],layoutOrigin: [1.65, 7.9],backgroundColor: '#444444',borderRadius: 0.1,}}
          onClick={() => NativeModules.LinkingManager.openURL('http://collectivecloudperu.com/')}>
          <Text
            style={{              
              fontSize: 0.3,
              fontWeight: '400',              
              paddingLeft: 0.2,
              paddingRight: 0.2,
              textAlign: 'center',
              textAlignVertical: 'center',
            }}>           
              Home
          </Text>
        </VrButton>

        <VrButton
          style={{width: 1.7,transform: [{translate: [0, 0, -7]}],layoutOrigin: [0.5, 8.9],backgroundColor: '#444444',borderRadius: 0.1,}}
          onClick={() => NativeModules.LinkingManager.openURL('http://collectivecloudperu.com/team.php')}>
          <Text
            style={{              
              fontSize: 0.3,
              fontWeight: '400',              
              paddingLeft: 0.2,
              paddingRight: 0.2,
              textAlign: 'center',
              textAlignVertical: 'center',
            }}>           
              Nosotros
          </Text>
        </VrButton>

        <VrButton
          style={{width: 1.7,transform: [{translate: [0, 0, -7]}],layoutOrigin: [-0.65, 9.9],backgroundColor: '#444444',borderRadius: 0.1,}}
          onClick={() => NativeModules.LinkingManager.openURL('http://collectivecloudperu.com/contacts.php')}>
          <Text
            style={{              
              fontSize: 0.3,
              fontWeight: '400',              
              paddingLeft: 0.2,
              paddingRight: 0.2,
              textAlign: 'center',
              textAlignVertical: 'center',
            }}>           
              Contacto
          </Text>
        </VrButton>

        <Box
          dimWidth={2}
          dimDepth={2}
          dimHeight={1}
          style={{
            color: '#444444',
          }}
        />

        <Cylinder
          radiusTop={0.2}
          radiusBottom={0.2}
          dimHeight={2}
          segments={12}
        />


      </View>     


    );
  }


};

AppRegistry.registerComponent('MiproyectoVR', () => MiproyectoVR);

Compilando nuestro proyecto

Ejecutamos el siguiente comando para compilar nuestro proyecto:

npm run bundle

Nos crea carpeta llamada ‘vr’ que contiene los archivos de nuestro proyecto.

Asimismo estos proyectos se pueden ver también en dispositivos móviles y lentes de realidad virtual increíble cierto ?

Bien eso es todo espero que les sirva de mucho y puedan implementar React VR en sus proyectos.


Volver a la Portada de Logo Paperblog