-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.js
More file actions
109 lines (73 loc) · 2.65 KB
/
main.js
File metadata and controls
109 lines (73 loc) · 2.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import './style.css'
import * as Three from 'three';
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'
const scene = new Three.Scene();
const camera = new Three.PerspectiveCamera(75 , (window.innerWidth) / window.innerHeight, 0.1, 1000);
const renderer = new Three.WebGLRenderer({
canvas: document.querySelector('#bg')
})
renderer.setPixelRatio(window.devicePixelRatio)
renderer.setSize(window.innerWidth, window.innerHeight);
camera.position.setZ(30);
const geometry = new Three.TorusGeometry( 10, 3, 16, 100 );
const material = new Three.MeshStandardMaterial({ color: 0xFF6347});
const torus = new Three.Mesh(geometry, material);
scene.add(torus);
const pointLight = new Three.PointLight(0xffffff);
const ambientLight = new Three.AmbientLight(0xffffff);
pointLight.position.set(20,20,20)
scene.add(pointLight, ambientLight)
const lightHelper = new Three.PointLightHelper(pointLight);
const gridHelper = new Three.GridHelper(200, 50);
scene.add(lightHelper, gridHelper);
const controls = new OrbitControls(camera, renderer.domElement);
function addStar(){
const geometry = new Three.SphereGeometry(0.25, 24, 24);
const material = new Three.MeshStandardMaterial( { color: 0xffffff });
const star = new Three.Mesh(geometry, material);
console.log("add star")
const [x, y, z] = Array(3).fill().map( () => Three.MathUtils.randFloatSpread( 100 ) );
star.position.set(x, y, z);
scene.add(star);
}
Array(200).fill().forEach(addStar)
const textureLoader = new Three.TextureLoader();
const spaceTexture = textureLoader.load('./images/space.jpg');
scene.background = spaceTexture;
const memeTexture = textureLoader.load('./images/meme.png')
const meme = new Three.Mesh(
new Three.BoxGeometry(3, 3, 3),
new Three.MeshBasicMaterial({map: memeTexture})
);
scene.add(meme);
const moonTexture = textureLoader.load('./images/moon.jpg');
const normalTexture = textureLoader.load('./images/normal.jpg');
const moon = new Three.Mesh(
new Three.SphereGeometry(3, 32, 32),
new Three.MeshStandardMaterial({map: moonTexture, normalMap: normalTexture})
);
moon.position.set(10, 0, 0);
scene.add(moon);
function animate(){
requestAnimationFrame(animate);
torus.rotation.x += 0.01;
torus.rotation.y += 0.005;
torus.rotation.z += 0.01;
controls.update();
renderer.render(scene, camera);
}
document.onkeydown = (e) => {
if(e.key === 'w' || e.key === 'W'){
moon.position.z -= 0.5;
}
if(e.key === 's' || e.key === 'S'){
moon.position.z += 0.5;
}
if(e.key === 'a' || e.key === 'A'){
moon.position.x += -0.5;
}
if(e.key === 'd' || e.key === 'D'){
moon.position.x += +0.5;
}
}
animate();