26-THREE.JS 虚线绘制线框样式几何图形的材质
- <!DOCTYPE html>
- <html>
- <head>
- <title></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>
- <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 renderer = new THREE.WebGLRenderer();
- renderer.setClearColor(new THREE.Color(0x000000, 1.0));
- renderer.setSize(window.innerWidth, window.innerHeight);
- renderer.shadowMapEnabled = true;
- // 设置相机坐标
- camera.position.x = -30;
- camera.position.y = 40;
- camera.position.z = 30;
- camera.lookAt(scene.position);
- // 添加自然光
- var ambientLight = new THREE.AmbientLight(0x0c0c0c);
- scene.add(ambientLight);
- // 添加聚光灯
- var spotLight = new THREE.SpotLight(0xffffff);
- spotLight.position.set(-40, 60, -10);
- spotLight.castShadow = true;
- scene.add(spotLight);
- // 高斯帕曲线
- var points = gosper(4, 60);
- var lines = new THREE.Geometry();
- var colors = [];
- var i = 0;
- points.forEach(function (e) {
- lines.vertices.push(new THREE.Vector3(e.x, e.z, e.y));
- colors[i] = new THREE.Color(0xffffff);
- colors[i].setHSL(e.x / 100 + 0.5, ( e.y * 20 ) / 300, 0.8);
- i++;
- });
- lines.colors = colors;
- lines.computeLineDistances();
- var material = new THREE.LineDashedMaterial({
- vertexColors: true,
- color: 0xffffff,
- dashSize: 2,
- gapSize: 2,
- scale: 0.1
- });
- var line = new THREE.Line(lines, material);
- line.position.set(25, -30, -60);
- scene.add(line);
- // 把渲染后的结果放到DOM元素中
- document.getElementById("WebGL-output").appendChild(renderer.domElement);
- var step = 0;
- render();
- function render() {
- stats.update();
- line.rotation.z = step += 0.01;
- requestAnimationFrame(render);
- renderer.render(scene, camera);
- }
- function gosper(a, b) {
- var turtle = [0, 0, 0];
- var points = [];
- var count = 0;
- rg(a, b, turtle);
- return points;
- function rt(x) {
- turtle[2] += x;
- }
- function lt(x) {
- turtle[2] -= x;
- }
- function fd(dist) {
- // ctx.beginPath();
- points.push({x: turtle[0], y: turtle[1], z: Math.sin(count) * 5});
- // ctx.moveTo(turtle[0], turtle[1]);
- var dir = turtle[2] * (Math.PI / 180);
- turtle[0] += Math.cos(dir) * dist;
- turtle[1] += Math.sin(dir) * dist;
- points.push({x: turtle[0], y: turtle[1], z: Math.sin(count) * 5});
- // ctx.lineTo(turtle[0], turtle[1]);
- // ctx.stroke();
- }
- function rg(st, ln, turtle) {
- st--;
- ln = ln / 2.6457;
- if (st > 0) {
- // ctx.strokeStyle = '#111';
- rg(st, ln, turtle);
- rt(60);
- gl(st, ln, turtle);
- rt(120);
- gl(st, ln, turtle);
- lt(60);
- rg(st, ln, turtle);
- lt(120);
- rg(st, ln, turtle);
- rg(st, ln, turtle);
- lt(60);
- gl(st, ln, turtle);
- rt(60);
- }
- if (st == 0) {
- fd(ln);
- rt(60);
- fd(ln);
- rt(120);
- fd(ln);
- lt(60);
- fd(ln);
- lt(120);
- fd(ln);
- fd(ln);
- lt(60);
- fd(ln);
- rt(60)
- }
- }
- function gl(st, ln, turtle) {
- st--;
- ln = ln / 2.6457;
- if (st > 0) {
- // ctx.strokeStyle = '#555';
- lt(60);
- rg(st, ln, turtle);
- rt(60);
- gl(st, ln, turtle);
- gl(st, ln, turtle);
- rt(120);
- gl(st, ln, turtle);
- rt(60);
- rg(st, ln, turtle);
- lt(120);
- rg(st, ln, turtle);
- lt(60);
- gl(st, ln, turtle);
- }
- if (st == 0) {
- lt(60);
- fd(ln);
- rt(60);
- fd(ln);
- fd(ln);
- rt(120);
- fd(ln);
- rt(60);
- fd(ln);
- lt(120);
- fd(ln);
- lt(60);
- fd(ln);
- }
- }
- }
- 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>
26-THREE.JS 虚线绘制线框样式几何图形的材质的更多相关文章
- 25-THREE.JS 绘制线框样式几何图形的材质 线材质
<!DOCTYPE html> <html> <head> <title></title> <script src="htt ...
- html+js+highcharts绘制圆饼图表的简单实例
下面我就为大家带来一篇html+js+highcharts绘制圆饼图表的简单实例.我觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随我过来看看吧 实例如下: 1 2 3 4 5 6 7 8 ...
- 改写js原装的alert样式
1.将下面的js代码单独到一个js文件中,然后在页面中引用 AlertDialog.js //改写js原装的alert样式 var t; var timeclose = 0; var showBack ...
- OpenGL学习-------绘制简单的几何图形
本次课程所要讲的是绘制简单的几何图形,在实际绘制之前,让我们先熟悉一些概念. 一.点.直线和多边形我们知道数学(具体的说,是几何学)中有点.直线和多边形的概念,但这些概念在计算机中会有所不同.数学上的 ...
- 使用jquery.PrintArea.js打印网页的样式问题
在使用jquery.PrintArea.js打印局部网页样式的时候,发现样式打印不出来,在网上找了好多资料,整理一下分享给大家 一.先看看css的引用文件方式 1.直接在内部的元素中使用”style” ...
- 用JS控制CSS基本样式
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp29 用JS控制CSS基本样式的方法 CSS code .class1 { ...
- js中获取css样式属性值
关于js中style,currentStyle和getComputedStyle几个注意的地方 (1)用js的style只能获取元素的内联样式,内部样式和外部样式使用style是获取不到的.针对css ...
- ImageDrawer.js图片绘制插件
ImageDrawer.js图片绘制插件有以下一些可用的配置参数. Duration:整个动画或每个步骤的绘制时间(以秒为单位) Background:在绘图时将颜色放在图片上 Callback:绘画 ...
- JS获取内联样式
JS获取内联样式 //获取内联样式 function getCss(obj,attr){//obj:对象,name:style属性 if(obj.currentStyle) { return obj. ...
随机推荐
- BZOJ2648: SJY摆棋子&&2716: [Violet 3]天使玩偶
BZOJ2648: SJY摆棋子 BZOJ2716: [Violet 3]天使玩偶 BZOJ氪金无极限... 其实这两道是同一题. 附上2648的题面: Description 这天,SJY显得无聊. ...
- 【零基础学习iOS开发】【02-C语言】08-基本运算
一.算术运算符 算术运算符很地简单.就是小学数学里面的一些加减乘除操作.只是呢.还是有一些语法细节须要注意的. 1.加法运算符 + 1 int a = 10; 2 3 int b = a + 5; 在 ...
- (转)JAVA-反射机制的使用
Java反射机制的实现原理 反射机制:所谓的反射机制就是java语言在运行时拥有一项自观的能力.通过这种能力可以彻底的了解自身的情况为下一步的动作做准备.下面具体介绍一下java的反射机制.这里你将颠 ...
- redis的图形化工具(四)
1. 介绍 本篇会介绍几个关于redis的图形化的监控工具和管理工具. 2. redis-stat redis-stat提供终端和web端的监控页面,它安装和使用起来很简单. 安装只需要一条指令. $ ...
- python2函数
1.函数的定义 函数的定义形式如下: def <name>(arg1,arg2...argN): <statements> 函数的名字必须以字母开头,可以包括下划线.函数的目的 ...
- Linux Shell编程第2章——Linux文件系统
目录 用户和用户组管理 用户管理常用命令 用户组管理常用命令 文件和目录操作 文件操作常用命令 目录操作常用命令 文件和目录权限管理 文件查找--find 用户和用户组管理 用户管理常用命令 用户的角 ...
- Bootstrap总结二
参考我的博客:http://www.isedwardtang.com/2017/09/01/bootstrap-primer-2/
- maven入门学习(一)
一.maven介绍 1.软件开发中我们为什么要使用maven呢?(纯属个人体会观点,如有错误,敬请指正) (1)其一,企业岗位需求,目前的IT开发招聘岗位上,基本都要求会使用maven. ...
- Linux 进程管理 进程优先级管理
Linux进程优先级 Linux 是一个多用户.多任务的操作系统,系统中通常运行着非常多的进程.但是 CPU 在一个时钟周期内只能运算一条指令(现在的 CPU 采用了多线程.多核心技术,所以在一个时钟 ...
- ==与equals的各种情况
== 能用于基本类型之间.基本类型与引用类型之间及相同引用类型之间,不能用于不同引用类型之间 对于基本类型,取值来对比,对于引用类型,取地址来对比 int a= 1; Integer b= 1; Sy ...