亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

three.js 將圖片馬賽克化的示例代碼

 更新時(shí)間:2020年07月31日 10:31:15   作者:郭先生  
這篇文章主要介紹了three.js 將圖片馬賽克化的方法,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下

這篇郭先生來說說BufferGeometry,類型化數(shù)組和粒子系統(tǒng)的使用,并且讓圖片有馬賽克效果(同理可以讓不清晰的圖片清晰化),如圖所示

1. 解析圖片

解析圖片和上一篇一樣

initCanvas() {
  canvas = document.createElement('canvas');
  content = canvas.getContext('2d');
  canvas.width = 1600;
  canvas.height = 1200;
  img = new Image();
  img.crossOrigin = '*';
  img.src = "/static/images/base/girl.jpg";
  img.onload = () => {
    content.drawImage(img, 0, 0, canvas.width, canvas.height);
    imgDate = content.getImageData(0, 0, canvas.width, canvas.height);
    this.createPotCloud();  //創(chuàng)建點(diǎn)云
  };
}

2. 操作像素點(diǎn)

createPotCloud() {
  if (points) {
    scene.remove(points)
  }
  let cw = Math.floor(canvas.width / size);
  let ch = Math.floor(canvas.height / size);
  particles = cw * ch;
  geometry = new THREE.BufferGeometry();
  positions = new Float32Array(Math.floor(particles * 3));
  positions_af = new Float32Array(Math.floor(particles * 3));
  var colors = new Float32Array(Math.floor(particles * 3));
  for (var i = 0; i < positions.length; i += 1) {

    positions[3 * i] = - canvas.width / 2 + (i % cw) * size;
    positions[3 * i + 1] = canvas.height / 2 + Math.floor((-1 - i) / cw) * size;
    positions[3 * i + 2] = 0;

    let selectPos = size * (i % cw) + Math.floor(i / cw) * cw * size * size;
    colors[3 * i] = imgDate.data[4 * selectPos] / 255.0;
    colors[3 * i + 1] = imgDate.data[4 * selectPos + 1] / 255.0;
    colors[3 * i + 2] = imgDate.data[4 * selectPos + 2] / 255.0;
  }
  geometry.setAttribute('position', new THREE.BufferAttribute(positions, 3));
  geometry.setAttribute('color', new THREE.BufferAttribute(colors, 3))
  geometry.dynamic = true;
  geometry.attributes.position.needsUpdate = true;
  var material = new THREE.PointsMaterial({ size: size, vertexColors: THREE.VertexColors })
  points = new THREE.Points(geometry, material);
  points.name = 'points';
  scene.add(points);
  loaded = true;
},

可以不用糾結(jié)代碼,核心思想其實(shí)我們只需要每隔一定的顏色點(diǎn)取出一個(gè)顏色點(diǎn),然后將這個(gè)顏色賦予到geometry的color屬性上,就可以了,也可以每隔兩行、兩列取一個(gè)點(diǎn),但是圖片上面的點(diǎn)是一維的,所以需要一些數(shù)學(xué)方法,

如圖所示,原理很簡(jiǎn)單哦。將不清晰的圖片清晰化,就是需要插入更多的像素點(diǎn),插入的像素點(diǎn),需要根據(jù)已存在的像素點(diǎn)的顏色進(jìn)行插值,比如原圖的像素點(diǎn)1為0xffffff,像素點(diǎn)2的顏色為0xdddddd,則插在兩個(gè)像素點(diǎn)之間像素點(diǎn)的顏色為0xeeeeee,以此類推。

以上就是three.js 將圖片馬賽克化的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于three.js 將圖片馬賽克化的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • js實(shí)現(xiàn)隨機(jī)點(diǎn)名

    js實(shí)現(xiàn)隨機(jī)點(diǎn)名

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)隨機(jī)點(diǎn)名,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • JavaScript將相對(duì)地址轉(zhuǎn)換為絕對(duì)地址示例代碼

    JavaScript將相對(duì)地址轉(zhuǎn)換為絕對(duì)地址示例代碼

    本文為大家詳細(xì)介紹下JavaScript怎么將相對(duì)地址轉(zhuǎn)換為絕對(duì)地址,具體的示例如下,感興趣的朋友可以參考下哈,希望對(duì)大家有所幫助
    2013-07-07
  • JavaScript 短路運(yùn)算的實(shí)現(xiàn)

    JavaScript 短路運(yùn)算的實(shí)現(xiàn)

    本文主要介紹了JavaScript 短路運(yùn)算的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 基于Require.js使用方法(總結(jié))

    基于Require.js使用方法(總結(jié))

    下面小編就為大家?guī)硪黄赗equire.js使用方法(總結(jié))。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • JavaScript生成驗(yàn)證碼并實(shí)現(xiàn)驗(yàn)證功能

    JavaScript生成驗(yàn)證碼并實(shí)現(xiàn)驗(yàn)證功能

    這篇文章主要介紹了JavaScript生成驗(yàn)證碼并實(shí)現(xiàn)驗(yàn)證功能的相關(guān)資料,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-09-09
  • Bootstrap3制作搜索框樣式的方法

    Bootstrap3制作搜索框樣式的方法

    這篇文章主要介紹了Bootstrap3制作搜索框樣式的方法 的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07
  • Django 中的templates使用示例詳解

    Django 中的templates使用示例詳解

    Django模板系統(tǒng)提供了一套豐富的工具集,能夠幫助開發(fā)者將動(dòng)態(tài)數(shù)據(jù)有效地渲染到HTML頁面中,它通過特殊的語法支持變量插入、邏輯標(biāo)簽和過濾器的使用,本文給大家介紹Django 中的templates使用,感興趣的朋友一起看看吧
    2024-10-10
  • 一文熟練掌握J(rèn)avaScript的switch用法

    一文熟練掌握J(rèn)avaScript的switch用法

    在JavaScript中switch語句是一種用于多條件分支的控制語句,下面這篇文章主要給大家介紹了關(guān)于如果通過一文熟練掌握J(rèn)avaScript的switch用法的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • JS實(shí)現(xiàn)運(yùn)動(dòng)緩沖效果的封裝函數(shù)示例

    JS實(shí)現(xiàn)運(yùn)動(dòng)緩沖效果的封裝函數(shù)示例

    這篇文章主要介紹了JS實(shí)現(xiàn)運(yùn)動(dòng)緩沖效果的封裝函數(shù),涉及JavaScript時(shí)間函數(shù)與數(shù)值運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下
    2018-02-02
  • js實(shí)現(xiàn)列表向上無限滾動(dòng)

    js實(shí)現(xiàn)列表向上無限滾動(dòng)

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)列表向上無限滾動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-01-01

最新評(píng)論