Three.js 悬臂梁动画演示:交互式 3D 模型
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Three.js 悬臂梁动画演示:交互式 3D 模型</title>
<style>
body { margin: 0; }
canvas { display: block; }
</style>
</head>
<body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/110/three.min.js"></script>
<script>
var scene, camera, renderer, pivot, beam;
<pre><code> function init() {
// 创建场景
scene = new THREE.Scene();
// 创建相机
camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
camera.position.z = 5;
// 创建渲染器
renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// 创建悬臂梁
var geometry = new THREE.BoxGeometry(1, 0.1, 0.1);
var material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
beam = new THREE.Mesh(geometry, material);
beam.position.y = -1;
scene.add(beam);
// 创建旋转点
pivot = new THREE.Group();
scene.add(pivot);
pivot.add(beam);
// 添加鼠标事件
document.addEventListener('mousedown', onDocumentMouseDown, false);
document.addEventListener('touchstart', onDocumentTouchStart, false);
document.addEventListener('touchmove', onDocumentTouchMove, false);
// 渲染场景
render();
}
function render() {
requestAnimationFrame(render);
renderer.render(scene, camera);
}
var mouseDown = false, startX, startY;
function onDocumentMouseDown(event) {
event.preventDefault();
mouseDown = true;
startX = event.clientX;
startY = event.clientY;
}
function onDocumentTouchStart(event) {
event.preventDefault();
mouseDown = true;
startX = event.touches[0].clientX;
startY = event.touches[0].clientY;
}
function onDocumentTouchMove(event) {
event.preventDefault();
if (!mouseDown) return;
var deltaX = event.touches[0].clientX - startX;
var deltaY = event.touches[0].clientY - startY;
startX = event.touches[0].clientX;
startY = event.touches[0].clientY;
rotateScene(deltaX, deltaY);
}
function rotateScene(deltaX, deltaY) {
pivot.rotation.y += deltaX * 0.01;
pivot.rotation.x += deltaY * 0.01;
}
init();
</script>
</code></pre>
</body>
</html>
原文地址: https://www.cveoy.top/t/topic/p7Kr 著作权归作者所有。请勿转载和采集!