今天要为大家带来一款html5 canvas实现的梦幻的3D刺猬球。页面非常梦幻。效果图如下:

在线预览   源码下载

html代码:

<div>
<canvas width="1366" height="62" style="width: 1366px; height: 62px;">
</canvas>
</div>

js代码:

 var SCREEN_WIDTH = window.innerWidth,
SCREEN_HEIGHT = window.innerHeight, r = 200, mouseX = 0, mouseY = 0, windowHalfX = window.innerWidth / 2,
windowHalfY = window.innerHeight / 2, camera, scene, renderer; init();
animate(); function init() { var container; container = document.createElement('div');
document.body.appendChild(container); camera = new THREE.PerspectiveCamera(80, SCREEN_WIDTH / SCREEN_HEIGHT, 1, 3000);
camera.position.z = 1000; scene = new THREE.Scene(); var i, line, vertex1, vertex2, material, p,
parameters = [[3.5, 0x90CEBF, 0.5, 1]], geometry = new THREE.Geometry(); for (i = 0; i < 1500; i++) { var vertex1 = new THREE.Vector3();
vertex1.x = Math.random() * 2 - 1;
vertex1.y = Math.random() * 2 - 1;
vertex1.z = Math.random() * 2 - 1;
vertex1.normalize();
vertex1.multiplyScalar(r); vertex2 = vertex1.clone();
vertex2.multiplyScalar(Math.random() * 0.09 + 1); geometry.vertices.push(vertex1);
geometry.vertices.push(vertex2); } for (i = 0; i < parameters.length; ++i) { p = parameters[i]; material = new THREE.LineBasicMaterial({ color: p[1], opacity: p[2], linewidth: p[3] }); line = new THREE.Line(geometry, material, THREE.LinePieces);
line.scale.x = line.scale.y = line.scale.z = p[0];
line.originalScale = p[0];
line.rotation.y = Math.random() * Math.PI;
line.updateMatrix();
scene.add(line); } renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize(SCREEN_WIDTH, SCREEN_HEIGHT);
container.appendChild(renderer.domElement); document.addEventListener('mousemove', onDocumentMouseMove, false);
document.addEventListener('touchstart', onDocumentTouchStart, false);
document.addEventListener('touchmove', onDocumentTouchMove, false); // window.addEventListener('resize', onWindowResize, false); } function onWindowResize() { windowHalfX = window.innerWidth / 2;
windowHalfY = window.innerHeight / 2; camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix(); renderer.setSize(window.innerWidth, window.innerHeight); } function onDocumentMouseMove(event) { mouseX = event.clientX - windowHalfX;
mouseY = event.clientY - windowHalfY; } function onDocumentTouchStart(event) { if (event.touches.length > 1) { event.preventDefault(); mouseX = event.touches[0].pageX - windowHalfX;
mouseY = event.touches[0].pageY - windowHalfY; } } function onDocumentTouchMove(event) { if (event.touches.length == 1) { event.preventDefault(); mouseX = event.touches[0].pageX - windowHalfX;
mouseY = event.touches[0].pageY - windowHalfY; } } // function animate() { requestAnimationFrame(animate); render(); } function render() { camera.position.y += (-mouseY + 200 - camera.position.y) * .05;
camera.lookAt(scene.position); renderer.render(scene, camera); var time = Date.now() * 0.0001; for (var i = 0; i < scene.children.length; i++) { var object = scene.children[i]; if (object instanceof THREE.Line) { object.rotation.y = time * (i < 4 ? (i + 1) : -(i + 1)); } } }

注:本文爱编程原创文章,转载请注明原文地址:http://www.w2bc.com/Article/6585

最新文章

  1. Devexpress datagrid动态添加显示指定列的gridView
  2. Linux下好玩的命令
  3. [转] 值得推荐的C/C++框架和库
  4. sessionKey
  5. iOS身份证号码识别
  6. FZU 2193 So Hard
  7. 自制MPLS解决路由黑洞实验
  8. Tomcat--startup.bat文件
  9. TensorFlow之DNN(三):神经网络的正则化方法(Dropout、L2正则化、早停和数据增强)
  10. 常见adb指令
  11. CSS几个要点补充
  12. python 基础_ 打印输出 循环分支2
  13. 01: RestfulAPI与HTTP
  14. DelphiXE10.2怎么安装文本转语音(TTS)语音转文本(SR)控件(XE10.2+WIN764)
  15. 【matlab】error:试图访问 im2(1,1211);由于 size(im2)=[675,1210],索引超出范围。
  16. C语言中exit函数的使用
  17. SQL Server 2014与TFS 2013的错误(TF53001:管理员已取消数据库操作)
  18. Effective Java-第二章
  19. Netty实现简单HTTP服务器
  20. YUYV格式到RGB格式的转换

热门文章

  1. AIX查看系统安装时间和运行时长
  2. CSS3饼状loading效果
  3. Linux各主要发行版的包管理命令对照
  4. 运行shell出错: 没有那个文件或目录
  5. Device trees, Overlays and Parameters of Raspberry Pi
  6. python matplotlib.pyplot画矩形图 以及plt.gca()
  7. [置顶] Android中使用Movie显示gif动态图
  8. 共享内存简介和mmap 函数
  9. 最短路径 - 弗洛伊德(Floyd)算法
  10. 自己定义View学习之12/7(进度条之混合模式)