three.js基础案例day01——可交互的立方体

本文主要是环境搭建和在场景中添加一个可交互的立方体,具体效果如下:

1.下载three.js并导入

npm install three.js
// 导入
import * as THREE from 'three'


2.创建场景、相机、物体、渲染器

  scene = new THREE.Scene()
  console.log('three', THREE)

  const geometry = new THREE.BoxGeometry(1, 1, 1)
  const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 })
  const cube = new THREE.Mesh(geometry, material)
  scene.add(cube)

  camera = new THREE.PerspectiveCamera(60, width / height, 1, 1000)
  camera.position.z = 50
  scene.add(camera)

   // 三维坐标
  const axesHelper = new THREE.AxesHelper(40)
  scene.add(axesHelper)

  renderer = new THREE.WebGLRenderer()
  renderer.setSize(width, height)
  elementRef.value.appendChild(renderer.domElement)


3. 导入并使用轨道控制器

import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'

controls = new OrbitControls(camera, renderer.domElement)
function render() {
  requestAnimationFrame(render)
  controls.update()
  renderer.render(scene, camera)
}

全部代码
 

<template>
  <div id="threeId" ref="elementRef"></div>
</template>

<script setup>
import * as THREE from 'three'
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'
import { ref, onMounted, onBeforeUnmount } from 'vue'

let scene, camera, renderer, controls
const elementRef = ref(null)
onMounted(() => {
  const element = elementRef.value
  const width = element.offsetWidth
  const height = element.offsetHeight
  initScene(width, height)
  render()
})

function initScene(width, height) {
  // 初始化场景: 创建场景,相机,物体,渲染器
  scene = new THREE.Scene()
  console.log('three', THREE)

  const geometry = new THREE.BoxGeometry(1, 1, 1)
  const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 })
  const cube = new THREE.Mesh(geometry, material)
  scene.add(cube)

  camera = new THREE.PerspectiveCamera(60, width / height, 1, 1000)
  camera.position.z = 50
  scene.add(camera)

  const axesHelper = new THREE.AxesHelper(40)
  scene.add(axesHelper)

  renderer = new THREE.WebGLRenderer()
  renderer.setSize(width, height)
  console.log('document.getElementById', document.getElementById('threeId'))
  elementRef.value.appendChild(renderer.domElement)
  controls = new OrbitControls(camera, renderer.domElement)
  controls.update()
}
function render() {
  requestAnimationFrame(render)
  controls.update()
  renderer.render(scene, camera)
}
</script>

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值