经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 软件/图像 » WebGL » 查看文章
WebGL学习教程之Three.js学习笔记(第一篇)
来源:jb51  时间:2019/4/26 8:31:03  对本文有异议

webgl介绍

WebGL是一种3D绘图协议,它把JavaScript和OpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的一个JavaScript绑定,WebGL可以为HTML5 Canvas提供硬件3D加速渲染。

WebGL技术标准免去了开发网页专用渲染插件的麻烦,可被用于创建具有复杂3D结构的网站页面,甚至可以用来设计3D网页游戏。

 原生的WebGl比较复杂,主要通过对顶点着色器和片元着色器的操作,来实现渲染,但实现起来比较复杂,需要一定的数学基础,但更多的是需要学习基础的耐心。

Three.js介绍

Three.js是一个js的开源框架,它把webgl的所有东西都封装好了,我们不再需要去了解webgl那些比较麻烦的细节,直接在此框架上进行开发,既方便,又快捷,而且很容易就能学习,相对于原生的webgl花100多行代码画几个三角形,Three.js只需要几行代码就能实现更复杂的3D效果。

下载地址: https://github.com/mrdoob/three.js

环境搭建

为了以后的学习方便,首先是搭建一个万能框架,所有的three.js开发都可以在此框架上进行。

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Three.js</title>
  6. <script src="../../../Import/three.js"></script>
  7. <script src="../../../Import/stats.js"></script>
  8. <script src="../../../Import/Setting.js"></script>
  9. <style type="text/css">
  10. div#canvas-frame {
  11. border: none;
  12. cursor: pointer;
  13. width: 100%;
  14. height: 850px;
  15. background-color: #333333;
  16. }
  17. </style>
  18. <script>
  19. let renderer;
  20. function initThree() {
  21. //TODO
  22. }
  23. let camera;
  24. function initCamera() {
  25. //TODO
  26. }
  27. let scene;
  28. function initScene() {
  29. //TODO
  30. }
  31. let light;
  32. function initLight() {
  33. //TODO
  34. }
  35. let cube;
  36. function initObject() {
  37. //TODO
  38. }
  39. //提前定义好的一个功能文件,方便以后的每一个程序调用
  40. function initSetting() {
  41. loadAutoScreen(camera,renderer);//自适应屏幕
  42. loadFullScreen();//网页全屏播放
  43. loadStats();//性能检测插件
  44. }
  45. function threeStart() {
  46. initSetting();
  47. initThree();
  48. initCamera();
  49. initScene();
  50. initLight();
  51. initObject();
  52. animation();
  53. }
  54. function animation(){
  55. renderer.clear();
  56. renderer.render(scene,camera);
  57. stats.update();
  58. requestAnimationFrame(animation);
  59. }
  60. </script>
  61. </head>
  62. <body onload="threeStart()">
  63. <div id="canvas-frame"></div>
  64. </body>
  65. </html>

其中Setting.js是我写在另一个文件里面的功能文件,把一些常用的功能放在里面,方便以后写的程序可以直接去调用

Setting.js的代码如下:

  1. //进入全屏模式的函数
  2. function loadFullScreen() {
  3. //进入全屏
  4. function requestFullScreen(element) {
  5. let de = document.querySelector(element) || document.documentElement;
  6. if (de.requestFullscreen) {
  7. de.requestFullscreen();
  8. } else if (de.mozRequestFullScreen) {
  9. de.mozRequestFullScreen();
  10. } else if (de.webkitRequestFullScreen) {
  11. de.webkitRequestFullScreen();
  12. }
  13. }
  14. //退出全屏
  15. function exitFullscreen(element) {
  16. let de = document.querySelector(element) || document.documentElement;
  17. if (de.exitFullscreen) {
  18. de.exitFullscreen();
  19. } else if (de.mozCancelFullScreen) {
  20. de.mozCancelFullScreen();
  21. } else if (de.webkitCancelFullScreen) {
  22. de.webkitCancelFullScreen();
  23. }
  24. }
  25. //监听事件
  26. document.onkeydown = function (ev) {
  27. keydownForScreen(ev);
  28. }
  29. //按键检测,112对应键盘的F2,可以检测其他的键位
  30. function keydownForScreen(ev) {
  31. if (ev.keyCode == 113) {
  32. requestFullScreen();
  33. requestFullScreen('body');
  34. requestFullScreen('#main');
  35. }
  36. }
  37. }
  38. //加载性能监视器的函数
  39. function loadStats() {
  40. stats = new Stats();
  41. stats.domElement.style.position = 'absolute';
  42. stats.domElement.style.left = '8px';
  43. stats.domElement.style.top = '8px';
  44. let body = document.getElementsByTagName('body');
  45. body[0].appendChild(stats.domElement);
  46. }
  47. //屏幕适应的函数
  48. function loadAutoScreen(camera, renderer) {
  49. window.addEventListener('resize', onResize, false);
  50. function onResize() {
  51. camera.aspect = window.innerWidth / window.innerHeight;
  52. camera.updateProjectionMatrix();
  53. renderer.setSize(window.innerWidth, window.innerHeight);
  54. }
  55. }

还有另一个引入的文件stats.js的下载地址:https://github.com/mrdoob/stats.js

至此,一个万能的架子就已经搭建完成,可以开始编写第一个three.js程序

总结

以上所述是小编给大家介绍的WebGL学习教程之Three.js学习笔记,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对w3xue网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号