<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>07_动画纹理</title>
<script src="../js/three.js"></script>
</head>
<body>
<script>
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(40, window.innerWidth / window.innerHeight, 0.1, 1000); // 透视投影相机
var renderer = new THREE.WebGLRenderer({
antialias: true
});
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
var light = new THREE.DirectionalLight(0xffffff); // 平行光
light.position.set(10, 10, 10).normalize();
scene.add(light);
// 视频
var video = document.createElement('video');
video.src = "../video/sintel.webm";
video.autoplay = true;
video.muted = true;
video.loop = true;
video.load();
video.play();
// 视频每一帧
var videoImage = document.createElement('canvas');
videoImage.width = 320;
videoImage.height = 300;
videoImageContext = videoImage.getContext('2d');
videoImageContext.fillStyle = '#000000';
videoImageContext.fillRect(0, 0, videoImage.width, videoImage.height);
// 贴图
var videoTexture = new THREE.Texture(videoImage);
var geometry = new THREE.BoxGeometry(30, 30, 30);
var material = new THREE.MeshBasicMaterial({ map: videoTexture });
var box = new THREE.Mesh(geometry, material);
scene.add(box);
camera.position.set(0, 0, 100);
camera.lookAt(0, 0, 0);
var render = function () {
box.rotation.x += 0.01;
box.rotation.y += 0.01;
if (video.readyState === video.HAVE_ENOUGH_DATA) {
videoImageContext.drawImage(video, 0, 0);
if (videoTexture)
videoTexture.needsUpdate = true;
}
renderer.render(scene, camera);
requestAnimationFrame(render);
}
render();
</script>
</body>
</html>
07、动画纹理
创建日期:2024-06-21
更新日期:2025-01-12
简介
一个来自三线小城市的程序员开发经验总结。