three.js 全景看房

4 篇文章 1 订阅
订阅专栏

在这里插入图片描述

代码参考了官方的
https://threejs.org

<!DOCTYPE html>
<html>
	<head>
		<title>全景看房</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: #000000;
				margin: 0;
				cursor: move;
				overflow: hidden;
			}

			a {
				color: #ffffff;
			}

			#info {
				position: absolute;
				width: 100%;
				color: #ffffff;
				padding: 5px;
				font-family: Monospace;
				font-size: 13px;
				font-weight: bold;
				text-align: center;
				z-index: 1;
			}
		</style>
	</head>
	<body>
		<!-- 引入本地js -->
		<!-- Three.js-master包下载 http://www.yanhuangxueyuan.com/links.html -->
		<script src="js/three.js"></script>
		<script src="js/CSS3DRenderer.js"></script>

		<script>
			var camera, scene, renderer;
			var geometry, material, mesh;
			var target = new THREE.Vector3();

			var lon = 90, lat = 0;
			var phi = 0, theta = 0;

			var touchX, touchY;

			init();
			animate();

			function init() {
				//创建相机
				camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 1, 1000 );
				//创建场景
				scene = new THREE.Scene();
				
				//图片数组
				var sides = [
					{ //正面图
						url: 'picture/front.jpg',
						position: [ -512, 0, 0 ], //位置
						rotation: [ 0, Math.PI / 2, 0 ]  //旋转角度
					},
					{ //背面图
						url: 'picture/back.jpg',
						position: [ 512, 0, 0 ],
						rotation: [ 0, -Math.PI / 2, 0 ]
					},
					{ //顶部图
						url: 'picture/top.jpg',
						position: [ 0,  512, 0 ],
						rotation: [ Math.PI/2, 0, -Math.PI/2 ] //图片拼接不完美的时候调整这里
					},
					{ //底部图
						url: 'picture/bottom.jpg',
						position: [ 0, -512, 0 ],
						rotation: [ - Math.PI / 2, 0, Math.PI/2 ] //图片拼接不完美的时候调整这里
					},
					{ //右边图
						url: 'picture/right.jpg',
						position: [ 0, 0,  512 ],
						rotation: [ 0, Math.PI, 0 ]
					},
					{ //左边图
						url: 'picture/left.jpg',
						position: [ 0, 0, -512 ],
						rotation: [ 0, 0, 0 ]
					}
				];
				
				//循环贴图
				for ( var i = 0; i < sides.length; i ++ ) {					
					var side = sides[ i ];					
					var element = document.createElement( 'img' );
					element.width = 1026; 
					element.src = side.url;
					
					var object = new THREE.CSS3DObject( element );
					object.position.fromArray( side.position );
					object.rotation.fromArray( side.rotation );
					scene.add( object );					
				}
				
				//创建渲染器
				renderer = new THREE.CSS3DRenderer();
				renderer.setSize( window.innerWidth, window.innerHeight ); //设置渲染区域尺寸
				document.body.appendChild( renderer.domElement ); //使浏览器显示画面

				//监听鼠标键盘事件
				document.addEventListener( 'mousedown', onDocumentMouseDown, false );
				document.addEventListener( 'wheel', onDocumentMouseWheel, false );
				document.addEventListener( 'touchstart', onDocumentTouchStart, false );
				document.addEventListener( 'touchmove', onDocumentTouchMove, false );
				//双击事件
				document.addEventListener( 'dblclick', onMouseDbClick, false );
				//窗口缩放事件
				window.addEventListener( 'resize', onWindowResize, false );				
			}

			function onWindowResize() {
				camera.aspect = window.innerWidth / window.innerHeight;
				camera.updateProjectionMatrix();
				renderer.setSize( window.innerWidth, window.innerHeight );
			}

			function onDocumentMouseDown( event ) {
				event.preventDefault();
				document.addEventListener( 'mousemove', onDocumentMouseMove, false );
				document.addEventListener( 'mouseup', onDocumentMouseUp, false );
			}

			function onDocumentMouseMove( event ) {
				var movementX = event.movementX || event.mozMovementX || event.webkitMovementX || 0;
				var movementY = event.movementY || event.mozMovementY || event.webkitMovementY || 0;

				lon -= movementX * 0.1;
				lat += movementY * 0.1;
			}

			function onDocumentMouseUp( event ) {
				document.removeEventListener( 'mousemove', onDocumentMouseMove );
				document.removeEventListener( 'mouseup', onDocumentMouseUp );
			}

			function onDocumentMouseWheel( event ) {
				var fov = camera.fov + event.deltaY * 0.05;
				camera.fov = THREE.Math.clamp( fov, 10, 75 );
				camera.updateProjectionMatrix();
			}

			function onDocumentTouchStart( event ) {
				event.preventDefault();
				var touch = event.touches[ 0 ];
				touchX = touch.screenX;
				touchY = touch.screenY;
			}

			function onDocumentTouchMove( event ) {
				event.preventDefault();
				var touch = event.touches[ 0 ];
				lon -= ( touch.screenX - touchX ) * 0.1;
				lat += ( touch.screenY - touchY ) * 0.1;
				touchX = touch.screenX;
				touchY = touch.screenY;
			}

			function onMouseDbClick( ) {
				let fullScreenElement = document.fullscreenElement;
				if (!fullScreenElement){
					//进入全屏
					renderer.domElement.requestFullscreen();
				} else {
					//退出全屏
					document.exitFullscreen();
				}
			}

			function animate() {
				requestAnimationFrame( animate );  //循环执行animate函数
				lon +=  0.1; //旋转速度
				lat = Math.max( - 85, Math.min( 85, lat ) );
				phi = THREE.Math.degToRad( 90 - lat );
				theta = THREE.Math.degToRad( lon );

				target.x = Math.sin( phi ) * Math.cos( theta );
				target.y = Math.cos( phi );
				target.z = Math.sin( phi ) * Math.sin( theta );

				camera.lookAt( target ); //设置相机方向

				renderer.render( scene, camera ); //执行渲染
			}
			
		</script>
	</body>
</html>

天空盒是一个包含了整个场景的立方体,它包含周围环境的6个图像。
在这里插入图片描述
所有图片的尺寸是 2048X2048
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

图片来自 :https://juejin.cn/post/7112696052884439070


2020-07-20 更新,以下是更简单的代码实现全景看房

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>全景图</title>
    <style>
        body {
            margin: 0;
            overflow: hidden;
        }
    </style>
    <script src="./js/three.js"></script>
    <script src="./js/OrbitControls.js"></script>
</head>

<body>
	<script>
		//尺寸
	    const width = window.innerWidth;
	    const height = window.innerHeight;
		
		//场景
		const scene = new THREE.Scene();
		
		//相机
	    const camera = new THREE.PerspectiveCamera(75, width / height, 0.1, 1000);
	    camera.position.set(0,0,-200); //相机位置,想看图片的某个地方是在此处修改
	    camera.lookAt(scene.position);
		
		//轨道控制器
	    const controls = new THREE.OrbitControls(camera);
		
		//渲染器
	    const renderer = new THREE.WebGLRenderer();
	    renderer.setSize(width, height);
	    document.body.appendChild(renderer.domElement)
		
		create();
		render();
	
	    function create() {
	        let urls = [
	            './picture/left.jpg',
	            './picture/right.jpg',
	            './picture/top.jpg',
	            './picture/bottom.jpg',
	            './picture/front.jpg',
	            './picture/back.jpg'
	        ];
	        let cubeTexture = new THREE.CubeTextureLoader().load(urls);
	        scene.background = cubeTexture;
			
			//窗口缩放事件
			window.addEventListener( 'resize', onWindowResize, false );	
	    }
	
	    function render() {
	        renderer.render(scene, camera);
	        requestAnimationFrame(render);
	    }
		
		function onWindowResize() {
			camera.aspect = window.innerWidth / window.innerHeight;
			camera.updateProjectionMatrix();
			renderer.setSize( window.innerWidth, window.innerHeight );
		}   
	
	</script>
</body>
</html>

threejs实现3d全景看房
小王的技术库
08-18 3995
作为一个threejs的初学者,针对threejs的讲解和使用较为浅显,在不断学习 threejs 的过程中,感觉还是挺有趣,看着别人炫酷的3D效果感觉好强,也感到自己的不足。我的学习方法,首先入门是在b站看了threejs journey的视频,了解threejs的运用,接下来就是多练,加深对光、材质、相机等等的理解,另外就是去模仿别人的效果。之后就是在b站上学习blender建模课程,了解模型的创建和运用。...
js&three.js全景vr看房进阶版
weixin_52479803的博客
08-31 1975
js&three.js全景vr看房进阶版
three.js实现3D全景看房
10-23
three.js实现3D全景看房(移动端)。 three.js的基本使用(入门阶段),全景自动展示,以及手动拖拽滑动控制房屋方向角度。
网页全景看房ThreeJs
qq_43422957的博客
07-06 553
最近看了看Three.js,做了个入门级的小案例--简易版的全景看房(可上下左右拖动,可滚轮调整远近,可操作面板自动转动),vue2的,注释详细,需要学习three.js的道友可以一键复制去学习,代码看着挺多,其实不复杂。它包含了大量的内置功能和效果,如阴影、纹理映射、光照、粒子效果等,同时还支持各种3D模型和几何体的加载和渲染。threeJS的优点包括丰富的功能和灵活性、跨平台性能和兼容性以及庞大的社区支持和资源库,这些优势使得它成为开发3D图形应用程序的理想选择。本文首发于公众号【雪天前端
在北京,几行代码实现看房自由!
最新发布
程序员成长指北
08-08 27
大厂技术高级前端Node进阶点击上方程序员成长指北,关注公众号 回复1,加入高级Node交流群北京房子买不起,但是几行代码看房自由还是能做到的,今天就分享一期教程,使用 Three.js 帮你实现“看房自由”。作者:知心宝贝https://blog.csdn.net/qq_53673551/article/details/127513554一、前言基于WebGL的三维引擎,目前是国内资料...
js&threeJS】入门three,并实现全景看房案例,附带全码
weixin_52479803的博客
08-22 1366
js&threeJS】入门three,并实现全景看房案例,附带全码
three.js实现全景看房一个简单实用的功能
贝格前端工场的博客
03-06 667
首先,通过TextureLoader加载全景图像,并将其应用于一个球体的材质上。然后,创建了一个透视相机,并使用OrbitControls控制相机的交互。通过以上步骤,结合Three.js功能和API,可以实现一个交互式的全景看房场景。请注意,这只是一个简单的示例代码,实际使用时可能需要根据具体需求进行定制和扩展。例如,可以添加热点和导航功能,加载房间模型,以及其他增强功能等。要实现全景看房功能,可以使用Three.js结合全景图像和交互控制来创建一个交互式的全景看房场景。
vue中利用three.js实现全景图的完整示例
01-18
通过指令下载three.js npm install three -S 第二步: 在组件中引用 import * as THREE from 'three' 第三步: html部分 <div id=container></div> js部分 [removed] import * as THREE from 'three'; var ...
three.js项目(立方体贴图实现3D全景看房)(源码+项目说明).zip
03-09
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目...three.js项目(立方体贴图实现3D全景看房)(源码+项目说明).zip
three.js项目(立方体贴图实现3D全景看房)(完整源码+说明).zip
03-27
【资源说明】 1、该资源内项目代码都是经过测试运行成功,功能正常的情况下才上传的,请放心下载使用。 2、适用人群:主要针对计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、...
一步步带你实现web全景看房——three.js
09-03 6509
1. 基本概念在THREEjs中,渲染一个3d世界的必要因素是场景(scene)、相机(camera)、渲染器(renderer)。渲染出一个3d世界后,可以往里面增加各种各样的物体、光源等,形成一个3d世界:场景:右手坐标系,一切要素都在场景里面,相当于“世界”,包括各种物质和物理变化//创建场景constscene=newTHREE.Scene(); 复制代码照...
VR看房threejs.rar
07-06
VR看房
Threejs + React 实现3D室内看房.zip
05-16
Threejs + React 实现3d室内看房 项目服务启动: 进入目录 执行yarn install 执行yarn dev Threejs + React 实现3d室内看房 项目服务启动: 进入目录 执行yarn install 执行yarn dev Threejs + React 实现3d室内看房 项目服务启动: 进入目录 执行yarn install 执行yarn dev Threejs + React 实现3d室内看房 项目服务启动: 进入目录 执行yarn install 执行yarn dev Threejs + React 实现3d室内看房 项目服务启动: 进入目录 执行yarn install 执行yarn dev Threejs + React 实现3d室内看房 项目服务启动: 进入目录 执行yarn install 执行yarn dev Threejs + React 实现3d室内看房 项目服务启动: 进入目录
three.js实现3D室内全景看房
qq_60976312的博客
03-08 2972
three.js实现3D室内全景看房
three.js实现VR看房自由
weixin_44604262的博客
01-11 1857
万字详解-three.js实现VR看房自由
ThreeJS-全屏和退出全屏、自适应大小(五)
以爱护甲,爱满枫林。
03-29 900
ease: 'power1.out',//速度https://greensock.com/get-started/#easing。//但是requestAnimationFrame的回调函数注册生命只有一次,因此需要循环注册,才能达到一直调用的效果。//监听画面变化,更新渲染画面,(自适应的大小)//创建轨道控制器,可以拖动,控制的是摄像头。//设置控制阻尼,让控制器有更真实的效果。
vue3+threejs实现全景看房
weixin_45730243的博客
02-10 1978
Threejs全景看房
vue 项目使用three.js 实现3D看房效果
xiaoxiqo的博客
07-18 2584
该教程能帮助直接出vue项目的3D看房效果!!!
Three.js 进阶之旅:全景漫游-高阶版在线看房
2301_76429513的博客
08-01 721
浏览网页时,常被一些基于鼠标滚轮控制的页面动画所惊艳到,比如greensock 官网这些showcase案例页面就非常优秀,它们大多数都是使用Tween.jsgasp及greensock提供的一些动画扩展库实现的。使用Three.js也能很容易实现丝滑的滚动效果,本文使用ReactThree.js技术栈,实现一个《塞尔达传说:王国之泪》主题风格基于滚动控制的平滑滚动图片展示页面。通过本文的阅读,你将学习到的知识点包括:了解R3F中及基本原理及用法;了解库的基本组成,学习使用它提供的Preload。
three.js全景
09-08
Three.js全景图是指利用Three.js库实现的一种展示全景图片的技术。通过使用Three.js中的立方体或球体作为天空盒子,将无缝衔接的全景图片贴在上面,从而营造出一种仿佛身临其境的全景视觉效果。相机通常位于中央,当...
写文章

热门文章

  • uniapp 上传图片的两种方法 38896
  • uniapp 画布canvas的用法 25577
  • uniapp 生成二维码 18188
  • 华硕主板放电才能点亮 11401
  • uniapp 开发微信小程序使用TCP/UDP通信以16进制发送数据 11274

分类专栏

  • python 14篇
  • uni-app 59篇
  • three.js 4篇
  • nodejs 29篇
  • html & CSS 4篇
  • JavaScript 5篇
  • 物联网 10篇
  • mssql 3篇
  • 微信小程序 13篇
  • MySQL 3篇
  • 服务器 6篇
  • nginx 3篇
  • 笔记 9篇
  • delphi 3篇

最新评论

  • uniapp 开发小程序一个页面多个倒计时

    qq_39204618: 为啥是00分钟00秒

  • uniapp 开发小程序虚拟长列表万条数据不卡顿

    桓氦韬: 同出现图片闪烁,请问你有解决办法了吗?

  • uniapp 开发微信小程序使用TCP/UDP通信以16进制发送数据

    Anthony@:: 您好,error occurs:no such file or directory, open 'wxfile://ad/interstitialAdExtInfo.txt'这种情况是为什么呢

  • ESP8266对接巴法云平台实现小爱同学控制开关灯

    落落带飞: 引脚未声明定义错误没法用

  • three.js 制作3D相册

    菜鸟驿站2020: 把文字替换为图片就可以

大家在看

  • AI闪电战:代码+实战 从Python速通到深度学习|数据类型 1
  • 后端开发刷题 | 编辑距离 410
  • 数据仓库架构的发展(浅谈) 16
  • 《MmAP : Multi-Modal Alignment Prompt for Cross-Domain Multi-Task Learning》中文校对版 1058
  • 使用image watch查看图片像素值

最新文章

  • Python使用连接池操作MySQL
  • Python之OpenCV的手势识别
  • python对接百度云车牌识别
2024年8篇
2023年5篇
2022年31篇
2021年51篇
2020年52篇
2019年7篇

目录

目录

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家深圳超市商场美陈供应新余玻璃钢雕塑定做玻璃钢雕塑好还是泡沫好云南抽象玻璃钢雕塑制作海底商场美陈 设计方案洪江玻璃钢景观雕塑南阳玻璃钢卡通雕塑设计厂家商场美陈制作报价平凉人物玻璃钢雕塑哪家好中卫玻璃钢雕塑哪里好景观玻璃钢花盆制作云南专业玻璃钢仿铜雕塑厂家开封玻璃钢雕塑摆件安徽佛像玻璃钢雕塑多少钱宜良玻璃钢雕塑武汉个性化玻璃钢雕塑哪家便宜海东玻璃钢雕塑定制湖南玻璃钢牛动物雕塑小区景观制作玻璃钢雕塑的材料百色玻璃钢雕塑特点盐城古铜玻璃钢雕塑南宁玻璃钢雕塑公司滁州玻璃钢雕塑价格芒市玻璃钢雕塑订做成都商场美陈供货商合肥仿铜玻璃钢雕塑制作淮南玻璃钢雕塑定做价格石家庄黔东南玻璃钢人物雕塑玻璃钢雕塑可以用来干嘛商场橱窗秋季美陈香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化