|
<!DOCTYPE html> |
|
<html lang="en"> |
|
<head> |
|
<meta charset="UTF-8"> |
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|
<title>GLB Model Viewer</title> |
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script> |
|
<script src="https://cdn.jsdelivr.net/npm/three/examples/js/loaders/GLTFLoader.js"></script> |
|
<script src="https://cdn.jsdelivr.net/npm/three/examples/js/controls/OrbitControls.js"></script> |
|
<script src="https://cdn.jsdelivr.net/npm/three/examples/js/loaders/RGBELoader.js"></script> |
|
<style> |
|
body { margin: 0; } |
|
canvas { display: block; } |
|
</style> |
|
</head> |
|
<body> |
|
<script> |
|
let scene, camera, renderer, controls; |
|
|
|
function init() { |
|
scene = new THREE.Scene(); |
|
camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); |
|
camera.position.set(0, 2, 5); |
|
|
|
renderer = new THREE.WebGLRenderer({ antialias: true }); |
|
renderer.setSize(window.innerWidth, window.innerHeight); |
|
renderer.toneMapping = THREE.ACESFilmicToneMapping; |
|
renderer.toneMappingExposure = 1; |
|
document.body.appendChild(renderer.domElement); |
|
|
|
controls = new THREE.OrbitControls(camera, renderer.domElement); |
|
controls.enableDamping = true; |
|
controls.dampingFactor = 0.05; |
|
controls.screenSpacePanning = false; |
|
controls.minDistance = 1; |
|
controls.maxDistance = 10; |
|
|
|
|
|
const rgbeLoader = new THREE.RGBELoader(); |
|
rgbeLoader.load('https://threejs.org/examples/textures/equirectangular/royal_esplanade_1k.hdr', function (texture) { |
|
texture.mapping = THREE.EquirectangularReflectionMapping; |
|
scene.environment = texture; |
|
scene.background = texture; |
|
}); |
|
|
|
|
|
const light = new THREE.DirectionalLight(0xffffff, 10); |
|
light.position.set(5, 10, 5); |
|
scene.add(light); |
|
|
|
const ambientLight = new THREE.AmbientLight(0x404040, 10); |
|
scene.add(ambientLight); |
|
|
|
const loader = new THREE.GLTFLoader(); |
|
loader.load('attack_drone_scifi.glb', function (gltf) { |
|
let model = gltf.scene; |
|
model.scale.set(2, 2, 2); |
|
model.position.y = 0; |
|
scene.add(model); |
|
}, undefined, function (error) { |
|
console.error('An error happened', error); |
|
}); |
|
|
|
window.addEventListener('resize', () => { |
|
camera.aspect = window.innerWidth / window.innerHeight; |
|
camera.updateProjectionMatrix(); |
|
renderer.setSize(window.innerWidth, window.innerHeight); |
|
}); |
|
} |
|
|
|
function animate() { |
|
requestAnimationFrame(animate); |
|
controls.update(); |
|
renderer.render(scene, camera); |
|
} |
|
|
|
init(); |
|
animate(); |
|
</script> |
|
</body> |
|
</html> |
|
|