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