31-THREE.JS 正方体
- <!DOCTYPE html>
- <html>
- <head>
- <title>Example 05.04 - Basic 2D geometries - Cube</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 cube = createMesh(new THREE.BoxGeometry(10, 10, 10, 1, 1, 1));
- // 把正方体添加到场景中去
- scene.add(cube);
- // 设置相机的坐标和朝向
- camera.position.x = -20;
- camera.position.y = 30;
- camera.position.z = 40;
- camera.lookAt(new THREE.Vector3(10, 0, 0));
- // 添加聚光灯
- var spotLight = new THREE.SpotLight(0xffffff);
- spotLight.position.set(-40, 60, -10);
- scene.add(spotLight);
- // 把渲染的结果放到DOM元素中去
- document.getElementById("WebGL-output").appendChild(webGLRenderer.domElement);
- var step = 0;
- var controls = new function () {
- this.width = cube.children[0].geometry.parameters.width;
- this.height = cube.children[0].geometry.parameters.height;
- this.depth = cube.children[0].geometry.parameters.depth;
- this.widthSegments = cube.children[0].geometry.parameters.widthSegments;
- this.heightSegments = cube.children[0].geometry.parameters.heightSegments;
- this.depthSegments = cube.children[0].geometry.parameters.depthSegments;
- this.redraw = function () {
- // remove the old plane
- scene.remove(cube);
- // create a new one
- cube = createMesh(new THREE.BoxGeometry(controls.width, controls.height, controls.depth, Math.round(controls.widthSegments), Math.round(controls.heightSegments), Math.round(controls.depthSegments)));
- // add it to the scene.
- scene.add(cube);
- };
- };
- var gui = new dat.GUI();
- gui.add(controls, 'width', 0, 40).onChange(controls.redraw);
- gui.add(controls, 'height', 0, 40).onChange(controls.redraw);
- gui.add(controls, 'depth', 0, 40).onChange(controls.redraw);
- gui.add(controls, 'widthSegments', 0, 10).onChange(controls.redraw);
- gui.add(controls, 'heightSegments', 0, 10).onChange(controls.redraw);
- gui.add(controls, 'depthSegments', 0, 10).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();
- cube.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>
31-THREE.JS 正方体的更多相关文章
- 31.Node.js 常用工具 util
转自:http://www.runoob.com/nodejs/nodejs-module-system.html util 是一个Node.js 核心模块,提供常用函数的集合,用于弥补核心JavaS ...
- 前端必备的js知识点(转载)
1.本文主体源自:http://www.cnblogs.com/coco1s/p/4029708.html,有兴趣的可以直接去那里看,也可以看看我整理加拓展的.2.js是一门什么样的语言及特点? ...
- chenxi的js学习笔记
1.本文主体源自:http://www.cnblogs.com/coco1s/p/4029708.html,有兴趣的可以直接去那里看,也可以看看我整理加拓展的. 2.js是一门什么样的语言及特点? j ...
- NodeJs>------->>第三章:Node.js基础知识
第三章:Node.js基础知识 一:Node.js中的控制台 1:console.log.console.info 方法 console.log(" node app1.js 1> ...
- vs2010中关于HTML控件与服务器控件分别和js函数混合使用的问题
此文档解决以下问题: 1.在.cs文件中如何访问html控件? 在html控件中添加属性runat="server"即可 2.在html控件中,如何调用js函数? 在html控件中 ...
- Node.js进程通信模块child_process
前言 Node.js是一种单线程的编程模型,对Node.js的赞美和诟病的也都是因为它的单线程模型,所有的任务都在一个线程中完成(I/O等例外).单线程模型,不仅让代码非常简洁,更是直接避免了线程调度 ...
- 2016 年 50 个最佳的轻量级 JavaScript 框架和库
作者:IT程序狮链接:https://zhuanlan.zhihu.com/p/24598210来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 回顾今年已发布的 JS ...
- 基于express框架的应用程序骨架生成器介绍
作者:zhanhailiang 日期:2014-11-09 本文将介绍怎样使用express-generator工具高速生成基于express框架的应用程序骨架: 1. 安装express-gener ...
- Best JavaScript Tools for Developers
JavaScript solves multiple purposes; it helps you to create interactive websites, web applications, ...
随机推荐
- 4.Data Types in the mongo Shell-官方文档摘录
总结: 1.MongoDB 的BSON格式支持额外的数据类型 2 Date 对象内部存储64位字节存整数,存储使用NumberLong()这个类来存,使用NumberInt()存32位整数,128位十 ...
- Linux下如何安装Anaconda?
下载 从https://repo.continuum.io/archive/index.html上下载对应版本的Anaconda. 或者到官网:https://www.anaconda.com/dow ...
- 解释一下python中的成员运算符
通过成员运算符‘in’ 和 ‘not in’,我们可以确认一个值是否是另一个值的成员 print('me' in 'disappointment')#True print('us' in 'disap ...
- 第七课 GDB调试 (下)
1序言: 通过前面一节第六课 GDB调试 (下)文章,可以掌握理解了gdb调试:怎么启动.运行,打断点.查看变量.甚至改变变量等的知识,今天来大概讲解下调试bug的类型. 2知识点: 2.1 就像之前 ...
- Mysql数据表字段设置了默认值,插入数据后默认字段的值却为null,不是默认值
我将mysql的数据表的某个字段设置了默认值为1,当向该表插入数据的时候该字段的值不是默认值,而是null. 我的错误原因: 对数据库的操作我使用了持久化工具mybatis,插入数据的时候插入的是整个 ...
- springmvc 自定义拦截器
<mvc:interceptors> <!-- 配置自定义的拦截器 --> <bean class="com.atguigu.springmvc.interce ...
- PAT 天梯赛 L1-019. 谁先倒 【水】
题目链接 https://www.patest.cn/contests/gplt/L1-019 AC代码 #include <iostream> #include <cstdio&g ...
- LightOJ - 1236 (唯一分解定理)
题意:求有多少对数对(i,j)满足lcm(i,j) = n,1<=i<=j, 1<=n<=1e14. 分析:根据整数的唯一分解定理,n可以分解为(p1^e1)*(p2^e2)* ...
- 分组函数NTILE函数
这个分组函数 并不是 group by的分组.
- 20165101刘天野 2018-2019-2《网络对抗技术》Exp5 MSF基础应用
目录 20165101刘天野 2018-2019-2<网络对抗技术>Exp5 MSF基础应用 1. 实践内容 1.1一个主动攻击实践,如ms08_067; (1分) 1.2 一个针对浏览器 ...