threejs实现文字粒子拆分动画效果代码
代码语言:html
所属分类:粒子
代码描述:threejs实现文字粒子拆分动画效果代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<html lang="en"><head>
<meta charset="UTF-8">
<style>
body {
margin: 0;
overflow: hidden;
}
#instructions {
position: absolute;
color: #fff;
bottom: 0;
padding-bottom: 6px;
font-family: sans-serif;
width: 100%;
text-align: center;
pointer-events: none;
}
</style>
</head>
<body style="cursor: pointer;">
<div id="three-container"></div>
<div id="instructions">
click and drag to control the animation
</div>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/three.75.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/three.bas.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/TextGeometry.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/FontUtils.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/pnltri.min.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/droid_sans_bold.typeface.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/TweenMax.min.js"></script>
<script>
//capture the window loading
window.onload = init;
function init() {
var root = new THREERoot({
createCameraControls:false,
antialias: true,
fov:60
});
//setup the scene
root.renderer.setClearColor(0x3AAFA9);
root.renderer.setPixelRatio(window.devicePixelRatio || 1);
root.camera.position.set(0, 0, 400);
//create the text animation variable
var textAnimation = createTextAnimation();
textAnimation.position.y = -10;
root.scene.add(textAnimation);
//set the timeline aspects of the animation
var tl = new TimelineMax({
repeat:-1, //-1 loop
repeatDelay:0.25,
yoyo:true
});
tl.fromTo(textAnimation, 4, //4
{animationProgress:0.0},
{animationProgress:1.0, ease:Power1.easeInOut},
0
);
createTweenScrubber(tl);
}
//create the text to be animated
function createTextAnimation() {
var geometry = generateTextGeometry('BFW.WIKI', {
size:14,
height:0,
font:'droid sans',
weight:'bold',
style:'normal',
anchor:{x:0.5, y:0.5, z:0.0}
});
THREE.BAS.Utils.separateFaces(geometry);
return new TextAnimation(geometry);
}
//mathematical details of the animation
function generateTextGeometry(text, params) {
var geometry = new THREE.TextGeometry(text, params);
geometry.computeBoundingBox();
geometry.userData = {};
geometry.userData.size = {
width: geometry.boundingBox.max.x - geometry.boundingBox.min.x,
height: geometry.boundingBox.max.y - geometry.boundingBox.min.y,
depth: geometry.boundingBox.max.z - geometry.boundingBox.min.z
};
var anchorX = geometry.userData.size.width * -params.anchor.x;
var anchorY = geometry.userData.size.height * -params.anchor.y;
var anchorZ = geometry.userData.size.depth * -params.anchor.z;
var matrix = new THREE.Matrix4().makeTranslation(anchorX, anchorY, anchorZ);
geometry.applyMatrix(matrix);
return geometry;
}
////////////////////
// CLASSES
////////////////////
function TextAnimation(textGeometry) {
var bufferGeometry = new THREE.BAS.ModelBufferGeometry(textGeometry);
var aAnimation = bufferGeometry.createAttribute('aAnimation', 2);
var aCentroid = bufferGeometry.createAttribute('aCentroid', 3);
var aControl0 = bufferGeometry.createAttribute('aControl0', 3);
var aControl1 = bufferGeometry.createAttribute(.........完整代码请登录后点击上方下载按钮下载查看
网友评论0