Giter Club home page Giter Club logo

react-native-ar's Introduction

react-native-ar-viewer

npm version

AR viewer for react native that uses Sceneform on Android and ARKit on iOS

Installation

npm install react-native-ar-viewer

Android

Required AR features:

  • Add the following to your AndroidManifest.xml:
<meta-data android:name="com.google.ar.core" android:value="required" tools:replace="android:value" />
  • If you already have <meta-data android:name="com.google.ar.core" android:value="required" /> don't forget to add the tools:replace="android:value" attribute.

  • Check that your <manifest> tag contains xmlns:tools="http://schemas.android.com/tools" attribute.

iOS

  • Remember to add NSCameraUsageDescription entry in your Info.plist with a text explaining why you request camera permission.

  • In XCode file tree, go to Pods > Development pods > react-native-ar-viewer, right-click on "Add Files to Pods"... Then select the environment.skybox folder in your node_modules/react-native-ar-viewer/ios folder. In add file window, check "react-native-ar-viewer-ARViewerBundle". It should appear with a blue icon on the file tree. Check if res.hdr is present inside, if not, add it manually. It should look like that:

File formats

The viewer only supports USDZ files for iOS and GLB for Android. Other formats may work, but are not officialy supported.

Usage

You should download your model locally using for example React Native File System in order to run the viewer on iOS. Android supports natively file URL (https:// instead of file://)

import { ArViewerView } from "react-native-ar-viewer";
import { Platform } from 'react-native';
// ...

<ArViewerView 
    style={{flex: 1}}
    model={Platform.OS === 'android' ? 'dice.glb' : 'dice.usdz'}
    lightEstimation
    manageDepth
    allowRotate
    allowScale
    allowTranslate
    disableInstantPlacement
    onStarted={() => console.log('started')}
    onEnded={() => console.log('ended')}
    onModelPlaced={() => console.log('model displayed')}
    onModelRemoved={() => console.log('model not visible anymore')}
    planeOrientation="both" />

Props

Prop Type Description Required
model string Enables ambient light estimation (see below) Yes
lightEstimation bool Enables ambient light estimation (see below) No
manageDepth bool Enables depth estimation and occlusion (only iOS, see below) No
allowRotate bool Allows to rotate model No
allowScale bool Allows to scale model No
allowTranslate bool Allows to translate model No
disableInstructions bool Disables instructions view No
disableInstantPlacement bool Disables placement on load No
planeOrientation "horizontal", "vertical", "both" or "none" Sets plane orientation (default: both) No

lightEstimation:

With Without

manageDepth:

With Without

Others:

allowRotate allowScale planeOrientation: both

Events

Prop Parameter Description
onStarted none Triggers on AR session started
onEnded none Triggers on AR session ended
onModelPlaced none Triggers when model is placed
onModelRemoved none Triggers when model is removed
onError { message: string } Triggers on any error and returns an object containing the error message

Commands

Commands are sent using refs like the following example:

  // ...
  const ref = React.useRef() as React.MutableRefObject<ArViewerView>;
  
  const reset = () => {
    ref.current?.reset();
  };
  
  return (
    <ArViewerView
      model={yourModel}
      ref={ref} />
  );
  // ...
Command Args Return Description
reset() none void Removes model from plane
rotate() x, y, z void Manually rotates the model using yaw as x, pitch as y and roll as z in degrees
takeScreenshot() none Promise<String> Takes a screenshot of the current view (camera + model) and returns a base64 jpeg string as a promise

Contributing

See the contributing guide to learn how to contribute to the repository and the development workflow.

License

MIT

react-native-ar's People

Contributors

paragspacetotech avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.