1.0.13 • Published 3 years ago

react-planetary v1.0.13

Weekly downloads
56
License
-
Repository
-
Last release
3 years ago

#Demo https://react-planetary-earth-example.netlify.app/

Code

-You can find all of the code at https://github.com/Bryce-Soghigian/react-planetary.git

#Author

Key Features

  • v1.11 (current) - Can Import all Planets into your application
    • Can pass props to all of the planets (orbital_controls=bool, size=num rotation etc etc) - Can create your own planets in threejs with my helper functions

How to use

npm i react-planetary || yarn add react-planetary
import {Earth, Uranus, Mars,Venus, Mercury,Moon, Jupiter,Neptune,Saturn} from 'react-planetary/index'
  • then just call the react component
<Earth/>

Helper functions

galaxy_function("Your texture loader","your threeJS scene")

Example

export const galaxy_function = (textureLoader,scene) => {

    let galaxyGeometry = new THREE.SphereGeometry(100, 32, 32);
    let galaxyMaterial = new THREE.MeshBasicMaterial({
      side: THREE.BackSide
    });
    let galaxy = new THREE.Mesh(galaxyGeometry, galaxyMaterial);
    
    // Load Galaxy Textures
    textureLoader.crossOrigin = true;
    textureLoader.load(
      'https://s3-us-west-2.amazonaws.com/s.cdpn.io/141228/starfield.png',
      function(texture) {
        galaxyMaterial.map = texture;
        scene.add(galaxy);
      }
    );
    
  }

Create your own planets with createBasicPlanet

            let exoplanet = createBasicPlanet({
                surface: {
                  size: props.state.pl_radj*0.8 || .2,
                  material: {
                    bumpScale: 0.000,
                    specular: new THREE.Color("grey"),
                    shininess: 10
                  },
                  textures: {
                    map:
                    texture_array[Math.floor(Math.random() * Math.floor(11))],
                    bumpMap:
                      ""
                  }
                }
              });

Example

import React,{useEffect} from 'react'
import {createBasicPlanet,galaxy_function} from 'react-planetary/index'
import * as THREE from 'three'
import "./Main.css"
export default function ThreePlanet(props) {
  useEffect( () => {

      //==========THREEJS Initalization===========
      let renderer = new THREE.WebGLRenderer();//Creating a renderer
      let scene = new THREE.Scene();//Inits a scene
      let camera_aspect = window.innerWidth/400;//width/height
      let cam = new THREE.PerspectiveCamera(45,camera_aspect,0.1,1500)
      let cam_rotation = 0
      let cam_rotation_speed = 0.001;
      let cam_auto_rotation = true;
      //==========Lights=============
      let light = new THREE.HemisphereLight(0xffffff, 0xffffff, 0.6);
      light.color.setHSL(.6,.1,.6)
      light.groundColor.setHSL(.095,1,.75);
      light.position.set(0, 50 , 0)
      scene.add(light)
      let light_helper = new THREE.HemisphereLightHelper(light,10)
      scene.add(light_helper)


      //=========Texture Loader for loading images========
      let textureLoader = new THREE.TextureLoader();
    

      let texture_array = ['https://i.imgur.com/TjU19Pz.jpg',"https://i.imgur.com/UkLEysp.jpg",'https://i.imgur.com/AzMo9RH.jpg',"https://i.imgur.com/iUYEwOc.jpg","https://i.imgur.com/QxHasVS.jpg","https://i.imgur.com/tnBFfhT.jpg","https://i.imgur.com/xu5OXIB.jpg","https://i.imgur.com/qUzuQr6.jpg","https://i.imgur.com/yCk1mZQ.jpg","https://i.imgur.com/xu5OXIB.jpg","https://i.imgur.com/QoPgvz9.png"]

          let exoplanet = createBasicPlanet({
              surface: {
                size: props.state.pl_radj*0.8 || .2,
                material: {
                  bumpScale: 0.000,
                  specular: new THREE.Color("grey"),
                  shininess: 10
                },
                textures: {
                  map:
                  texture_array[Math.floor(Math.random() * Math.floor(11))],
                  bumpMap:
                    ""
                }
              }
            });
      

    



      //===========Galaxy==========
      galaxy_function(textureLoader,scene)

      //========Renderer config===============//
      renderer.setSize(window.innerWidth, 400);
      document.body.appendChild(renderer.domElement);
      cam.position.set(1,1,1)
      scene.add(cam)
      scene.add(exoplanet)
      window.addEventListener("resize", function() {
          cam.aspect = window.innerWidth / 400;
          cam.updateProjectionMatrix();
          renderer.setSize(window.innerWidth, 400);
        });
      //==========Configuration of Exoplanet======
      exoplanet.receiveShadow = true;
      exoplanet.castShadow = true;
      exoplanet.getObjectByName("surface").geometry.center();


      //===========Animation Loop ==============//
      let animate = function() {
          exoplanet.getObjectByName("surface").rotation.y += (1 / 16) * 0.01;
          if (cam_auto_rotation) {
              cam_rotation += cam_rotation_speed
              cam.position.y = 0;
              cam.position.x = 2 * Math.sin(cam_rotation);
              cam.position.z = 2 * Math.cos(cam_rotation);
              cam.lookAt(exoplanet.position);
              requestAnimationFrame(animate)
              renderer.render(scene,cam)
            }
      }
      animate()
      //==========Cleanup our dom=============//
      return () => {
          document.body.removeChild( renderer.domElement );
      };
  },[props])
  return (
      <div id="exoplanet">
          
      </div>
  )
}

Components(version 1.0.0)

  • Note all props are optional
  • Earth (Props: size)

  • Moon (Props size)

  • Mercury (Props: size)
  • Venus (Props: size)
  • Neptune (Props: size)
  • Jupiter (Props: size)
  • Mars (Props: size)

Experiemental Components

  • Uranus
  • Saturn
1.0.13

3 years ago

1.0.12

3 years ago

1.0.11

4 years ago

1.0.10

4 years ago

1.0.9

4 years ago

1.0.8

4 years ago

1.0.7

4 years ago

1.0.6

4 years ago

1.0.5

4 years ago

1.0.4

4 years ago

1.0.2

4 years ago

1.0.3

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago