Toggle navigation
在线编辑器
在线代码
文本比较
jQuery下载
前端库
在线手册
登录/注册
下载代码
html
css
js
分享到微信朋友圈
X
html
css
@import url("https://fonts.googleapis.com/css?family=Roboto:700"); body { margin: 0; overflow: hidden; }
JavaScript
const scene = new THREE.Scene(); const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); const renderer = new THREE.WebGLRenderer({ antialias: true }); renderer.setSize(window.innerWidth, window.innerHeight); document.body.append(renderer.domElement); camera.position.z = 2.5; const textCanvas = document.createElement('canvas'); const textCtx = textCanvas.getContext('2d'); const pointsGeometry = new THREE.BufferGeometry(). setFromPoints(generatePointsFromWord()); const pointsMaterial = new THREE.PointsMaterial({ size: 0.01, sizeAttenuation: true, color: 'hsl(280, 100%, 50%)' }); const points = new THREE.Points(pointsGeometry, pointsMaterial); scene.add(points); window.addEventListener('resize', onResize); requestAnimationFrame(draw); function map(n, a, b, c, d) { return (n - a) * (d - c) / (b - a) + c; } function generatePointsFromImgData(imgData) { let points = []; let { data, width: w, height: h } = imgData; let multX = 1; let multY = 1; let aspect = w / h; if (aspect > 1) { multX = aspect; } else if (aspect < 1) { multY = h / w; } let offsetX = multX * 0.5; let offsetY = multY * 0.5; for (let i = 3; i < data.length; i += 4) { if (data[i] <= 0x20) { continue; } let j = i * 0.25; let x = j % w; let y = Math.floor(j / w); let tX = x / w; let tY = y / h; let vX = tX * multX - offsetX; let vY = tY * multY - offsetY; // let vZ = (Math.random() * 2 - 1) * 0.1 - 0.05; let vZ = Math.sin((Math.sin(tX * 4) * 3 + Math.cos(tY * 2) * 2) * 8) * 0.2; let p = new THREE.Vector3(vX, -vY, vZ).multiplyScalar(0.7); points.push(p); } return points; } function generatePointsFromWord(text = 'jQuery') { textCtx.resetTransform(); textCtx.clearRect(0, 0, textCanvas.width, textCanvas.height); textCtx.fillStyle = 'white'; let h = map(text.length, 4, 25, 48, 12); textCtx.font = `bold ${h}px Roboto`; textCtx.textBaseline = 'middle'; textCtx.textAlign = 'center'; let w = Math.floor(textCtx.measureText(text).width); textCtx.fillText(text, w * 0.5, h * 0.5); let imgData = textCtx.getImageData(0, 0, w, h); textCtx.clearRect(0, 0, textCanvas.width, textCanvas.height); return generatePointsFromImgData(imgData); } function draw(e) { requestAnimationFrame(draw); let time = e * 0.002; points.rotation.z = Math.cos(time * 1.2) * 0.15; points.rotation.y = Math.sin(time) * 0.4; points.scale.z = Math.tan(map(Math.cos(time * 0.6), -1, 1, 1, 2.5)); renderer.render(scene, camera); } function onResize() { camera.aspect = window.innerWidth / window.innerHeight; camera.updateProjectionMatrix(); renderer.setSize(window.innerWidth, window.innerHeight); }
粒子
时间
文字
hover
canvas
3d
游戏
音乐
火焰
水波
轮播图
鼠标跟随
动画
css
加载动画
导航
菜单
按钮
滑块
tab
弹出层
统计图
svg
×
Close
在线代码下载提示
开通在线代码永久免费下载,需支付20jQ币
开通后,在线代码模块中所有代码可终身免费下!
您已开通在线代码永久免费下载,关闭提示框后,点下载代码可直接下载!
您已经开通过在线代码永久免费下载
对不起,您的jQ币不足!可通过发布资源 或
直接充值获取jQ币
取消
开通下载
<!doctype html> <html> <head> <meta charset="utf-8"> <title>threejs粒子文本-jq22.com</title> <script src="https://www.jq22.com/jquery/jquery-1.10.2.js"></script> <style>
</style> </head> <body>
<script>
</script>
</body> </html>
2012-2021 jQuery插件库版权所有
jquery插件
|
jq22工具库
|
网页技术
|
广告合作
|
在线反馈
|
版权声明
沪ICP备13043785号-1
浙公网安备 33041102000314号