<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<style>
body {
background: black;
overflow:hidden;
}
* {
margin:0;
padding:0;
}
</style>
</head>
<body>
<canvas id="C1"></canvas>
<script>
var loop ;

function canvas3d() {
var SCREEN_WIDTH = document.width;
var SCREEN_HEIGHT = document.height;
var fov = 250;
var HALF_WIDTH = SCREEN_WIDTH / 2;
var HALF_HEIGHT = SCREEN_HEIGHT / 2;
var numPoints = 10000;

var canvas = document.getElementById('C1');
var c = canvas.getContext("2d");
canvas.width = SCREEN_WIDTH;
canvas.height = SCREEN_HEIGHT;
var points = [];

function initPoints() {
for (var i = 0; i < numPoints; i++) {
points.push([
Math.random() * SCREEN_WIDTH - HALF_WIDTH,
Math.random() * SCREEN_HEIGHT - HALF_HEIGHT,
Math.random() * HALF_HEIGHT - HALF_HEIGHT
]);
}
}
function render() {
c.clearRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
for (var i in points) {
var z3d = points[i][2];
z3d -= 4;
if (z3d < -fov) { z3d += HALF_HEIGHT }
points[i][2] = z3d;
draw3Din2D(points[i]);
}
}

function draw3Din2D(point3D) {
var x3d = point3D[0];
var y3d = point3D[1];
var z3d = point3D[2];

var scale = fov / (fov + z3d);
var x2d = (x3d * scale) + HALF_WIDTH;
var y2d = (y3d * scale) + HALF_WIDTH;

c.lineWidth = scale;;
c.strokeStyle = "rgb(255,255,255)";
c.beginPath();
c.moveTo(x2d, y2d);

c.lineTo(x2d + 1, y2d);
c.lineTo(x2d + scale, y2d);
c.stroke();
}
initPoints();
window.clearInterval(loop);
loop = setInterval(function () { render(); }, 50);
}

canvas3d();

window.onresize=function () {
canvas3d();
};
</script>
</body>
</html>

最新文章

  1. Ubuntu14.04解决远程root-ssh拒绝登录
  2. UML基础系列:类图
  3. listview的ViewHolder优化
  4. HTML 表单和输入&lt;form&gt;&lt;input&gt;
  5. SQLServer 获取第几周开始日期
  6. css三级下拉的导航栏
  7. 8.0 BOM对象
  8. 【SoDiaoEditor电子病历编辑器】阶段性更新--新增复选框、日期控件、表格排版支持等
  9. 写了一个迷你confirm弹窗插件,有取消和确认操作处理并支持单个确认使用弹窗和锁屏禁止滚动
  10. ArrayList源码解析(JDK1.8)
  11. IntelliJ IDEA安装配置
  12. HFSS在进行仿真时端口与激励设置细则
  13. PHP如何实现在数据库随机获取几条记录
  14. [找工作] 2019秋招|从春招到秋招,Java岗经验总结(收获AT)
  15. ML.NET 0.8特性简介
  16. jboss的使用和安装
  17. (转)Elasticsearch查询规则------match和term
  18. python-day21--random模块
  19. 02.将uboot,kernel,rootfs下载到开发板上
  20. 一次tns连接错误的解决过程

热门文章

  1. Data Lake Analytics IP白名单设置攻略
  2. centos搭建svn 服务器 并同步到web 目录(总结)
  3. hive行转列的高级用法later view explode
  4. zt 比较各JAX-RS实现:CXF,Jersey,RESTEasy,Restlet
  5. idea启动报错:Access denied for user &#39;root &#39;@&#39;192.168.100.XXX&#39; (using password: YES)
  6. ajax成功请求到后台,但是前端报404错误
  7. R语言与显著性检验学习笔记
  8. 接口测试 Postman 做接口自动化测试_入门篇
  9. oracle-Mount
  10. 实现自定义docker 镜像共享