初学three.js

最近在找工作,看到很多招聘需求都需要会three.js,这是个新兴的技术,主要用于数字孪生,智慧城市的开发,有点类似建模,网上相关教程比较少,很多收费的课程

首先在github上mrdoob/three.js: JavaScript 3D Library. (github.com)下载到本地,搭建本地three.js官网

第二步使用parcel脚手架搭建开发环境

第三步开始学习

1、three.js基础

import * as THREE from 'three'
// console.log(THREE);
//目标:了解three.js最基本内容
//创建场景
const scene = new THREE.Scene()
//创建相机,透视相机
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000)
//设置相机位置,xyz
camera.position.set(0, 0, 10)
//添加到场景中
scene.add(camera)
//----------------------------------------------------------------------
//添加物体
//几何体大小
const geometry = new THREE.BoxGeometry(2, 2, 2); 
//材质,网格
const material = new THREE.MeshBasicMaterial({ color: 0xff00ff });
//创建几何体
const cube = new THREE.Mesh(geometry, material);
//添加到场景中
scene.add(cube);
//----------------------------------------------------------------------
//初始化渲染器
const renderer = new THREE.WebGLRenderer()
//设置渲染的尺寸大小
renderer.setSize(window.innerWidth, window.innerHeight)
// console.log(renderer);
//将webgl渲染的canvas内容添加到body上
document.body.appendChild(renderer.domElement)
//使用渲染器,通过相机将场景渲染进来
// renderer.render(scene, camera)

2、使用控制器

import * as THREE from 'three'
// console.log(THREE);
//目标:使用控制器查看3d物体
//导入轨道控制器
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
//创建场景
const scene = new THREE.Scene()
//创建相机,透视相机
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000)
//设置相机位置,xyz
camera.position.set(0, 0, 10)
//添加到场景中
scene.add(camera)
//----------------------------------------------------------------------
//添加物体
//几何体大小
const geometry = new THREE.BoxGeometry(2, 2, 2);
//材质,网格
const material = new THREE.MeshBasicMaterial({ color: 0xff00ff });
//创建集合体
const cube = new THREE.Mesh(geometry, material);
//添加到场景中
scene.add(cube);
//----------------------------------------------------------------------
//初始化渲染器
const renderer = new THREE.WebGLRenderer()
//设置渲染的尺寸大小
renderer.setSize(window.innerWidth, window.innerHeight)
// console.log(renderer);
//将webgl渲染的canvas内容添加到body上
document.body.appendChild(renderer.domElement)
//使用渲染器,通过相机将场景渲染进来
// renderer.render(scene, camera)
//----------------------------------------------------------------------
//创建轨道控制器
const controls = new OrbitControls(camera, renderer.domElement);
//添加坐标轴辅助器
const axesHelper = new THREE.AxesHelper(5);
//添加到场景中
scene.add(axesHelper);
//设置渲染函数
function render() {
    renderer.render(scene, camera);
    //每一帧执行一次
    requestAnimationFrame(render)
}
render()

3、物体移动

import * as THREE from 'three'
// console.log(THREE);
//目标:控制3d物体的移动
//导入轨道控制器
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
//创建场景
const scene = new THREE.Scene()
//创建相机,透视相机
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000)
//设置相机位置,xyz
camera.position.set(0, 0, 10)
//添加到场景中
scene.add(camera)
//----------------------------------------------------------------------
//添加物体
//几何体大小
const geometry = new THREE.BoxGeometry(2, 2, 2); 
//材质,网格
const material = new THREE.MeshBasicMaterial({ color: 0xff00ff });
//创建集合体
const cube = new THREE.Mesh(geometry, material);
//修改物体的位置
// cube.position.set(5,0,0)
// cube.position.x=5
//添加到场景中
scene.add(cube);
// console.log(cube);
//----------------------------------------------------------------------
//初始化渲染器
const renderer = new THREE.WebGLRenderer()
//设置渲染的尺寸大小
renderer.setSize(window.innerWidth, window.innerHeight)
// console.log(renderer);
//将webgl渲染的canvas内容添加到body上
document.body.appendChild(renderer.domElement)
//使用渲染器,通过相机将场景渲染进来
// renderer.render(scene, camera)
//----------------------------------------------------------------------
//创建轨道控制器
const controls = new OrbitControls(camera, renderer.domElement);
//添加坐标轴辅助器
const axesHelper = new THREE.AxesHelper(5);
//添加到场景中
scene.add(axesHelper);
//设置渲染函数
function render() {
    //移动
    cube.position.x += 0.01
    if (cube.position.x > 5) {
        cube.position.x=0
    }
    renderer.render(scene, camera);
    //每一帧执行一次
    requestAnimationFrame(render)
}
render()

4、物体缩放

import * as THREE from 'three'
// console.log(THREE);
//目标:控制3d物体的缩放
//导入轨道控制器
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
//创建场景
const scene = new THREE.Scene()
//创建相机,透视相机
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000)
//设置相机位置,xyz
camera.position.set(0, 0, 10)
//添加到场景中
scene.add(camera)
//----------------------------------------------------------------------
//添加物体
//几何体大小
const geometry = new THREE.BoxGeometry(2, 2, 2); 
//材质,网格
const material = new THREE.MeshBasicMaterial({ color: 0xff00ff });
//创建集合体
const cube = new THREE.Mesh(geometry, material);
//修改物体的位置
// cube.position.set(5,0,0)
// cube.position.x=5
//缩放
// cube.scale.set(3,2,1)
// cube.scale.x=2
//旋转
cube.rotation.set(Math.PI/4,0,0,"XYZ")
//添加到场景中
scene.add(cube);
// console.log(cube);
//----------------------------------------------------------------------
//初始化渲染器
const renderer = new THREE.WebGLRenderer()
//设置渲染的尺寸大小
renderer.setSize(window.innerWidth, window.innerHeight)
// console.log(renderer);
//将webgl渲染的canvas内容添加到body上
document.body.appendChild(renderer.domElement)
//使用渲染器,通过相机将场景渲染进来
// renderer.render(scene, camera)
//----------------------------------------------------------------------
//创建轨道控制器
const controls = new OrbitControls(camera, renderer.domElement);
//添加坐标轴辅助器
const axesHelper = new THREE.AxesHelper(5);
//添加到场景中
scene.add(axesHelper);
//设置渲染函数
function render() {
    //移动
    cube.position.x += 0.01
    if (cube.position.x > 5) {
        cube.position.x=0
    }
    //旋转
    cube.rotation.x+=0.01
    renderer.render(scene, camera);
    //每一帧执行一次
    requestAnimationFrame(render)
}
render()

成果

5fd5d6872fd8452ca092a60776685d0e.png

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值