上篇文章前端如何实现一个图片覆盖的球体,我们借助three.js实现了一个3D的旋转球体。这篇文章我们稍微改造下代码,实现一个全景图片预览示例。
本文会使用three.js
以及插件来实现3种demo
??启动项目需要静态服务器??
以下示例只展示关键代码,完整代理去仓库查看即可
//globe
var width = window.innerWidth;
var height = window.innerHeight;
const textureLoader = new THREE.TextureLoader();
//scene
var scene = new THREE.Scene();
//camera
var camera = new THREE.PerspectiveCamera(45, width / height, 0.1, 10000);
camera.position.y = 0;
camera.position.z = 500;
scene.add(camera);
这里我们为了实现全景,球的半径可以适当做大一些,就有那个全景的感觉了
//imgTexture
var imgTexture = textureLoader.load("./park.jpg");
imgTexture.minFilter = THREE.LinearFilter;
imgTexture.magFilter = THREE.LinearFilter;
imgTexture.format = THREE.RGBFormat;
var cubeGeometry = new THREE.SphereGeometry(500, 60, 40);
var sphereMat = new THREE.MeshBasicMaterial({ map: imgTexture });
sphereMat.side = THREE.BackSide;
var cube = new THREE.Mesh(cubeGeometry, sphereMat);
scene.add(cube);
关键代码var cubeGeometry = new THREE.SphereGeometry(500, 60, 40);
我们把半径改为50
看下
改为500
再看下,
//renderer
var renderer = new THREE.WebGLRenderer();
renderer.setSize(width, height);
document.body.appendChild(renderer.domElement);
//controls
var controls = new THREE.OrbitControls(camera);
controls.enableDamping = true;
controls.dampingFactor = 0.25;
controls.enableZoom = false;
controls.maxDistance = 500;
controls.minDistance = 500;
function render() {
requestAnimationFrame(render);
cube.rotation.y += 0.001;
renderer.render(scene, camera);
}
render();
插件地址:JeremyHeleine/Photo-Sphere-Viewer??
预览地址??
完整代码??
//html
<div id="photosphere"></div>
//js
var div = document.getElementById("container");
var PSV = new PhotoSphereViewer({
panorama: "./parc-saint-pierre-amiens.jpg",
loading_msg: "正在加载全景图,请耐心等待...",
anim_speed: "0.5rpm",//自动移动速度
vertical_anim_speed: "0.5rpm",
container: div,
time_anim: 3000,
navbar: true,
navbar_style: {
backgroundColor: "rgba(58, 67, 77, 0.7)",
},
});
插件地址:mistic100/Photo-Sphere-Viewer??
预览地址??
完整代码??
//html
<div id="photosphere"></div>
//js
new PhotoSphereViewer.Viewer({
panorama: "./sphere.jpg",
container: "photosphere",
caption:
"全景照片<b>© <a href='https://github.com/mistic100/Photo-Sphere-Viewer' target=’_blank‘ rel=’noopener noreferrer‘>Photo Sphere Viewer</a></b>",
loadingImg: "./photosphere-logo.gif",
defaultLat: 0.3,
autorotateDelay: 2000,
autorotateSpeed: "0.5rpm",
touchmoveTwoFingers: true,
mousewheelCtrlKey: true,
});
喜欢的话就点个赞吧
更多问题欢迎加入前端交流群交流749539640
data URI scheme 允许我们使用内联(inline-code)的方式在网页中包含数据,可以...
注释1:上图整个大背景是这个网页的全部尺寸,中间的小框才是浏览器中的可见尺寸...
解决方法如下: 第一种 使用iframe,但是目前使用iframe的人已经越来越少了,而...
content属性一般用于::before、::after伪元素中,用于呈现伪元素的内容。平时con...
John Au-Yeung 来源:medium 译者:前端小智 有梦想,有干货,微信搜索 【大迁世...
简介: 企业上云多账号架构中,如何做到从上到下管理的同时,处理好员工的权限边...
Redis 官方在 2020 年 5 月正式推出 6.0 版本,提供很多振奋人心的新特性,所以...
复制代码 代码如下: !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional...
1.HTML5的内容类型 内容类型 描述 内嵌 向文档中添加其他类型的内容,例如audio...
先点赞再看,养成好习惯 前言 这两天在另一个社区看到了一个关于 Tomcat 的提问...