学习点一:material数组

在设置Mesh的时候,第一个参数是几何体,第二个参数就是材质。
依据官网文档看,第二个参数能够是一个数组。也就是说能够设置几何体不同面的材质图片。

学习点二:程序

大家能够看下哪一个面会对应哪个图片,nx\ny\nz\px\py\pz。

学习点三:红色是透明度为0,彩色是透明度为1

设置material时,图片红色的中央会透出材质的色彩,彩色中央不会。比照下,上面是图片,material的color设置青色,

附在几何体上的成果:

次要应用

module: OrbitControls

几何体:BoxBufferGeometry、SphereGeometry、CircleGeometry、CylinderGeometry、IcosahedronGeometry

材质加载:TextureLoader

材质:MeshPhongMaterial

环境光:AmbientLight

具体代码

import * as THREE from 'three'// 轨道控制器import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'let scene, camera, controls, rendererlet axesHelper// 设置加载管理器let event = {}event.onLoad = () => {  render() //当材质图片加载实现,从新渲染一下}function init() {  renderer = new THREE.WebGLRenderer({ antialias: true }) // 创立渲染器对象  renderer.setPixelRatio(window.devicePixelRatio)  renderer.setSize(window.innerWidth, window.innerHeight) //设置渲染区域尺寸  document.body.appendChild(renderer.domElement) //body元素中插入canvas对象  scene = new THREE.Scene()  camera = new THREE.PerspectiveCamera(    35,    window.innerWidth / window.innerHeight,    1,    1000  )  camera.position.set(0, 5, 100)  controls = new OrbitControls(camera, renderer.domElement)  controls.addEventListener('change', render) //监听鼠标、键盘事件  // 环境光  const ambient = new THREE.AmbientLight(0xffffff, 1)  scene.add(ambient)  // 几何体  const box = new THREE.BoxBufferGeometry(10, 10, 10) //正方体六面  const ball = new THREE.SphereGeometry(5, 16, 8) //球一面  const circle = new THREE.CircleGeometry(5, 32) //圆形一面  const cylinder = new THREE.CylinderGeometry(5, 5, 20, 32) //圆柱  const twelve = new THREE.IcosahedronGeometry(10, 0) //十二面  // 材质  let texture = new THREE.TextureLoader()  let t1 = texture.load('./textures/六面/nx.jpg', event.onLoad)  let t2 = texture.load('./textures/六面/px.jpg', event.onLoad)  let t3 = texture.load('./textures/六面/ny.jpg', event.onLoad)  let t4 = texture.load('./textures/六面/py.jpg', event.onLoad)  let t5 = texture.load('./textures/六面/nz.jpg', event.onLoad)  let t6 = texture.load('./textures/六面/pz.jpg', event.onLoad)  let t1Material = new THREE.MeshPhongMaterial({    color: 0x00fa9a,    map: t1,    side: THREE.DoubleSide, //双面渲染  })  let t2Material = new THREE.MeshPhongMaterial({ color: 0x00fa9a, map: t2 })  let t3Material = new THREE.MeshPhongMaterial({ color: 0x00fa9a, map: t3 })  let t4Material = new THREE.MeshPhongMaterial({ color: 0x00fa9a, map: t4 })  let t5Material = new THREE.MeshPhongMaterial({ color: 0x00fa9a, map: t5 })  let t6Material = new THREE.MeshPhongMaterial({ color: 0x00fa9a, map: t6 })  // 六面材质数组  let materialArr = [    t1Material,    t2Material,    t3Material,    t4Material,    t5Material,    t6Material,  ]  let material = new THREE.MeshPhongMaterial({ color: 0x00fa9a })  let mesh_box = new THREE.Mesh(box, materialArr)  let mesh_ball = new THREE.Mesh(ball, material) //球只有一个面  let mesh_circle = new THREE.Mesh(circle, material)  let mesh_cylinder = new THREE.Mesh(cylinder, materialArr)  let mesh_twelve = new THREE.Mesh(twelve, material)  mesh_box.position.set(-32, 0, 0)  mesh_ball.position.set(-16, 0, 0)  mesh_circle.position.set(0, 0, 0)  mesh_cylinder.position.set(16, 0, 0)  mesh_twelve.position.set(32, 0, 0)  scene.add(mesh_box)  scene.add(mesh_ball)  scene.add(mesh_circle)  scene.add(mesh_cylinder)  scene.add(mesh_twelve)  render()  window.addEventListener('resize', onWindowResize)}function onWindowResize() {  camera.aspect = window.innerWidth / window.innerHeight  camera.updateProjectionMatrix()  render.setSize(window.innerWidth, window.innerHeight)}function render() {  renderer.render(scene, camera) //执行渲染操作  // requestAnimationFrame(render)}function buildHelper() {  // 辅助坐标系  参数250示意坐标系大小,能够依据场景大小去设置  axesHelper = new THREE.AxesHelper(250)  scene.add(axesHelper)}init()buildHelper()render()