refactor: remove GSAP dependency and update code structure for improved readability
This commit is contained in:
Generated
-8
@@ -8,9 +8,6 @@ importers:
|
|||||||
|
|
||||||
.:
|
.:
|
||||||
dependencies:
|
dependencies:
|
||||||
gsap:
|
|
||||||
specifier: ~3.12.7
|
|
||||||
version: 3.12.7
|
|
||||||
three:
|
three:
|
||||||
specifier: ^0.174.0
|
specifier: ^0.174.0
|
||||||
version: 0.174.0
|
version: 0.174.0
|
||||||
@@ -355,9 +352,6 @@ packages:
|
|||||||
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
|
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
|
|
||||||
[email protected]:
|
|
||||||
resolution: {integrity: sha512-V4GsyVamhmKefvcAKaoy0h6si0xX7ogwBoBSs2CTJwt7luW0oZzC0LhdkyuKV8PJAXr7Yaj8pMjCKD4GJ+eEMg==}
|
|
||||||
|
|
||||||
[email protected]:
|
[email protected]:
|
||||||
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
|
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
|
||||||
engines: {node: '>=0.12.0'}
|
engines: {node: '>=0.12.0'}
|
||||||
@@ -655,8 +649,6 @@ snapshots:
|
|||||||
[email protected]:
|
[email protected]:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
[email protected]: {}
|
|
||||||
|
|
||||||
[email protected]: {}
|
[email protected]: {}
|
||||||
|
|
||||||
[email protected]:
|
[email protected]:
|
||||||
|
|||||||
+70
-28
@@ -1,71 +1,113 @@
|
|||||||
import * as THREE from 'three'
|
import * as THREE from 'three';
|
||||||
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'
|
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
|
||||||
import { Timer } from 'three/examples/jsm/misc/Timer.js'
|
import { Timer } from 'three/examples/jsm/misc/Timer.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base
|
* Base
|
||||||
*/
|
*/
|
||||||
// Canvas
|
// Canvas
|
||||||
const canvas = document.querySelector('canvas.webgl')
|
const canvas = document.querySelector('canvas.webgl');
|
||||||
|
|
||||||
// Scene
|
// Scene
|
||||||
const scene = new THREE.Scene()
|
const scene = new THREE.Scene();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Object
|
* Object
|
||||||
*/
|
*/
|
||||||
const geometry = new THREE.BoxGeometry(1, 1, 1)
|
const geometry = new THREE.BoxGeometry(1, 1, 1);
|
||||||
const material = new THREE.MeshBasicMaterial({ color: 0xff0000 })
|
const material = new THREE.MeshBasicMaterial({ color: 0xff0000 });
|
||||||
const mesh = new THREE.Mesh(geometry, material)
|
const mesh = new THREE.Mesh(geometry, material);
|
||||||
scene.add(mesh)
|
scene.add(mesh);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sizes
|
* Sizes
|
||||||
*/
|
*/
|
||||||
const sizes = {
|
const sizes = {
|
||||||
width: 800,
|
width: window.innerWidth,
|
||||||
height: 600
|
height: window.innerHeight
|
||||||
}
|
};
|
||||||
|
|
||||||
|
window.addEventListener('resize', () =>
|
||||||
|
{
|
||||||
|
// Update sizes
|
||||||
|
sizes.width = window.innerWidth;
|
||||||
|
sizes.height = window.innerHeight;
|
||||||
|
|
||||||
|
// Update Camera
|
||||||
|
camera.aspect = sizes.width / sizes.height;
|
||||||
|
camera.updateProjectionMatrix();
|
||||||
|
|
||||||
|
// Update Renderer
|
||||||
|
renderer.setSize(sizes.width, sizes.height);
|
||||||
|
renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));
|
||||||
|
});
|
||||||
|
|
||||||
|
window.addEventListener('dblclick', () =>
|
||||||
|
{
|
||||||
|
const fullscreenElement = document.fullscreenElement || document.webkitFullscreenElement;
|
||||||
|
if (!fullscreenElement)
|
||||||
|
{
|
||||||
|
if (canvas.requestFullscreen)
|
||||||
|
{
|
||||||
|
canvas.requestFullscreen();
|
||||||
|
}
|
||||||
|
else if (canvas.webkitRequestFullscreen)
|
||||||
|
{
|
||||||
|
canvas.webkitRequestFullscreen();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (document.exitFullscreen)
|
||||||
|
{
|
||||||
|
document.exitFullscreen();
|
||||||
|
}
|
||||||
|
else if (document.webkitExitFullscreen)
|
||||||
|
{
|
||||||
|
document.webkitExitFullscreen();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Camera
|
* Camera
|
||||||
*/
|
*/
|
||||||
// Base camera
|
// Base camera
|
||||||
const camera = new THREE.PerspectiveCamera(75, sizes.width / sizes.height, 0.1, 100)
|
const camera = new THREE.PerspectiveCamera(75, sizes.width / sizes.height, 0.1, 100);
|
||||||
camera.position.z = 3
|
camera.position.z = 3;
|
||||||
scene.add(camera)
|
scene.add(camera);
|
||||||
|
|
||||||
// Controls
|
// Controls
|
||||||
const controls = new OrbitControls(camera, canvas)
|
const controls = new OrbitControls(camera, canvas);
|
||||||
controls.enableDamping = true
|
controls.enableDamping = true;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Renderer
|
* Renderer
|
||||||
*/
|
*/
|
||||||
const renderer = new THREE.WebGLRenderer({
|
const renderer = new THREE.WebGLRenderer({
|
||||||
canvas: canvas
|
canvas: canvas
|
||||||
})
|
});
|
||||||
renderer.setSize(sizes.width, sizes.height)
|
renderer.setSize(sizes.width, sizes.height);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Animate
|
* Animate
|
||||||
*/
|
*/
|
||||||
const timer = new Timer()
|
const timer = new Timer();
|
||||||
timer.connect(document) // pause otomatis saat tab tidak aktif
|
timer.connect(document); // pause otomatis saat tab tidak aktif
|
||||||
|
|
||||||
const tick = () =>
|
const tick = () =>
|
||||||
{
|
{
|
||||||
timer.update()
|
timer.update();
|
||||||
const elapsedTime = timer.getElapsed()
|
const elapsedTime = timer.getElapsed();
|
||||||
|
|
||||||
// Update controls
|
// Update controls
|
||||||
controls.update()
|
controls.update();
|
||||||
|
|
||||||
// Render
|
// Render
|
||||||
renderer.render(scene, camera)
|
renderer.render(scene, camera);
|
||||||
|
|
||||||
// Call tick again on the next frame
|
// Call tick again on the next frame
|
||||||
window.requestAnimationFrame(tick)
|
window.requestAnimationFrame(tick);
|
||||||
}
|
};
|
||||||
|
|
||||||
tick()
|
tick();
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
* {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
html, body {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.webgl {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user