three.js入门篇8 之 实现VR看房
初始化项目
vue create vr360-vue3
yarn add three
three.js 立方体实现VR看房
code
<template>
<div class="container" ref="container"></div>
</template>
<script setup>
import {
ref, onMounted } from 'vue'
import * as THREE from "three"
import {
OrbitControls } from "three/examples/jsm/controls/OrbitControls"
const scene = new THREE.Scene()
const camera = new THREE.PerspectiveCamera(75,window.innerWidth/ window.innerHeight,0.1,1000)
camera.position.set(0,0,10)
scene.add( camera );
const geometry = new THREE.BoxGeometry( 40, 40, 40)
let arr = ['home1_left','home1_right','home1_top','home1_bottom','home1_front','home1_back'];
let boxMaterials = []
arr.forEach(item=>{
const texttrue = new THREE.TextureLoader().load(`./img/living/${
item}.jpg` )
boxMaterials.push(
new THREE.MeshBasicMaterial({
color:'#ffff00',
map:texttrue
})
)
})
const mesh = new THREE.Mesh(geometry,boxMaterials)
mesh.geometry.scale(1,1,-1)
scene.add(mesh)
const renderer = new THREE.WebGL1Renderer()
renderer.setSize(window.innerWidth,window.innerHeight)
const controls = new OrbitControls(camera,renderer.domElement)
function render() {
requestAnimationFrame( render );
renderer.render( scene, camera );
}
const container = ref(null)
onMounted(()=>{
container.value.appendChild(renderer.domElement)
controls.enableDamping = true
render()
})
</script>
<style lang="scss" scoped>
* {
padding:0;
margin: 0;
}
.container {
height:100;
width:100%;
background:'#f0f0f0'
}
</style>
效果
three.js 球体HDR实现VR看房
code
<template>
<div class="container" ref="container"></div>
</template>
<script setup>
import {
ref, onMounted } from 'vue'
import * as THREE from "three"
import {
OrbitControls } from "three/examples/jsm/controls/OrbitControls"
const scene = new THREE.Scene()
const camera = new THREE.PerspectiveCamera(75,window.innerWidth/ window.innerHeight,0.1,1000)
camera.position.set(0,0,10)
scene.add( camera );
const geometry = new THREE.SphereGeometry(10,40,40)
import {
RGBELoader} from 'three/examples/jsm/loaders/RGBELoader'
const rgbeLoader = new RGBELoader()
rgbeLoader.load("./img/hdr/001.hdr",(texture)=>{
const materials = new THREE.MeshBasicMaterial({
map:texture,
color:'#ffff00',
})
const sphere = new THREE.Mesh(geometry,materials)
sphere.geometry.scale(1,1,-1)
scene.add(sphere)
})
const renderer = new THREE.WebGL1Renderer()
renderer.setSize(window.innerWidth,window.innerHeight)
const controls = new OrbitControls(camera,renderer.domElement)
function render() {
requestAnimationFrame( render );
renderer.render( scene, camera );
}
const container = ref(null)
onMounted(()=>{
container.value.appendChild(renderer.domElement)
controls.enableDamping = true
render()
})
</script>
<style lang="scss" scoped>
* {
padding:0;
margin: 0;
}
.container {
height:100;
width:100%;
background:'#f0f0f0'
}
</style>
效果