123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Threejs使用canvas更新纹理</title>
- <style type="text/css">
- html, body {
- margin: 0;
- height: 100%;
- }
- canvas {
- display: block;
- }
- #video{
- position: fixed;
- left:0;
- bottom:0;
- }
- </style>
- </head>
- <body onload="draw();">
- <video id="video" autoplay controls >
- <source src="data/sintel.ogv" type='video/ogg; codecs="theora, vorbis"'>
- <source src="data/sintel.mp4" type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"'>
- </video>
- </body>
- <script src="../build/three.js"></script>
- <script src="js/controls/OrbitControls.js"></script>
- <script src="js/libs/stats.min.js"></script>
- <script src="https://cdn.bootcss.com/dat-gui/0.7.1/dat.gui.min.js"></script>
- <script src="js/Detector.js"></script>
- <script>
- var renderer, camera, scene, gui, light, stats, controls;
- function initRender() {
- renderer = new THREE.WebGLRenderer({antialias: true});
- renderer.setPixelRatio(window.devicePixelRatio);
- renderer.setSize(window.innerWidth, window.innerHeight);
- renderer.setClearColor(0xeeeeee);
- renderer.shadowMap.enabled = true;
- //告诉渲染器需要阴影效果
- document.body.appendChild(renderer.domElement);
- }
- function initCamera() {
- camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000);
- camera.position.set(0, 0, 15 );
- }
- function initScene() {
- scene = new THREE.Scene();
- }
- //初始化dat.GUI简化试验流程
- function initGui() {
- //声明一个保存需求修改的相关数据的对象
- gui = {
- };
- var datGui = new dat.GUI();
- //将设置属性添加到gui当中,gui.add(对象,属性,最小值,最大值)
- }
- function initLight() {
- scene.add(new THREE.AmbientLight(0x444444));
- light = new THREE.DirectionalLight(0xffffff);
- light.position.set(0, 20, 20 );
- light.castShadow = true;
- light.shadow.camera.top = 10;
- light.shadow.camera.bottom = -10;
- light.shadow.camera.left = -10;
- light.shadow.camera.right = 10;
- //告诉平行光需要开启阴影投射
- light.castShadow = true;
- scene.add(light);
- }
- function initModel() {
- //辅助工具
- var helper = new THREE.AxesHelper(50);
- scene.add(helper);
- //添加立方体
- var geometry = new THREE.BoxBufferGeometry( 10, 5, 5 );
- //获取到video对象
- var video = document.querySelector("#video");
- //通过video对象实例化纹理
- var texture = new THREE.VideoTexture(video);
- texture.wrapS = texture.wrapT = THREE.ClampToEdgeWrapping;
- texture.minFilter = THREE.LinearFilter;
- material = new THREE.MeshBasicMaterial( { map: texture } );
- scene.add(new THREE.Mesh(geometry, material));
- }
- //初始化性能插件
- function initStats() {
- stats = new Stats();
- document.body.appendChild(stats.dom);
- }
- function initControls() {
- controls = new THREE.OrbitControls(camera, renderer.domElement);
- //设置控制器的中心点
- //controls.target.set( 0, 5, 0 );
- // 如果使用animate方法时,将此函数删除
- //controls.addEventListener( 'change', render );
- // 使动画循环使用时阻尼或自转 意思是否有惯性
- controls.enableDamping = true;
- //动态阻尼系数 就是鼠标拖拽旋转灵敏度
- //controls.dampingFactor = 0.25;
- //是否可以缩放
- controls.enableZoom = true;
- //是否自动旋转
- controls.autoRotate = false;
- controls.autoRotateSpeed = 0.5;
- //设置相机距离原点的最远距离
- controls.minDistance = 1;
- //设置相机距离原点的最远距离
- controls.maxDistance = 2000;
- //是否开启右键拖拽
- controls.enablePan = true;
- }
- function render() {
- }
- //窗口变动触发的函数
- function onWindowResize() {
- camera.aspect = window.innerWidth / window.innerHeight;
- camera.updateProjectionMatrix();
- renderer.setSize(window.innerWidth, window.innerHeight);
- }
- function animate() {
- //更新控制器
- render();
- //更新性能插件
- stats.update();
- controls.update();
- renderer.render(scene, camera);
- requestAnimationFrame(animate);
- }
- function draw() {
- //兼容性判断
- if (!Detector.webgl) Detector.addGetWebGLMessage();
- initGui();
- initRender();
- initScene();
- initCamera();
- initLight();
- initModel();
- initControls();
- initStats();
- animate();
- window.onresize = onWindowResize;
- }
- </script>
- </html>
|