|
@@ -22,10 +22,8 @@
|
|
|
import { OrbitControls } from './jsm/controls/OrbitControls.js';
|
|
|
|
|
|
var controls, camera, scene, renderer;
|
|
|
- var cameraCube, sceneCube;
|
|
|
var textureEquirec, textureCube;
|
|
|
- var cubeMesh, sphereMesh;
|
|
|
- var sphereMaterial;
|
|
|
+ var sphereMesh, sphereMaterial;
|
|
|
|
|
|
init();
|
|
|
animate();
|
|
@@ -36,12 +34,10 @@
|
|
|
|
|
|
camera = new THREE.PerspectiveCamera( 70, window.innerWidth / window.innerHeight, 1, 100000 );
|
|
|
camera.position.set( 0, 0, 1000 );
|
|
|
- cameraCube = new THREE.PerspectiveCamera( 70, window.innerWidth / window.innerHeight, 1, 100000 );
|
|
|
|
|
|
// SCENE
|
|
|
|
|
|
scene = new THREE.Scene();
|
|
|
- sceneCube = new THREE.Scene();
|
|
|
|
|
|
// Lights
|
|
|
|
|
@@ -50,12 +46,10 @@
|
|
|
|
|
|
// Textures
|
|
|
|
|
|
- var r = 'textures/cube/Bridge2/';
|
|
|
- var urls = [ r + 'posx.jpg', r + 'negx.jpg',
|
|
|
- r + 'posy.jpg', r + 'negy.jpg',
|
|
|
- r + 'posz.jpg', r + 'negz.jpg' ];
|
|
|
+ var loader = new THREE.CubeTextureLoader();
|
|
|
+ loader.setPath( 'textures/cube/Bridge2/' );
|
|
|
|
|
|
- textureCube = new THREE.CubeTextureLoader().load( urls );
|
|
|
+ textureCube = loader.load( [ 'posx.jpg', 'negx.jpg', 'posy.jpg', 'negy.jpg', 'posz.jpg', 'negz.jpg' ] );
|
|
|
textureCube.encoding = THREE.sRGBEncoding;
|
|
|
|
|
|
var textureLoader = new THREE.TextureLoader();
|
|
@@ -64,65 +58,22 @@
|
|
|
textureEquirec.mapping = THREE.EquirectangularReflectionMapping;
|
|
|
textureEquirec.encoding = THREE.sRGBEncoding;
|
|
|
|
|
|
- // Materials
|
|
|
-
|
|
|
- var equirectShader = THREE.ShaderLib[ 'equirect' ];
|
|
|
-
|
|
|
- var equirectMaterial = new THREE.ShaderMaterial( {
|
|
|
- uniforms: THREE.UniformsUtils.clone( equirectShader.uniforms ),
|
|
|
- fragmentShader: equirectShader.fragmentShader,
|
|
|
- vertexShader: equirectShader.vertexShader,
|
|
|
- depthWrite: false,
|
|
|
- side: THREE.BackSide
|
|
|
- } );
|
|
|
-
|
|
|
- equirectMaterial.uniforms[ 'tEquirect' ].value = textureEquirec;
|
|
|
-
|
|
|
- // enable code injection for non-built-in material
|
|
|
- Object.defineProperty( equirectMaterial, 'map', {
|
|
|
-
|
|
|
- get: function () {
|
|
|
-
|
|
|
- return this.uniforms.tEquirect.value;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- } );
|
|
|
-
|
|
|
- var cubeShader = THREE.ShaderLib[ 'cube' ];
|
|
|
-
|
|
|
- var cubeMaterial = new THREE.ShaderMaterial( {
|
|
|
- uniforms: THREE.UniformsUtils.clone( cubeShader.uniforms ),
|
|
|
- fragmentShader: cubeShader.fragmentShader,
|
|
|
- vertexShader: cubeShader.vertexShader,
|
|
|
- depthWrite: false,
|
|
|
- side: THREE.BackSide
|
|
|
- } );
|
|
|
-
|
|
|
- cubeMaterial.envMap = textureCube;
|
|
|
-
|
|
|
- // Skybox
|
|
|
-
|
|
|
- cubeMesh = new THREE.Mesh( new THREE.BoxBufferGeometry( 100, 100, 100 ), cubeMaterial );
|
|
|
- sceneCube.add( cubeMesh );
|
|
|
+ scene.background = textureCube;
|
|
|
|
|
|
//
|
|
|
|
|
|
- var geometry = new THREE.SphereBufferGeometry( 400.0, 48, 24 );
|
|
|
+ var geometry = new THREE.IcosahedronBufferGeometry( 400, 4 );
|
|
|
sphereMaterial = new THREE.MeshLambertMaterial( { envMap: textureCube } );
|
|
|
sphereMesh = new THREE.Mesh( geometry, sphereMaterial );
|
|
|
-
|
|
|
scene.add( sphereMesh );
|
|
|
|
|
|
//
|
|
|
|
|
|
renderer = new THREE.WebGLRenderer();
|
|
|
- renderer.autoClear = false;
|
|
|
renderer.setPixelRatio( window.devicePixelRatio );
|
|
|
renderer.setSize( window.innerWidth, window.innerHeight );
|
|
|
- document.body.appendChild( renderer.domElement );
|
|
|
-
|
|
|
renderer.outputEncoding = THREE.sRGBEncoding;
|
|
|
+ document.body.appendChild( renderer.domElement );
|
|
|
|
|
|
//
|
|
|
|
|
@@ -135,16 +86,16 @@
|
|
|
var params = {
|
|
|
Cube: function () {
|
|
|
|
|
|
- cubeMesh.material = cubeMaterial;
|
|
|
- cubeMesh.visible = true;
|
|
|
+ scene.background = textureCube;
|
|
|
+
|
|
|
sphereMaterial.envMap = textureCube;
|
|
|
sphereMaterial.needsUpdate = true;
|
|
|
|
|
|
},
|
|
|
Equirectangular: function () {
|
|
|
|
|
|
- cubeMesh.material = equirectMaterial;
|
|
|
- cubeMesh.visible = true;
|
|
|
+ scene.background = textureEquirec;
|
|
|
+
|
|
|
sphereMaterial.envMap = textureEquirec;
|
|
|
sphereMaterial.needsUpdate = true;
|
|
|
|
|
@@ -183,9 +134,6 @@
|
|
|
camera.aspect = window.innerWidth / window.innerHeight;
|
|
|
camera.updateProjectionMatrix();
|
|
|
|
|
|
- cameraCube.aspect = window.innerWidth / window.innerHeight;
|
|
|
- cameraCube.updateProjectionMatrix();
|
|
|
-
|
|
|
renderer.setSize( window.innerWidth, window.innerHeight );
|
|
|
|
|
|
}
|
|
@@ -203,9 +151,6 @@
|
|
|
function render() {
|
|
|
|
|
|
camera.lookAt( scene.position );
|
|
|
- cameraCube.rotation.copy( camera.rotation );
|
|
|
-
|
|
|
- renderer.render( sceneCube, cameraCube );
|
|
|
renderer.render( scene, camera );
|
|
|
|
|
|
}
|