threejs打造一个书桌三维效果代码
代码语言:html
所属分类:三维
代码描述:threejs打造一个书桌三维效果代码,摆满纸张和瓶子
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <style> body { margin: 0; height: 100vh; overflow: hidden; display: flex; align-items: center; justify-content: center; background: #000; } </style> </head> <body > <script type="module"> import * as THREE from "https://threejs.org/build/three.module.js"; import { OrbitControls } from "https://threejs.org/examples/jsm/controls/OrbitControls.js"; let camera, scene, renderer; const uniforms = { t: { value: 0 } }; const { PI, cos, sin } = Math; const TAU = 2 * PI; const HALF_PI = PI / 2; const map = (value, sMin, sMax, dMin, dMax) => { return dMin + (value - sMin) / (sMax - sMin) * (dMax - dMin); }; const textrue = path => new THREE.TextureLoader().load(path); const vec = (x = 0, y = 0, z = 0) => new THREE.Vector3(x, y, z); const range = (n, m = 0) => Array(n). fill(m). map((i, j) => i + j); const polar = (ang, r = 1) => [r * cos(ang), r * sin(ang)]; const group = () => new THREE.Group(); const shaderMaterials = getShaderMaterialSet(uniforms); function init() { scene = new THREE.Scene(); renderer = new THREE.WebGLRenderer({ antialias: true }); renderer.setPixelRatio(window.devicePixelRatio); renderer.setSize(window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement); camera = new THREE.PerspectiveCamera( 60, window.innerWidth / window.innerHeight, 1, 1000); camera.position.set( 1.5733694630638464, 64.24498103358587, 100.84717514499769); camera.rotation.x = -0.5672196272222528; camera.rotation.y = 0.013157534983447959; camera.rotation.z = 0.008381607123176699; const controls = new OrbitControls(camera, renderer.domElement); addResizeHandler(renderer, camera); const envMapTexture = new THREE.TextureLoader().load( "//repo.bfw.wiki/bfwrepo/image/5d6539385ad28.png", () => { const rt = new THREE.WebGLCubeRenderTarget(envMapTexture.image.height); rt.fromEquirectangularTexture(renderer, envMapTexture); addObjects(scene, rt); }); render(); } function addObjects(scene, textureEnv) { createPot(scene, -40, 0, 10, textureEnv, shaderMaterials.pot); createGlassContainer({ scene, texture: textureEnv, curve: beaker1, itemScale: 0.3, position: vec(-22, 0, -20), customLiquidMaterial: shaderMaterials.beaker }); createGlassContainer({ scene, texture: textureEnv, curve: beaker2, itemScale: 0.2, position: vec(-10, 0, -20), customLiquidMaterial: shaderMaterials.beaker }); createTable(scene, textureEnv); createPapers(scene); createWineGlass(scene, textureEnv, vec(25, 20, 0), shaderMaterials.bottle); createBottle(scene, textureEnv, vec(20, 6.8, -10), shaderMaterials.bottle); createDish(scene, textureEnv); } function createPotBody(scene, x, y, z, textureEnv) { const geometry = new THREE.SphereBufferGeometry( 10, 36, 36, 0, TAU, PI * 0.3, PI * 0.5); const t = textrue( "//repo.bfw.wiki/bfwrepo/image/6000db65e38b3.png"); t.wrapS = THREE.RepeatWrapping; t.wrapT = THREE.RepeatWrapping; const material = new THREE.MeshBasicMaterial({ map: t, envMap: textureEnv.texture, .........完整代码请登录后点击上方下载按钮下载查看
网友评论0