当前位置:   article > 正文

Three.js前端3D开发:使用 CSS3DRenderer 渲染全景图

css3drenderer

此实例主要通过使用 THREE.CSS3DRenderer 和 THREE.CSS3DObject,实现以鼠标拖曳方式在天空盒(即模拟人站在真实的空间中)中查看全景图。当浏览器显示页面时,即可使用鼠标拖曳全景图的任一部分查看其他部分,效果分别如图所示。

主要代码如下:

  1. <html><head> <meta charset="UTF-8">
  2. <script src="ThreeJS/three.js"></script>
  3. <script src="ThreeJS/jquery.js"></script>
  4. <script src="ThreeJS/CSS3DRenderer.js"></script>
  5. </head>
  6. <body><center id="myContainer"></center>
  7. <script>
  8. //创建渲染器
  9. var myRenderer=new THREE.CSS3DRenderer();
  10. myRenderer.setSize(window.innerWidth,window.innerHeight);
  11. $('#myContainer')[0].appendChild(myRenderer.domElement);
  12. var myCamera=new THREE.PerspectiveCamera(75,
  13. window.innerWidth/window.innerHeight,1,1000);
  14. var myScene=new THREE.Scene();
  15. var myTarget=new THREE.Vector3();
  16. var myLongitude=90, myLatitude=0;
  17. var myPhi=0, myTheta=0;
  18. //设置天空盒六个面(模拟真实空间)的纹理图像路径、旋转角度、所在位置
  19. var myImages=[
  20. {url:'images/img155.jpg',position:[-512,0,0],rotation:[0,Math.PI/2,0]},
  21. {url:'images/img154.jpg',position:[512,0,0],rotation:[0,-Math.PI/2,0]},
  22. {url:'images/img156.jpg',position:[0,512,0],rotation:[Math.PI/2,0,Math.PI]},
  23. {url:'images/img152.jpg',position:[0,-512,0],
  24. rotation:[-Math.PI/2,0,Math.PI]},
  25. {url:'images/img153.jpg',position:[0,0,512],rotation:[0,Math.PI,0]},
  26. {url:'images/img151.jpg',position:[0,0,-512],rotation:[0,0,0]}];
  27. for(var i=0; i<myImages.length;i++){
  28. var myImage=myImages[i];
  29. //动态创建img元素,并设置其宽度和图像路径
  30. var myElement=document.createElement('img');
  31. myElement.width=1026;
  32. myElement.src=myImage.url;
  33. //根据位置和角度创建CSS3DObject,即天空盒
  34. var myCSS3DObject=new THREE.CSS3DObject(myElement);
  35. myCSS3DObject.position.fromArray(myImage.position);
  36. myCSS3DObject.rotation.fromArray(myImage.rotation);
  37. myScene.add(myCSS3DObject);
  38. }
  39. //渲染天空盒
  40. animate();
  41. function animate(){
  42. requestAnimationFrame(animate);
  43. myLatitude=Math.max(-85,Math.min(85,myLatitude));
  44. myPhi=THREE.MathUtils.degToRad(90-myLatitude);
  45. myTheta=THREE.MathUtils.degToRad(myLongitude);
  46. myTarget.x=Math.sin(myPhi)*Math.cos(myTheta);
  47. myTarget.y=Math.cos(myPhi);
  48. myTarget.z=Math.sin(myPhi)*Math.sin(myTheta);
  49. myCamera.lookAt(myTarget);
  50. myRenderer.render(myScene,myCamera);
  51. }
  52. //添加鼠标事件监听器
  53. document.addEventListener('mousedown', function(e){
  54. e.preventDefault();
  55. document.addEventListener('mousemove',onMouseMove,false);
  56. document.addEventListener('mouseup',onMouseUp,false);
  57. },false);
  58. document.addEventListener('wheel',function(event){
  59. var myFOV=myCamera.fov+event.deltaY*0.05;
  60. myCamera.fov=THREE.MathUtils.clamp(myFOV,10,75);
  61. myCamera.updateProjectionMatrix();
  62. },false);
  63. function onMouseMove(event){
  64. myLongitude-=event.movementX*0.1;
  65. myLatitude+=event.movementY*0.1;
  66. }
  67. function onMouseUp(){
  68. document.removeEventListener('mousemove',onMouseMove);
  69. document.removeEventListener('mouseup',onMouseUp);
  70. }
  71. </script></body></html>

在上面这段代码中,myCSS3DObject= new THREE.CSS3DObject(myElement)语句用于将DOM元素转换为三维对象,然后即可控制该三维对象的 position 和 rotation 属性实现移动和旋转当使用THREE.CSS3DObject 时,通常需要使用THREE.CSS3DRenderer 语句创建染器,而不能使用THREE.WebGLRenderer 语句创建染器。此外需要注意:此实例需要添加 CSS3DRenderer.js文件。

 如需完整实例的源文件,请下载!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/135147
推荐阅读
相关标签
  

闽ICP备14008679号