three实现三维沙发椅月亮照亮小球发射效果代码
代码语言:html
所属分类:三维
代码描述:three实现三维沙发椅月亮照亮小球发射效果代码,三维场景,可点击鼠标左键发射小球。
代码标签: three 三维 沙发 椅 月亮 照亮 小球 发射
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<style>
@import url("https://fonts.googleapis.com/css2?family=Lato&display=swap");
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
*::before,
*::after {
box-sizing: border-box;
}
html,
body {
overscroll-behavior-x: none;
overscroll-behavior-y: none;
scroll-behavior: smooth;
}
body {
font-family: "Lato", sans-serif;
position: relative;
width: 100%;
max-width: 100vw;
height: auto;
min-height: 100vh;
text-align: center;
overflow-x: hidden;
background: rgb(255, 255, 255);
color: gray;
}
canvas {
-moz-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
user-select: none;
position: fixed;
width: 100%;
max-width: 100vw;
height: auto;
min-height: 100vh;
top: 0;
left: 0;
z-index: 0;
}
main {
position: relative;
}
section {
position: relative;
width: 100vw;
min-height: 100vh;
display: grid;
place-items: center;
}
</style>
</head>
<body translate="no">
<main>
<section>
<div>
<p>Loading...</p>
</div>
</section>
</main>
<script async type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/es-module-shims.1.6.3.js"></script>
<script type="importmap">
{
"imports": {
"three": "//repo.bfw.wiki/bfwrepo/js/module/three/build/168/three.module.js",
"three/addons/": "//repo.bfw.wiki/bfwrepo/js/module/three/examples/168/jsm/"
}
}
</script>
<script src="//repo.bfw.wiki/bfwrepo/js/module/three/examples/168/jsm/libs/ammo.wasm.js"></script>
<script type="module">
/*!
Moon Lamps
Copyright (c) 2024 by Wakana Y.K. (https://codepen.io/wakana-k/pen/mdNvqQV)
*/
"use strict";
console.clear();
import * as THREE from "three";
import { OrbitControls as e } from "three/addons/controls/OrbitControls.js";
import { GLTFLoader as t } from "three/addons/loaders/GLTFLoader.js";
async function n() {
if ("Ammo" in window == !1)
return void console.error("AmmoPhysics: Couldn't find Ammo.js");
const e = await Ammo(),
t = new e.btDefaultCollisionConfiguration(),
n = new e.btCollisionDispatcher(t),
i = new e.btDbvtBroadphase(),
a = new e.btSequentialImpulseConstraintSolver(),
r = new e.btDiscreteDynamicsWorld(n, i, a, t);
r.setGravity(new e.btVector3(0, -10, 0));
let s = new e.btTransform();
const l = new e.btTransform();
let c,
d = new e.btVector3(0, 0, 0),
h = new e.btQuaternion(0, 0, 0, 0);
function m(e) {
let t = null;
d.setValue(0, 0, 0);
let n = e.attributes.position.array;
t = new Ammo.btConvexHullShape();
for (let e = 0, o = n.length; e < o; e += 3) {
d.setValue(n[e], n[e + 1], n[e + 2]);
const i = e >= o - 3;
t.addPoint(d, i);
}
return (
t && t.setMargin(0), t || console.error("AmmoPhysics: Shape error."), t);
}
let w = [],
E = new WeakMap();
let u = null,
p = "";
function g(t, n, o, i = null) {
c = t.position,
h = t.quaternion,
s.setIdentity(),
d.setValue(c.x, c.y, c.z),
s.setOrigin(d),
s.setRotation(new e.btQuaternion(h.x, h.y, h.z, h.w));
const a = t.scale;
d.setValue(a.x, a.y, a.z), o.setLocalScaling(d), d.setValue(0, 0, 0);
const l = new e.btDefaultMotionState(s),
m = d;
n > 0 && o.calculateLocalInertia(n, m);
const u = new e.btRigidBodyConstructionInfo(n, l, o, m),
p = new e.btRigidBody(u);
"pointLight" == t.name ? (
p.setFriction(0.1), p.setRestitution(0.7)) :
"floor" == t.name ? (
p.setFriction(1), p.setRestitution(1), p.setDamping(0, 0)) : (
p.setFriction(0.5), p.setRestitution(0.3), p.setDamping(0, 0)),
"shootingBall" == t.name &&
i && (
d.setValue(i.x, i.y, i.z), p.setLinearVelocity(d)),
p.name = t.name,
r.addRigidBody(p),
n > 0 && (w.push(t), E.set(t, p));
}
let M = 0;
return (
setInterval(function () {
const e = performance.now();
if (M > 0) {
const t = (e - M) / 1e3;
r.stepSimulation(t, 10);
}
M = e;
for (let e = 0, t = w.length; e < t; e++) {
if (!w[e]) continue;
let t = w[e];
if (t.isInstancedMesh) {
let e = t.instanceMatrix.array;
if (!E.has(t)) continue;
.........完整代码请登录后点击上方下载按钮下载查看
网友评论0