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"> <!-- Sea Glass Clock Copyright (c) 2024 by Wakana Y.K. (https://codepen.io/wakana-k/pen/oNrVwjY) webgpu_shadowmap_opacity demo --> <!-- using three.js --> <main> <section> <div> <p>Loading...</p> </div> </section> </main> <script 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.webgpu.js", "three/tsl": "//repo.bfw.wiki/bfwrepo/js/module/three/build/168/three.webgpu.js", "three/addons/": "//repo.bfw.wiki/bfwrepo/js/module/three/examples/168/jsm/" } } </script> <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/perlin-min.js"></script> <script type="module"> /*! Sea Glass Clock Copyright (c) 2024 by Wakana Y.K. (https://codepen.io/wakana-k/pen/oNrVwjY) */ "use strict"; console.clear(); import * as THREE from "three"; import { Fn, vec4 } from "three/tsl"; import { OrbitControls } from "three/addons/controls/OrbitControls.js"; import { ParametricGeometry } from "three/addons/geometries/ParametricGeometry.js"; import * as BufferGeometryUtils from "three/addons/utils/BufferGeometryUtils.js"; (function () { let camera, scene, renderer, controls; let geometry, material, mesh; let color, colors = []; const clock = {}; const MIDNIGHT = Math.PI * -0.5; let a, r, b, c; // for parametric params init(); obj(); function updateClockTime() { const date = new Date(); const milliseconds = date.getMilliseconds(); const seconds = date.getSeconds() + milliseconds / 1000; const minutes = date.getMinutes() + seconds / 60; const hours = (date.getHours() % 12) + minutes / 60; clock.hourHand.rotation.z = MIDNIGHT - (Math.PI * 2 * hours) / 12 + Math.PI / 2; clock.minuteHand.rotation.z = MIDNIGHT - (Math.PI * 2 * minutes) / 60 + Math.PI / 2; clock.secondHand.rotation.z = MIDNIGHT - (Math.PI * 2 * seconds) / 60 + Math.PI / 2; } function shuffleColors(num = 12) { let tempColors = []; for (let i = 0; i < num; i++) { tempColors.push(new THREE.Color().setHSL((1 / num) * i, 1, 0.6)); } return tempColors.sort((a, b) => 0.5 - Math.random()); // array shuffle } function distortion(geo) { let k = 1; for (let i = 0; i < geo.attributes.position.count; i++) { let vertex = new THREE.Vector3(); vertex.fromBufferAttribute(geo.getAttribute("position"), i); //console.log(noise.perlin3(vertex.x * k,.........完整代码请登录后点击上方下载按钮下载查看
网友评论0