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