three三维上海中心大厦cbd建筑集群场景天气昼夜切换代码
代码语言:html
所属分类:三维
代码描述:three三维上海中心大厦cbd建筑集群场景天气昼夜切换代码
代码标签: three 三维 上海 中心 大厦 cbd 建筑 集群 场景 天气 昼夜 切换 代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Three.js 上海市中心摩天大厦场景</title>
<style>
* {
box-sizing: border-box;
-webkit-tap-highlight-color: transparent;
}
html,
body {
margin: 0;
width: 100%;
height: 100%;
overflow: hidden;
font-family: Arial, "Microsoft YaHei", sans-serif;
background: #0b1220;
color: #eef6ff;
}
canvas {
display: block;
}
#ui {
position: fixed;
left: 16px;
top: 16px;
z-index: 10;
width: min(380px, calc(100vw - 32px));
padding: 16px 18px;
border-radius: 18px;
background: rgba(8, 15, 28, 0.66);
border: 1px solid rgba(255, 255, 255, 0.12);
box-shadow: 0 18px 45px rgba(0, 0, 0, 0.26);
backdrop-filter: blur(10px);
}
#ui h1 {
margin: 0 0 8px;
font-size: 24px;
line-height: 1.2;
letter-spacing: 1px;
color: #f8fbff;
}
#ui .desc {
font-size: 13px;
line-height: 1.8;
color: #cbd5e1;
margin-bottom: 14px;
}
.group {
margin-bottom: 12px;
}
.group .label {
font-size: 13px;
color: #93c5fd;
margin-bottom: 8px;
}
.buttons {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
button {
appearance: none;
border: 0;
padding: 9px 14px;
border-radius: 12px;
cursor: pointer;
color: #eaf4ff;
font-size: 13px;
font-weight: 700;
background: linear-gradient(180deg, rgba(43, 58, 86, 0.95), rgba(21, 32, 49, 0.95));
border: 1px solid rgba(255, 255, 255, 0.10);
transition: transform 0.15s ease, background 0.2s ease, box-shadow 0.2s ease;
}
button:hover {
transform: translateY(-1px);
}
button.active {
background: linear-gradient(180deg, #58a6ff, #2563eb);
box-shadow: 0 10px 24px rgba(37, 99, 235, 0.35);
}
#ui .tips {
margin-top: 10px;
font-size: 12px;
line-height: 1.75;
color: #94a3b8;
}
#badge {
position: fixed;
right: 16px;
top: 16px;
z-index: 10;
padding: 12px 14px;
border-radius: 16px;
background: rgba(8, 15, 28, 0.62);
border: 1px solid rgba(255,255,255,0.1);
backdrop-filter: blur(10px);
box-shadow: 0 14px 36px rgba(0,0,0,0.22);
min-width: 210px;
}
#badge .line1 {
font-size: 14px;
color: #93c5fd;
margin-bottom: 6px;
}
#badge .line2 {
font-size: 20px;
font-weight: 800;
color: #f8fbff;
margin-bottom: 4px;
}
#badge .line3 {
font-size: 13px;
line-height: 1.7;
color: #cbd5e1;
}
@media (max-width: 700px) {
#ui,
#badge {
width: calc(100vw - 24px);
}
#ui {
left: 12px;
top: 12px;
}
#badge {
right: 12px;
top: auto;
bottom: 12px;
}
}
</style>
</head>
<body>
<div id="ui">
<h1>上海市中心摩天大厦场景</h1>
<div class="desc">
含上海塔、环球金融中心、金茂大厦、东方明珠的风格化城市天际线。<br />
鼠标拖动旋转,滚轮缩放,右键平移。
</div>
<div class="group">
<div class="label">昼夜切换</div>
<div class="buttons">
<button class="active" data-time="day" type="button">白昼</button>
<button data-time="sunset" type="button">黄昏</button>
<button data-time="night" type="button">夜景</button>
</div>
</div>
<div class="group">
<div class="label">天气切换</div>
<div class="buttons">
<button class="active" data-weather="sunny" type="button">晴天</button>
<button data-weather="cloudy" type="button">多云</button>
<button data-weather="rain" type="button">下雨</button>
<button data-weather="fog" type="button">雾天</button>
</div>
</div>
<div class="tips">
场景会同步切换天空、光照、楼宇灯光、河面反射、云层、雨效、雾效与夜空星光。
</div>
</div>
<div id="badge">
<div class="line1" id="modeText">当前模式</div>
<div class="line2" id="titleText">白昼 · 晴天</div>
<div class="line3">黄浦江畔风格化都市群楼,带动态车流、云层、天气与昼夜变化。</div>
</div>
<script type="importmap">
{
"imports":{
"three":"//repo.bfw.wiki/bfwrepo/js/module/three/build/164/three.module.js",
"three/addons/":"//repo.bfw.wiki/bfwrepo/js/module/three/examples/164/jsm/"
}
}
</script>
<script type="module">
import * as THREE from 'three';
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
const timeButtons = Array.from(document.querySelectorAll("[data-time]"));
const weatherButtons = Array.from(document.querySelectorAll("[data-weather]"));
const titleText = document.getElementById("titleText");
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(58, window.innerWidth / window.innerHeight, 0.1, 500);
camera.position.set(42, 28, 58);
const renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.setPixelRatio(Math.min(window.devicePixelRatio || 1, 2));
renderer.outputColorSpace = THREE.SRGBColorSpace;
renderer.shadowMap.enabled = true;
rendere.........完整代码请登录后点击上方下载按钮下载查看
















网友评论0