来源:http://blog.csdn.net/srk19960903/article/details/70214556

使用了点云拼凑出了照片轮播十分有趣,于是用threejs实现这个效果。

首先这件事情分为两步:1.根据图片数据创建对应大小、颜色的点云。2.给点云加上着色器,给渲染管线传递点云变换需要的数据(位置数据,颜色数据)。

今天我们先来实现加载图片并且通过图片数据加载点云:

首先绘制一个200*200的画布,然后将图片绘制到画布上,接下来将图片数据存放到进行存储,等待后面使用。

canvas = document.createElement('canvas');
content = canvas.getContext('2d');
canvas.width = 200;
canvas.height = 200;
document.body.appendChild( canvas );
// container.appendChild( canvas );
img = new Image();
img.src = "bg1.jpg";
canvas.style.position = 'absolute';
img.onload = function () {
content.drawImage(img, 10, 10, canvas.width, canvas.height);
imgDate = content.getImageData(0,0,canvas.width, canvas.height);
createPotCloud(); //创建点云
};

当图片加载完成之后调用创建点云的方法~不然会出现错误。首先根据画布长宽像素,创建相应数量的点对象,positions和colors存放每个点的位置坐标和颜色信息(这里的颜色只有rgb没有a),最后把这些信息加入geometry对象的attribute里面,这里特别要注意的有两点:

1.imgData里面的数据与图片是上下颠倒的需要用canvas.height-i才可以得到正确的图像。

2.图片数据在canvas里面最大值是255而在threejs里面是1所以需要给每个颜色值除以255.0才可以得到正确的颜色,不然全都是白色的。

这样就完成了点云的创建,等有时间在做点云照片的交互~。

function createPotCloud() {     //创建点云
console.log(imgDate);
var particles = canvas.width * canvas.height;
var geometry = new THREE.BufferGeometry(); var positions = new Float32Array( particles * 3 );
var colors = new Float32Array( particles * 3 );
for ( var i = 0; i < positions.length; i ++ ) {
// positions
positions[ 3*i ] = parseInt(i%canvas.width);
positions[ 3*i + 1 ] = 200+ parseInt((canvas.height-i)/canvas.width) ;
positions[ 3*i + 2 ] = 0;
// colors colors[ 3*i ] = imgDate.data[ 4*i ]/255.0;
colors[ 3*i + 1 ] = imgDate.data[ 4*i + 1]/255.0;
colors[ 3*i + 2 ] = imgDate.data[ 4*i + 2]/255.0;
}
geometry.addAttribute( 'position', new THREE.BufferAttribute( positions, 3 ) );
geometry.addAttribute( 'color', new THREE.BufferAttribute( colors, 3 ) );
// geometry.computeBoundingSphere();
console.log("geometry",geometry);
var material = new THREE.PointsMaterial( { size: 1, vertexColors: THREE.VertexColors } );
var points = new THREE.Points( geometry, material );
scene.add( points ); }

最后让我们看看实现的效果吧:

最后附上github的地址:https://github.com/StringKun/ThreeJSPotCloud

使用threejs点云秀出酷炫的图片效果(一)的更多相关文章

  1. 15个来自 CodePen 的酷炫 CSS 动画效果【下篇】

    CodePen 是一个在线的前端代码编辑和展示网站,能够编写代码并即时预览效果.你在上面可以在线分享自己的 Web 作品,也可以欣赏到世界各地的优秀开发者在网页中实现的各种令人惊奇的效果. 今天这篇文 ...

  2. 赞!15个来自 CodePen 的酷炫 CSS 动画效果

    CodePen 是一个在线的前端代码编辑和展示网站,能够编写代码并即时预览效果.你在上面可以在线分享自己的 Web 作品,也可以欣赏到世界各地的优秀开发者在网页中实现的各种令人惊奇的效果. 今天这篇文 ...

  3. 使用Three.js网页引擎创建酷炫的3D效果的标签墙

    使用Three.js引擎(这是开源的webgl三维引擎,gitgub)进行一个简单应用. 做一个酷炫的3d效果的标签墙(已经放在我的博客首页,大屏幕可见), 去我的博客首页看看实际效果 www.son ...

  4. 一分钟搞定触手app主页酷炫滑动切换效果

    代码地址如下:http://www.demodashi.com/demo/12826.html 前言: 前几天在看手机直播的时候,自己就用上了触手app.一进到主页就看上了里面页面切换的效果,自己想这 ...

  5. WAIC | 奇点云携「酷炫AI应用」亮相2019世界人工智能大会

    你是否还在疑惑“人工智能可否改变世界?” 那么,你该有一些危机感了. 机器视觉.自然语言处理.智能语音.机器人问诊.智慧驾驶……这些AI技术及应用早已渗入了我们日常生活的点滴. 29日,以「智联世界, ...

  6. 个人学习JQ插件编写成果:little酷炫的图片滑动切换效果

    工作一个多月了,好久没来冒冒泡了,看了@wayong的JQ插件教程,自己编写了一个模仿拉勾网首页广告栏滑动特效的JQ插件,现在跟朋友们分享分享! 先上demo链接:http://runjs.cn/de ...

  7. Flutter 实现酷炫的3D效果

    老孟导读:此文讲解3个酷炫的3D动画效果. 下面是要实现的效果: Flutter 中3D效果是通过 Transform 组件实现的,没有变换效果的实现: class TransformDemo ext ...

  8. CSS动画划入划出酷炫

    HTML插入 <!DOCTYPE html> <html class="no-js iarouse"> <head> <meta char ...

  9. photoshop打造超酷炫火焰人像效果

    效果图看上去非常的酷.制作方法跟火焰字过程差不多.唯一不同的是前期的处理,需要用滤镜把人物轮廓路径找出来,去色后再用制作火焰的过程制作.最后把最好的火焰叠加到人物上面,适当用蒙版控制区域即可.原图 最 ...

随机推荐

  1. python带参数装饰器使用

    # -*- coding: utf-8 -* """TensorFlow指定使用GPU工具类 author: Jill usage: 方法上加@tf_with_devic ...

  2. JoinableQueue---创建可连接的共享进程队列

    创建可连接的共享进程队列.这就像是一个Queue对象,但队列允许项目的使用者通知生产者项目已经被成功处理. 通知进程是使用共享的信号和条件变量来实现的. from multiprocessing im ...

  3. selenium+python自动化93-Chrome报错:Python is likely shutting down

    遇到问题 报错信息:sys.meta_path is None, Python is likely shutting down 1.我的环境: python 3.6 selenium 2.53.6 c ...

  4. mysql 5.7新特新 操作json 数组

    ; UPDATE EDI.edi_history SET response_summary = JSON_REPLACE(response_summary, ; 对于json数组,使用$[*]  然后 ...

  5. 字符串和JSON对象互转的方法

    采用Ajax的项目开发过程中,经常需要将JSON格式的字符串返回到前端,前端解析成JS对象(JSON ).字符串转JSON对象 1.eval方式解析.function strToJson(str){ ...

  6. 下载的chm文件打不开问题

    下载的chm文件无法打开,是因为此文件是在其它电脑上编辑的,上面留有原电脑的信息,当下载打开时,发现电脑信息不一致,因此会将应用锁定. 操作:文件  -->  属性  -->常规 --&g ...

  7. UI5-文档-4.9-Component Configuration

    在我们介绍了模型-视图-控制器(MVC)概念的所有三个部分之后,现在我们将讨论SAPUI5的另一个重要的结构方面. 在这一步中,我们将把所有UI资产封装在一个独立于索引的组件中.html文件.组件是S ...

  8. vue基础——vue介绍

    声明式渲染——文本插值: 数据和dom已经进行了关联,所有东西都是响应式的 index.html <div id="app0"> {{message}} </di ...

  9. mysql 慢查询记录方法

    ========================================================= 方法一: 这个方法我正在用,呵呵,比较喜欢这种即时性的. Mysql5.0以上的版本 ...

  10. Gearman简介

    gearman,从名字上看叫做“齿轮工”,就是通过齿轮把不同的组件组合在一起.通常,多语言多系统之间的集成是项目开发中一个比较头疼的问题.一般会采用RPC风格或者是REST风格的WebService. ...