zdog实现三维蒸汽幽灵房屋效果代码
代码语言:html
所属分类:三维
代码描述:zdog实现三维蒸汽幽灵房屋效果代码,鼠标拖动可切换视角。
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<style>
body {
background: #1B2838;
color: #EEE;
}
.zdog-canvas {
display: block;
margin: 0 auto;
cursor: move;
}
</style>
</head>
<body>
<!-- partial:index.partial.html -->
<canvas class="zdog-canvas" width="750" height="750"></canvas>
<!-- partial -->
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/zdog.dist.js"></script>
<script >
// namespace
window.ZdogSpookyHouse = {
wobbling: true,
sceneY: 12,
hillScale: 0.75,
color: {
deep: 'hsl(230, 60%, 40%)',
dark: 'hsl(230, 60%, 50%)',
darker: '#2a3a81',
medium: 'hsl(230, 60%, 60%)',
light: 'hsl(230, 60%, 70%)',
pale: '#6D77AD',
highlight: '#FFB',
fog: 'hsla(230, 60%, 80%, 0.4)',
paintjob: '#d59c55',
}
};
// ------------------------- bones ------------------------- //
ZdogSpookyHouse.addBones = function( options ) {
var TAU = Zdog.TAU;
var lineX = 2;
var color = ZdogSpookyHouse.color.light;
var stroke = 1.3;
var line = new Zdog.Shape({
addTo: options.addTo,
path: [ { x: -lineX }, { x: lineX } ],
closed: false,
stroke: stroke,
color: color,
translate: { y: 12, z: -30 },
rotate: { y: TAU/16, z: TAU/16 },
});
var halfFemur = line.copy({
translate: { x: -6, y: 15, z: -28 },
rotate: { y: -TAU/8, z: TAU/8 },
});
var femurEnd = line.copy({
addTo: halfFemur,
path: [
{ x: 1, y: -1 },
{ x: 0, y: 0 },
{ x: 1, y: 1 },
],
closed: false,
rotate: null,
translate: { x: lineX },
});
halfFemur.copyGraph({
translate: { x: 1, y: 6, z: -31 },
rotate: { z: -TAU/8, x: TAU/8 },
scale: 0.75,
});
line.copy({
scale: 0.25,
translate: { y: 18, z: -26 },
rotate: { z: TAU/8 },
});
var fullFemur = halfFemur.copyGraph({
translate: { x: -9, y: 10, z: -30 },
rotate: { z: -TAU/16 },
});
femurEnd.copy({
addTo: fullFemur,
scale: { x: -1 },
translate: { x: -lineX },
});
line.copy({
scale: 0.4,
translate: { x: -12, y: 14, z: -28 },
rotate: { z: -TAU/16 },
});
};
// ------------------------- car & road ------------------------- //
ZdogSpookyHouse.addCarRoad = function( options ) {
var color = ZdogSpookyHouse.color;
var TAU = Zdog.TAU;
var roadRadius = 120;
var roadSegmentCount = 40;
var roadSegmentZ = 5;
var roadSegmentX = (roadRadius + roadSegmentZ) * TAU / roadSegmentCount / 2;
var roadSegmentPath = [
{ x: -roadSegmentX + 1, z: roadSegmentZ },
{ x: roadSegmentX - 1, z: roadSegmentZ },
{ x: roadSegmentX, z: -roadSegmentZ },
{ x: -roadSegmentX, z: -roadSegmentZ },
];
for ( var i = 0; i < roadSegmentCount; i++ ) {
var roadAngle = i/roadSegmentCount * TAU;
new Zdog.Shape({
addTo: options.addTo,
path: roadSegmentPath,
translate: {
x: Math.cos( roadAngle ) * roadRadius,
z: Math.sin( roadAngle ) * roadRadius,
},
rotate: { y: roadAngle + TAU/4 },
fill: true,
stroke: 2,
color: color.deep,
});
}
// car
var bottomY = -1;
var middleY = -2.5;
var topY = -4.5;
var outerZ = 2.5;
var innerZ = 1.5;
var grillX = -5;
var hoodX = -4;
var wipersX = -2;
var windshieldX = -1;
var roofX = 2;
var trunkX = 4;
var bumperX = 5;
var driverPoints = {
grill: new Zdog.Vector({ x: grillX, y: bottomY, z: outerZ }),
hood: new Zdog.Vector({ x: hoodX, y: middleY, z: outerZ }),
wipers: new Zdog.Vector({ x: wipersX, y: middleY, z: outerZ }),
windshield: new Zdog.Vector({ x: windshieldX, y: topY, z: innerZ }),
roof: new Zdog.Vector({ x: roofX, y: topY, z: innerZ }),
trunk: new Zdog.Vector({ x: trunkX, y: middleY, z: outerZ }),
bumper: new Zdog.Vector({ x: bumperX, y: bottomY, z: outerZ }),
};
// copy to passenger points on other z side
var passengerPoints = {};
for ( var pointName in driverPoints ) {
var driverPoint = driverPoints[ pointName ];
passengerPoints[ pointName ] = driverPoint.copy().multiply({ z: -1 });
}
var carRotor = new Zdog.Anchor({
addTo: options.addTo,
});
var carAnchorY = -6;
var carAnchor = new Zdog.Group({
addTo: carRotor,
translate: { z: roadRadius - 0, y: carAnchorY },
scale: 1.2,
updateSort: true,
});
var carSide = new Zdog.Shape({
addTo: carAnchor,
path: [
driverPoints.grill, driverPoints.hood, driverPoints.wipers,
driverPoints.windshield, driverPoints.roof, driverPoints.trunk,
driverPoints.bumper
],
stroke: 2,
fill: true,
color: color.paintjob,
});
carSide.copy({
scale: { z: -1 }.........完整代码请登录后点击上方下载按钮下载查看
















网友评论0