34-THREE.JS 游泳圈
- <!DOCTYPE html>
- <html>
- <head>
- <title>Example 05.08 - Basic 3D geometries - Torus</title>
- <script src="https://cdn.bootcss.com/three.js/r67/three.js"></script>
- <script src="https://cdn.bootcss.com/stats.js/r10/Stats.min.js"></script>
- <script type="text/javascript" src="https://cdn.bootcss.com/dat-gui/0.7.3/dat.gui.js"></script>
- <style>
- body {
- margin: 0;
- overflow: hidden;
- }
- </style>
- </head>
- <body>
- <div id="Stats-output">
- </div>
- <div id="WebGL-output">
- </div>
- <script type="text/javascript">
- // 初始化
- function init() {
- var stats = initStats();
- // 创建一个场景
- var scene = new THREE.Scene();
- // 创建一个相机
- var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000);
- // 创建渲染器
- var webGLRenderer = new THREE.WebGLRenderer();
- webGLRenderer.setClearColor(new THREE.Color(0xEEEEEE, 1.0));
- webGLRenderer.setSize(window.innerWidth, window.innerHeight);
- webGLRenderer.shadowMapEnabled = true;
- var torus = createMesh(new THREE.TorusGeometry(10, 10, 8, 6, Math.PI * 2));
- // 创建一个游泳圈 把它添加到场景中去
- scene.add(torus);
- // 设置相机的坐标和朝向
- camera.position.x = -30;
- camera.position.y = 40;
- camera.position.z = 50;
- camera.lookAt(new THREE.Vector3(10, 0, 0));
- // 把渲染之后的效果放到DOM元素中去
- document.getElementById("WebGL-output").appendChild(webGLRenderer.domElement);
- var step = 0;
- var controls = new function () {
- this.radius = torus.children[0].geometry.parameters.radius;
- this.tube = torus.children[0].geometry.parameters.tube;
- this.radialSegments = torus.children[0].geometry.parameters.radialSegments;
- this.tubularSegments = torus.children[0].geometry.parameters.tubularSegments;
- this.arc = torus.children[0].geometry.parameters.arc;
- this.redraw = function () {
- // remove the old plane
- scene.remove(torus);
- // create a new one
- torus = createMesh(new THREE.TorusGeometry(controls.radius, controls.tube, Math.round(controls.radialSegments), Math.round(controls.tubularSegments), controls.arc));
- // add it to the scene.
- scene.add(torus);
- };
- };
- var gui = new dat.GUI();
- gui.add(controls, 'radius', 0, 40).onChange(controls.redraw);
- gui.add(controls, 'tube', 0, 40).onChange(controls.redraw);
- gui.add(controls, 'radialSegments', 0, 40).onChange(controls.redraw);
- gui.add(controls, 'tubularSegments', 1, 20).onChange(controls.redraw);
- gui.add(controls, 'arc', 0, Math.PI * 2).onChange(controls.redraw);
- render();
- function createMesh(geom) {
- // 申请两种材料
- var meshMaterial = new THREE.MeshNormalMaterial();
- meshMaterial.side = THREE.DoubleSide;
- var wireFrameMat = new THREE.MeshBasicMaterial();
- wireFrameMat.wireframe = true;
- // 创建多材料物体
- var mesh = THREE.SceneUtils.createMultiMaterialObject(geom, [meshMaterial, wireFrameMat]);
- return mesh;
- }
- function render() {
- stats.update();
- torus.rotation.y = step += 0.01;
- requestAnimationFrame(render);
- webGLRenderer.render(scene, camera);
- }
- function initStats() {
- var stats = new Stats();
- stats.setMode(0); // 0: fps, 1: ms
- stats.domElement.style.position = 'absolute';
- stats.domElement.style.left = '0px';
- stats.domElement.style.top = '0px';
- document.getElementById("Stats-output").appendChild(stats.domElement);
- return stats;
- }
- }
- window.onload = init;
- </script>
- </body>
- </html>
34-THREE.JS 游泳圈的更多相关文章
- 34、JS/AJAX
1)回顾JS中核心内容 2)了解WEB1.0和WEB2.0时代的技术与特点 3)理解AJAX的产生背景.工作原理与特点 4)掌握AJAX常用API及应用 声明:服务端使用Servlet技术 一 ...
- 34.node.js之Url & QueryString模块
转自:https://i.cnblogs.com/posts?categoryid=1132005&page=6//引用 var url = require("url"); ...
- 前端面试题总结(js、html、小程序、React、ES6、Vue、算法、全栈热门视频资源)
写在前面 参考答案及资源在看云平台发布,如果大家想领取资源以及查看答案,可直接前去购买.一次购买永久可看,文档长期更新!有什么意见与建议欢迎您及时联系作者或留言回复! 文档描述 本文是关注微信小程序的 ...
- JS面试题第一弹
1.javascript的typeof返回哪些数据类型 alert(typeof [1, 2]); //object alert(typeof 'leipeng'); //string ...
- js总结体会
1.表单元素提交之后(不刷新)数据还是会存在的,想要提交之后清除数据可以在ajax提交数据后,用reset()方法清除数据. 2.js中怎么判断哪个单选控件被选中了呢,即表单控件被选中哪些属性发生了变 ...
- MongoDB学习笔记二—Shell操作
数据类型 MongoDB在保留JSON基本键/值对特性的基础上,添加了其他一些数据类型. null null用于表示空值或者不存在的字段:{“x”:null} 布尔型 布尔类型有两个值true和fal ...
- 40 个让你的网站更加友好的 jQuery 插件
一个插件的基本功能是执行一个含有元素集合的函数数组.每个方法和jQuery核心组成一个插件,如.fadeOut()或.addClass().一个jQuery插件是一个基本的可以扩充jQuery 原型对 ...
- 40个让你的网站屌到爆的jQuery插件
一 个插件的基本功能是执行一个含有元素集合的函数数组.每个方法和jQuery核心组成一个插件,如.fadeOut()或.addClass().一个 jQuery插件是一个基本的可以扩充jQuery 原 ...
- 2016 年 50 个最佳的轻量级 JavaScript 框架和库
作者:IT程序狮链接:https://zhuanlan.zhihu.com/p/24598210来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 回顾今年已发布的 JS ...
随机推荐
- react.js 引用 NavBar 报错svg-spite-loader
Navbar iconName="false" 配置 改为 iconName={this.props.bool}
- Android-服务中监听电源键和Home键的广播、在锁屏下仍然工作的方法
Android-服务中监听电源键和Home键的广播 http://blog.csdn.net/u014657752/article/details/49512485 Android开发之如何监听让服 ...
- M4中遇到的问题
MDK5的安装以及破解 这里遇到了一个问题,PDF上并没有扯个界面我就先截了个图然后点安装,后来看来这其中并没有什么问题 在这里就会出现卡死的情况,也就是说并不能从这个界面上下载两个相应的安装包 在M ...
- 20145312 《Java程序设计》第八周学习总结
20145312 <Java程序设计>第八周学习总结 学习笔记 Chapter 15时间与日期 15.1 日志 15.1.1 日志API简介 java.util.logging包提供了日志 ...
- 解读:计数器Counter
Counters: 44 File System Counters FILE: Number of bytes read=655771325 FILE: Number of bytes written ...
- JAVA链接数据库
链接:http://www.cnblogs.com/centor/p/6142775.html 开发工具: MyEclipse MySQL JDBC驱动:mysql-connector-java-5. ...
- Oracle18c创建不带C##的用户
18c数据库分两种数据库CDB(容器数据库).PDB(可插拔数据库) 数据库安装完成之后,默认是CDB 创建一个用户,必须要用C##开头,但使用PDB没有这个限制 1. 先查看PDB数据库servic ...
- kylin入门到实战:cube详述
版权申明:转载请注明出处. 文章来源:http://bigdataer.net/?p=306 排版乱?请移步原文获得更好的阅读体验 1.什么是cube? cube是所有dimession的组合,每一种 ...
- [PyTorch]PyTorch/python常用语法/常见坑点
目录 1. make_grid() 2. join与os.path.join() 3. 读文件写文件 4. json操作 5. tensorboard使用 6. python shutil.move ...
- 解题报告:51nod 加农炮
2017-10-07 16:15:16 writer:pprp 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 一个长度为M的正整 ...