matlab转化图片点云,three.js把图片转换成3D点云图特效
JavaScript
语言:
JaveScriptBabelCoffeeScript
确定
window.addEventListener("DOMContentLoaded", app);
function app() {
var form = document.querySelector("form"),
imgUpload = document.getElementsByName("img_upload")[0],
imgName = document.getElementsByName("img_name")[0],
canvas = document.createElement("canvas"),
c = canvas.getContext("2d"),
scene,
camera,
renderer,
textureLoader = new THREE.TextureLoader(),
pinGeo = new THREE.Geometry(),
pinMat = new THREE.PointsMaterial({
map: textureLoader.load("/uploads/1911/pin.png"),
size: 1.5,
transparent: true
}),
img = null,
pinsPerSide = 100,
pinsShouldMove = false,
pinZPositions = [],
adjustWindow = () => {
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(window.innerWidth, window.innerHeight);
},
getLightness = (R, G, B) => {
let r = R / 255,
g = G / 255,
b = B / 255,
cmin = Math.min(r, g, b),
cmax = Math.max(r, g, b),
light = (cmax + cmin) / 2;
light = Math.round(light * 100);
return light;
},
handleImgUpload = e => {
return new Promise((resolve, reject) => {
let target = !e ? imgUpload : e.target;
if (target.files.length) {
let reader = new FileReader();
reader.onload = e2 => {
img = new Image();
img.src = e2.target.result;
img.onload = () => {
resolve();
};
img.onerror = () => {
img = null;
reject("Image nullified due to file corruption or non-image upload");
};
imgName.placeholder = target.files[0].name;
};
reader.readAsDataURL(target.files[0]);
}
});
},
imgUploadValid = () => {
let files = imgUpload.files,
fileIsThere = files.length > 0,
isImage = files[0].type.match("image.*"),
valid = fileIsThere && isImage;
return valid;
},
init = () => {
// setup
scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 0.1, 1000);
renderer = new THREE.WebGLRenderer();
renderer.setClearColor(new THREE.Color(0x000000));
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.shadowMap.enabled = true;
let camControls = new THREE.OrbitControls(camera, renderer.domElement);
// pins
for (let y = pinsPerSide - 1; y >= 0; --y) {
for (let x = 0; x < pinsPerSide; ++x) {
let center = pinsPerSide / 2 - 0.5,
pin = new THREE.Vector3();
pin.x = x - center;
pin.y = y - center;
if (x % 2 == 1)
pin.y += 0.5;
pinGeo.vertices.push(pin);
pinZPositions.push(0);
}
}
let pins = new THREE.Points(pinGeo, pinMat);
pins.name = "Pins";
scene.add(pins);
// camera
camera.position.set(45, 0, 105);
camera.lookAt(scene.position);
// render
let body = document.body;
body.insertBefore(renderer.domElement, body.childNodes[4]);
renderScene();
// deal with preserved input
if (imgUpload.value != "")
renderPromise();
},
movePins = () => {
pinZPositions.forEach((zPos, i) => {
let vertex = pinGeo.vertices[i];
if (vertex.z > zPos) {
--vertex.z;
if (vertex.z <= zPos)
vertex.z = zPos;
} else if (vertex.z < zPos) {
++vertex.z;
if (vertex.z >= zPos)
vertex.z = zPos;
}
});
pinGeo.verticesNeedUpdate = true;
// stop moving pins when all are in their new positions
if (pinZPositions.every((z, i) => z == pinGeo.vertices[i].z))
pinsShouldMove = false;
},
renderPromise = e => {
handleImgUpload(e).then(() => {
if (imgUploadValid()) {
updateCanvas();
updateImg();
setTimeout(() => {
pinsShouldMove = true;
}, 300);
}
}).catch(msg => {
console.log(msg);
});
},
renderScene = () => {
if (pinsShouldMove)
movePins();
renderer.render(scene, camera);
requestAnimationFrame(renderScene);
},
updateCanvas = () => {
// restrict image size, keep it proportional
let imgWidth = img.width,
imgHeight = img.height;
if (imgWidth >= imgHeight) {
if (imgWidth >= pinsPerSide) {
imgWidth = pinsPerSide;
imgHeight = imgWidth * (img.height / img.width);
}
} else {
if (imgHeight >= pinsPerSide) {
imgHeight = pinsPerSide;
imgWidth = imgHeight * (img.width / img.height);
}
}
// update canvas
c.clearRect(0, 0, pinsPerSide, pinsPerSide);
let imgX = pinsPerSide / 2 - imgWidth / 2,
imgY = pinsPerSide / 2 - imgHeight / 2;
c.drawImage(img, imgX, imgY, imgWidth, imgHeight);
},
updateImg = () => {
let imgData = c.getImageData(0, 0, pinsPerSide, pinsPerSide),
data = imgData.data;
for (let i = 0; i < data.length; i += 4) {
let lightness = getLightness(data[i], data[i + 1], data[i + 2]),
pinDistance = lightness / 5;
pinZPositions[i / 4] = pinDistance;
}
};
init();
imgUpload.addEventListener("change", renderPromise);
window.addEventListener("resize", adjustWindow);
}
matlab转化图片点云,three.js把图片转换成3D点云图特效相关推荐
- JavaScript 逼真图片倒计时实现代码 js时间图片倒计时
JavaScript 逼真图片倒计时实现代码 js时间图片倒计时 效果图: <!doctype html> <html> <head> <meta cha ...
- js 中日期 转换成时间戳 例如2013-08-30 转换为时间戳
js 中日期 转换成时间戳 例如2013-08-30 转换为时间戳 热心网友 2018-11-18 js字符串转化时间戳可以使用自带函数 Date(要转化的时间字符串)先转化为Date类型,之后再将 ...
- 如何用js将日期转换成时间戳
一.日期转换成时间戳 js字符串转化成时间戳可以使用自带函数Date(要转化的时间字符串)先转化为Date类型,之后再将Date类型转化为时间戳类型,其中时间字符串有要求,形式必须是yyyy-MM-d ...
- 在WPF中将图片转换成3D图像并可以旋转
原文:在WPF中将图片转换成3D图像并可以旋转 时光偷走的,永远都是我们眼皮底下看不见的珍贵. https://pan.baidu.com/s/14dk-OU2SR0nxXj2bL4bVpQ 首先先看 ...
- js中将字符串转换成json的三种方式
ECMA-262(E3) 中没有将JSON概念写到标准中,还好在 ECMA-262(E5) 中JSON的概念被正式引入了,包括全局的JSON对象和Date的toJSON方法. 1,eval方式解析,恐 ...
- js将阿拉伯数字转换成中文的大写数字
js将阿拉伯数字转换成中文的大写数字 export const numberToChinese = (num) => {var AA = new Array("零", &qu ...
- js将数字转换成万、亿、万亿
// js将数字转换成万.亿.万亿 export const numberFormat = (value)=> {var param = {};var k = 10000,sizes = ['' ...
- 用原生js把数字转换成货币人民币表示带逗号表示方法
用原生js把数字转换成货币人民币表示带逗号表示方法 function rmb(str){let strArr = String( parseFloat(str).toFixed(2) ).split( ...
- js将秒转换成几天几小时几分几秒,每秒刷新
//js将秒转换成几天几小时几分几秒function getDuration(second) {var days = Math.floor(second / 86400);var hours = Ma ...
最新文章
- jfinal为weebox弹出框传递参数
- 全球及中国植物脂肪酸行业供给前景与需求规模预测报告2022版
- C语言 | 编程实现4
- 将dataGridView数据转成DataTable
- 每扇区2048字节的U盘乱码的数据恢复
- Docker学习总结(22)——Docke run命令详解
- 一文读懂架构师都不知道的isinstance检查机制
- 在线sql服务器,SQL Server链接服务器
- Excel的设置 .net
- php mysql多条件查询界面_PHP组合查询多条件查询实例代码
- mac 生成公钥和私钥
- 贵州省中职学校计算机教材电子版,中职计算机基础课件贵州省中职学校计算机应用基础教学工作计划.doc...
- git整理——廖雪峰教程笔记
- 主控芯片成功案例:搭载北京君正X1000芯片,收款计算合二为一
- 什么是大数据与智能数据?什么是惯性测量单元与GNSS?
- C.I.刘易斯的学术之路--- 刘易斯逻辑之十二尾篇
- 信息与计算机科学讲座,【创新创业 计科在行动】2015级信息与计算科学专业大学生创新讲座、专业教育讲座暨学术前沿讲座专题报道...
- 阿里云服务器CPU Intel Xeon Platinum 8269CY和8163处理器区别
- Android开发新技术
- 开源视频平台 Kaltura