From 06b553a782ceda66ca1817be7f651d1451696577 Mon Sep 17 00:00:00 2001 From: Evan Bacon Date: Thu, 14 May 2020 09:24:50 -0700 Subject: [PATCH] Created three.js example --- with-three/App.tsx | 86 +++++++++++++++++++++++++++++++++++++ with-three/README.md | 20 +++++++++ with-three/babel.config.js | 6 +++ with-three/icon.jpg | Bin 0 -> 26606 bytes with-three/package.json | 20 +++++++++ with-three/tsconfig.json | 11 +++++ 6 files changed, 143 insertions(+) create mode 100644 with-three/App.tsx create mode 100644 with-three/README.md create mode 100644 with-three/babel.config.js create mode 100644 with-three/icon.jpg create mode 100644 with-three/package.json create mode 100644 with-three/tsconfig.json diff --git a/with-three/App.tsx b/with-three/App.tsx new file mode 100644 index 0000000..9738b68 --- /dev/null +++ b/with-three/App.tsx @@ -0,0 +1,86 @@ +import { ExpoWebGLRenderingContext, GLView } from "expo-gl"; +import { Renderer, TextureLoader } from "expo-three"; +import * as React from "react"; +import { + AmbientLight, + BoxBufferGeometry, + Fog, + GridHelper, + Mesh, + MeshStandardMaterial, + PerspectiveCamera, + PointLight, + Scene, + SpotLight, +} from "three"; + +export default function App() { + let timeout; + + React.useEffect(() => { + // Clear the animation loop when the component unmounts + return () => clearTimeout(timeout); + }, []); + + const onContextCreate = async (gl: ExpoWebGLRenderingContext) => { + const { drawingBufferWidth: width, drawingBufferHeight: height } = gl; + const sceneColor = 0x6ad6f0; + + // Create a WebGLRenderer without a DOM element + const renderer = new Renderer({ gl }); + renderer.setSize(width, height); + renderer.setClearColor(sceneColor); + + const camera = new PerspectiveCamera(70, width / height, 0.01, 1000); + camera.position.set(2, 5, 5); + + const scene = new Scene(); + scene.fog = new Fog(sceneColor, 1, 10000); + scene.add(new GridHelper(10, 10)); + + const ambientLight = new AmbientLight(0x101010); + scene.add(ambientLight); + + const pointLight = new PointLight(0xffffff, 2, 1000, 1); + pointLight.position.set(0, 200, 200); + scene.add(pointLight); + + const spotLight = new SpotLight(0xffffff, 0.5); + spotLight.position.set(0, 500, 100); + spotLight.lookAt(scene.position); + scene.add(spotLight); + + const cube = new IconMesh(); + scene.add(cube); + + camera.lookAt(cube.position); + + function update() { + cube.rotation.y += 0.05; + cube.rotation.x += 0.025; + } + + // Setup an animation loop + const render = () => { + timeout = requestAnimationFrame(render); + update(); + renderer.render(scene, camera); + gl.endFrameEXP(); + }; + render(); + }; + + return ; +} + +class IconMesh extends Mesh { + constructor() { + super( + new BoxBufferGeometry(1.0, 1.0, 1.0), + new MeshStandardMaterial({ + map: new TextureLoader().load(require("./icon.jpg")), + // color: 0xff0000 + }) + ); + } +} diff --git a/with-three/README.md b/with-three/README.md new file mode 100644 index 0000000..824aa4d --- /dev/null +++ b/with-three/README.md @@ -0,0 +1,20 @@ +# Three.js Example + +

+ + Supports Expo iOS + + Supports Expo Android + + Supports Expo Web +

+ +## 🚀 How to use + +- Install with `yarn` or `npm install`. +- Run [`expo start`](https://docs.expo.io/versions/latest/workflow/expo-cli/), try it out. + +## 📝 Notes + +- [Expo GL docs](https://docs.expo.io/versions/latest/sdk/gl-view/) +- [Three.js docs](https://threejs.org/docs/index.html#manual/en/introduction/Creating-a-scene) diff --git a/with-three/babel.config.js b/with-three/babel.config.js new file mode 100644 index 0000000..2900afe --- /dev/null +++ b/with-three/babel.config.js @@ -0,0 +1,6 @@ +module.exports = function(api) { + api.cache(true); + return { + presets: ['babel-preset-expo'], + }; +}; diff --git a/with-three/icon.jpg b/with-three/icon.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e6c0d5f214a25ce284c4a3cce5b416b034977e08 GIT binary patch literal 26606 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 NvlPH@{&(>8{{VM