基本信息
源码名称:基于Three.js的3D全景实现
源码大小:0.36M
文件格式:.rar
开发语言:js
更新时间:2017-07-01
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 5 元×
微信扫码支付:5 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
基于Three.js的3D全景实现
基于Three.js的3D全景实现
<!DOCTYPE html> <!-- saved from url=(0072)http://mrdoob.github.com/three.js/examples/canvas_geometry_panorama.html --> <html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>three.js canvas - panorama demo</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"> <style> body { background-color: rgb(200,200,200); margin: 0px; overflow: hidden; } #info { position: absolute; top: 0px; width: 100%; color: #ffffff; padding: 5px; font-family:Monospace; font-size:13px; font-weight: bold; text-align:center; } a { color: #ffffff; } </style> </head> <body> <div id="container"><canvas width="1024" height="34"></canvas></div> <div id="info"><a href="http://github.com/mrdoob/three.js" target="_blank">three.js</a> - panorama demo. cubemap by <a href="http://www.zfight.com/" target="_blank">Jochum Skoglund</a>.</div> <script src="./images/js/Three.js"></script> <script> var camera, scene, renderer; var texture_placeholder, isUserInteracting = false, onMouseDownMouseX = 0, onMouseDownMouseY = 0, lon = 90, onMouseDownLon = 0, lat = 0, onMouseDownLat = 0, phi = 0, theta = 0, target = new THREE.Vector3(); init(); function init() { var container, mesh; container = document.getElementById( 'container' ); camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 1, 1100 ); scene = new THREE.Scene(); scene.add( camera ); texture_placeholder = document.createElement( 'canvas' ); texture_placeholder.width = 128; texture_placeholder.height = 128; var context = texture_placeholder.getContext( '2d' ); context.fillStyle = 'rgb( 200, 200, 200 )'; context.fillRect( 0, 0, texture_placeholder.width, texture_placeholder.height ); var materials = [ loadTexture( 'images/textures/cube/skybox/px.jpg' ), // right loadTexture( 'images/textures/cube/skybox/nx.jpg' ), // left loadTexture( 'images/textures/cube/skybox/py.jpg' ), // top loadTexture( 'images/textures/cube/skybox/ny.jpg' ), // bottom loadTexture( 'images/textures/cube/skybox/pz.jpg' ), // back loadTexture( 'images/textures/cube/skybox/nz.jpg' ) // front ]; mesh = new THREE.Mesh( new THREE.CubeGeometry( 300, 300, 300, 7, 7, 7, materials ), new THREE.MeshFaceMaterial() ); mesh.scale.x = - 1; scene.add( mesh ); renderer = new THREE.CanvasRenderer(); renderer.setSize( window.innerWidth, window.innerHeight ); container.appendChild( renderer.domElement ); document.addEventListener( 'mousedown', onDocumentMouseDown, false ); document.addEventListener( 'mousemove', onDocumentMouseMove, false ); document.addEventListener( 'mouseup', onDocumentMouseUp, false ); document.addEventListener( 'mousewheel', onDocumentMouseWheel, false ); document.addEventListener( 'touchstart', onDocumentTouchStart, false ); document.addEventListener( 'touchmove', onDocumentTouchMove, false ); } function loadTexture( path ) { var texture = new THREE.Texture( texture_placeholder ); var material = new THREE.MeshBasicMaterial( { map: texture, overdraw: true } ); var image = new Image(); image.onload = function () { texture.needsUpdate = true; material.map.image = this; render(); }; image.src = path; return material; } function onDocumentMouseDown( event ) { event.preventDefault(); isUserInteracting = true; onPointerDownPointerX = event.clientX; onPointerDownPointerY = event.clientY; onPointerDownLon = lon; onPointerDownLat = lat; } function onDocumentMouseMove( event ) { if ( isUserInteracting ) { lon = ( onPointerDownPointerX - event.clientX ) * 0.1 onPointerDownLon; lat = ( event.clientY - onPointerDownPointerY ) * 0.1 onPointerDownLat; render(); } } function onDocumentMouseUp( event ) { isUserInteracting = false; render(); } function onDocumentMouseWheel( event ) { camera.fov -= event.wheelDeltaY * 0.05; camera.updateProjectionMatrix(); render(); } function onDocumentTouchStart( event ) { if ( event.touches.length == 1 ) { event.preventDefault(); onPointerDownPointerX = event.touches[ 0 ].pageX; onPointerDownPointerY = event.touches[ 0 ].pageY; onPointerDownLon = lon; onPointerDownLat = lat; } } function onDocumentTouchMove( event ) { if ( event.touches.length == 1 ) { event.preventDefault(); lon = ( onPointerDownPointerX - event.touches[0].pageX ) * 0.1 onPointerDownLon; lat = ( event.touches[0].pageY - onPointerDownPointerY ) * 0.1 onPointerDownLat; render(); } } function render() { lat = Math.max( - 85, Math.min( 85, lat ) ); phi = ( 90 - lat ) * Math.PI / 180; theta = lon * Math.PI / 180; target.x = 500 * Math.sin( phi ) * Math.cos( theta ); target.y = 500 * Math.cos( phi ); target.z = 500 * Math.sin( phi ) * Math.sin( theta ); camera.lookAt( target ); renderer.render( scene, camera ); } </script> </body></html>