const renderer = new WebGLRenderer()
renderer.setSize(window.innerWidth, window.innerHeight)
renderer.setPixelRatio(window.devicePixelRatio)
复制代码
new WebGLRenderer会在body里面生成一个canvas标签,固然若是你想在某个位置插入canvas能够在指定的dom元素appendChild(renderer.domElement)git
setPixelRatio是为了兼容高清屏幕,在高清屏幕上绘图,会出现绘图不清晰的问题,设置setPixelRatio就行了github
const scene = new Scene()
scene.background = new Color(0x333333)
复制代码
首先咱们来了解一下three.js的坐标npm
屏幕的中心,就是坐标(0,0,0)canvas
用户所能看到的场景,须要经过照相机来呈现,至关于人的眼睛,照相机分为两种一种是正交投影照相机,一种是透视投影照相机,它们之间最大的区别是透视投影照相机会根据照相机位置的远近,物体会改变大小,更接近于人眼,在这里咱们使用透视投影照相机(PerspectiveCamera)。bash
const camera = new PerspectiveCamera(70, this.options.width/this.options.height, 1, 10000)
camera.position.set(150, 250, 300)
camera.lookAt(new Vector3(0, 0, 0))
this.scene.add(camera)
复制代码
如同天然界要有光同样,咱们要设置光源,才能看到物体。这里咱们使用平行光,可参考太阳光。app
const light = new DirectionalLight()
light.position.set(0, 20, 20)
this.camera.add(light)
复制代码
首先,先装一个引人模型的loaderdom
npm i three-obj-loader
复制代码
把一个.obj格式的3d模型加载进来就行了ide
const loader = new THREE.OBJLoader()
loader.load('assets/chair.obj', obj => {
obj.traverse(child=> {
if (child instanceof Mesh) {
child.material.side = THREE.DoubleSide
this.scene.add(obj)
}
})
})
复制代码
首先安装一下这个库this
npm i three-orbit-controls
复制代码
而后spa
const controls = this.controls = new OrbitControls(this.camera)
controls.maxPolarAngle = 1.5
controls.minPolarAngle = 0.5
controls.rotateSpeed = 5.0
controls.zoomSpeed = 5
controls.panSpeed = 2
controls.onZoom = false
controls.noPan = false
controls.staticMoving = true
controls.dynamicDampingFactor = 0.3
controls.minDistance = 10
controls.maxDistance = 800
复制代码
window.requestAnimationFrame(this.animate)
this.controls.update()
this.render()
复制代码
后面会写一篇three.js的高级应用,好比
感兴趣的同窗也能够抢先看代码:
原创辛苦,以为还不错请点个star哦