首页 > 数据库 > 数据库开发技术 > 【24】实战—three.js材质、与纹理
three.js材质、与纹理

<template><div class="container" ref="container"></div></template><script >import * as THREE from "three";import { ref } from "vue";//添加一个轨道控制器import { OrbitControls} from "three/examples/jsm/controls/OrbitControls";//导入动画库import gsap from "gsap";//导入dat.guiimport * as dat from "dat.gui";export default {name: 'App',data() {return {renderer: null,scene: null,camera: null,cube: null,clock: null,animate1: null,controls: null,gui: null}},mounted() {//1.创建场景const scene = new THREE.Scene();//2.创建相机(透视相机)/*** 构造器* PerspectiveCamera( fov : Number, aspect : Number, near : Number, far : Number )* fov — 摄像机视锥体垂直视野角度* aspect — 摄像机视锥体长宽比* near — 摄像机视锥体近端面* far — 摄像机视锥体远端面*/const camera = new THREE.PerspectiveCamera(75,window.innerWidth / window.innerHeight,0.1,1000);//设置相机位置:x,y,z轴位置camera.position.set(0,0,10);//添加相机到场景中scene.add(camera);this.scene=scene;this.camera=camera;//导入纹理const textureLoader = new THREE.TextureLoader();const doorColorTexture = textureLoader.load("static/textures/door/color.jpg");//添加物体const cubeGeometry = new THREE.BoxBufferGeometry(1,1,1);//材质const basicMaterial = new THREE.MeshBasicMaterial({map: doorColorTexture,});const cube = new THREE.Mesh(cubeGeometry,basicMaterial);//将几何体添加到场景中scene.add(cube);//4.初始化渲染器const renderer = new THREE.WebGLRenderer();//设置渲染器的尺寸大小renderer.setSize(window.innerWidth,window.innerHeight);this.renderer=renderer;//将webgl渲染的canvas内容添加到div//document.body.append(renderer.domElement);this.$refs['container'].appendChild(renderer.domElement);//使用渲染器,通过相机将场景渲染进来renderer.render(scene,camera);//5.创建轨道控制器const controls = new OrbitControls(camera,renderer.domElement);//设置控制器阻尼,让控制器更有真实效果,必须在动画循环调用updatecontrols.enableDamping = true;this.controls=controls;//6.添加坐标轴辅助器//size -- (可选的) 表示代表轴的线段长度. 默认为 1.const axesHelper = new THREE.AxesHelper( 5 );scene.add( axesHelper );//双击控制屏幕进入全屏、退出全屏window.addEventListener("dblclick",()=>{const fullScreenElement =document.fullscreenElement;if(!fullScreenElement){//让画布对象全屏this.renderer.domElement.requestFullscreen();}else{//退出全屏,使用document对象document.exitFullscreen();}})//监听画面变化,更新渲染画面window.addEventListener("resize",()=>{console.log("画面变化了");//更新摄像头this.camera.aspect = window.innerWidth /window.innerHeight;//更新摄像机的投影矩阵this.camera.updateProjectionMatrix();//更新渲染器this.renderer.setSize(window.innerWidth,window.innerHeight);//设置渲染器的像素比this.renderer.setPixelRatio(window.devicePixelRatio);})this.renders();},methods: {renders(){this.controls.update();this.renderer.render(this.scene,this.camera);// requestAnimationFrame(this.renders());//此行代码会出现threejs requestAnimationFrame 导致的call stack超出上限的问题requestAnimationFrame(this.renders.bind(this));},}}</script><style>*{margin: 0;padding: 0;}.container{height: 100vh;width: 100vw;background-color: #f0f0f0;}</style>
原文作者:小南瓜开发平台;如有侵权,请联系管理员删除。