webgl canvas实现三维城市效果代码
代码语言:html
所属分类:三维
代码描述:webgl canvas实现三维城市效果代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<style>
html, body {
overflow: hidden;
touch-action: none;
position: absolute;
margin: 0;
padding: 0;
width: 100%;
height: 100%;
background: #000;
}
canvas {
position: absolute;
width: 100%;
height: 100%;
user-select: none;
background: #000;
cursor: pointer;
}
</style>
</head>
<body >
<canvas></canvas>
<script>
</script>
<script type="module">
import {
WebGL,
Mesh,
Shader,
FrameBuffer } from
"//repo.bfw.wiki/bfwrepo/js/webgl-helpers.js";
{
const [canvas, gl] = WebGL("canvas");
gl.enable(gl.DEPTH_TEST);
gl.enable(gl.CULL_FACE);
console.clear();
const matrices = [];
const shapes = [];
const stack = [];
const rule = {};
let ry = 0;
let ex = 0;
let ey = 0;
let ez = 0;
let nVertices = 0;
let mustResize = true;
let renderingTexture = null;
let camDist = 0;
let lightPosition = null;
let ambientColor = null;
let specularColor = null;
let diffuseColor = null;
let fog = null;
let fogColor = null;
let fov = 60;
let pitch = 30;
let background = null;
let startRule = "start";
let transformScene = null;
let seed = Math.round(Date.now() / 86400000) - 18000;
let minSize = 0;
let maxDepth = 10000000;
let minComplexity = 0;
let maxPitch = 0;
let cables = false;
let zoomAcceleration = 0.0025;
let speedRotation = 0.08;
const transforms = {
x(m, v) {
m[12] += m[0] * v;
m[13] += m[1] * v;
m[14] += m[2] * v;
m[15] += m[3] * v;
},
y(m, v) {
m[12] += m[4] * v;
m[13] += m[5] * v;
m[14] += m[6] * v;
m[15] += m[7] * v;
},
z(m, v) {
m[12] += m[8] * v;
m[13] += m[9] * v;
m[14] += m[10] * v;
m[15] += m[11] * v;
},
s(m, v) {
const a = Array.isArray(v);
const x = a ? v[0] : v;
const y = a ? v[1] : x;
const z = a ? v[2] : x;
m[0] *= x;
m[1] *= x;
m[2] *= x;
m[3] *= x;
m[4] *= y;
m[5] *= y;
m[6] *= y;
m[7] *= y;
m[8] *= z;
m[9] *= z;
m[10] *= z;
m[11] *= z;
},
rx(m, v) {
const rad = Math.PI * (v / 180);
const s = Math.sin(rad);
const c = Math.cos(rad);
const a10 = m[4];
const a11 = m[5];
const a12 = m[6];
const a13 = m[7];
const a20 = m[8];
const a21 = m[9];
const a22 = m[10];
const a23 = m[11];
m[4] = a10 * c + a20 * s;
m[5] = a11 * c + a21 * s;
m[6] = a12 * c + a22 * s;
m[7] = a13 * c + a23 * s;
m[8] = a10 * -s + a20 * c;
m[9] = a11 * -s + a21 * c;
m[10] = a12 * -s + a22 * c;
m[11] = a13 * -s + a23 * c;
},
ry(m, v) {
const rad = Math.PI * (v / 180);
const s = Math.sin(rad);
const c = Math.cos(rad);
const a00 = m[0];
const a01 = m[1];
const a02 = m[2];
const a03 = m[3];
const a20 = m[8];
const a21 = m[9];
const a22 = m[10];
const a23 = m[11];
m[0] = a00 * c + a20 * -s;
m[1] = a01 * c + a21 * -s;
m[2] = .........完整代码请登录后点击上方下载按钮下载查看
















网友评论0