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 },
});
function getCarPanel( pointNameA, pointNameB, color ) {
return carSide.copy({
path: [
driverPoints[ pointNameA ], driverPoints[ pointNameB ],
passengerPoints[ pointNameB ], passengerPoints[ pointNameA ],
],
color: color || carSide.color,
});
}
getCarPanel( 'grill', 'hood' ); // front grill
getCarPanel( 'hood', 'wipers' ); // hood
getCarPanel( 'wipers', 'windshield', color.medium ); // windshield
getCarPanel( 'windshield', 'roof' ); // roof
getCarPanel( 'roof', 'trunk', color.medium ); // back window
getCarPanel( 'trunk', 'bumper' ); // back bumper
var tireTranslate = new Zdog.Vector({ x: -3.5, z: outerZ, y: bottomY });
var tire = new Zdog.Ellipse({
addTo: carAnchor,
diameter: 1.8,
translate: tireTranslate,
stroke: 2,
fill: true,
color: color.paintjob,
});
tire.copy({
translate: tireTranslate.copy().multiply({ x: -1 }),
});
tire.copy({
translate: tireTranslate.copy().multiply({ z: -1 }),
});
tire.copy({
translate: tireTranslate.copy().multiply({ x: -1, z: -1 }),
});
function animate( progress ) {
carRotor.rotate.y = Zdog.easeInOut( progress/4 % 1 ) * TAU + TAU * 3/8;
carAnchor.rotate.x = Math.sin( progress * TAU * 2 ) * 0.1;
carAnchor.translate.y = Math.sin( progress * TAU * 1.5 ) * 2 + carAnchorY;
}
return {
animate: animate,
};
};
// ------------------------- cats ------------------------- //
ZdogSpookyHouse.addCats = function( options ) {
var TAU = Zdog.TAU;
var color = ZdogSpookyHouse.color;
var catScale = 1.1;
var cat = new Zdog.Anchor({
addTo: options.addTo,
translate: { z: -22, x: -28, y: -2 },
scale: catScale,
rotate: { y: TAU/8 },
});
new Zdog.Cone({
addTo: cat,
diameter: 1,
length: 3,
rotate: { x: TAU/4 },
stroke: 4 * catScale,
color: color.deep,
});
var catHead = new Zdog.Shape({
addTo: cat,
translate: { y: -4 },
stroke: 5 * catScale,
color: color.deep,
});
var catEye = new Zdog.Shape({
addTo: catHead,
translate: { x: -1, z: 1 },
stroke: 0.9 * catScale,
color: color.highlight,
});
catEye.copy({
translate: { x: 1, z: 1 },
});
var catEarPointA = { x: -1, y: 1 };
var catEarPointB = { x: -1, y: -1 };
var catEarPointC = { x: 1, y: 1 };
var catEarPointD = { x: 1, y: 1, z: -1 };
var catEar = new Zdog.Anchor({
addTo: catHead,
scale: new Zdog.Vector({ x: 1, y: 1, z: 1.25 }),
});
var catEarPanel = new Zdog.Shape({
addTo: catEar,
path: [ catEarPointA, catEarPointB, catEarPointD ],
translate: { x: -0.96, y: -1.5, z: 0 },
stroke: 0.6 * catScale,
fill: true,
color: color.deep,
});
catEarPanel.copy({
path: [ catEarPointB, catEarPointC, catEarPointD ],
});
catEar.copyGraph({
scale: catEar.scale.copy().multiply({ x: -1 }),
});
// tail
new Zdog.Shape({
addTo: cat,
path: [
{},
{ bezier: [
{ x: 4, y: 0, z: -4 },
{ x: 0, y: -3, z: 0 },
{ x: 3, y: -5, z: -1 },
]},
],
closed: false,
translate: { z: -1 },
stroke: 0 * catScale,
c.........完整代码请登录后点击上方下载按钮下载查看
















网友评论0