精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

二維碼還能這么玩?制作一個3D動態粒子二維碼!

開發 前端
本文根據前文粒子云的實現效果,擴展了具體如何來實現一個二維碼的粒子化效果;通過建模工具Blender,可以將我們的二維碼建立模型后導入three.js中;適合網頁上需要呈現展示二維碼效果的地方。

我們知道,在一些內容創作網站,直接貼二維碼的話文章會被限流警告,那么如何才能夠光明正大的貼出二維碼呢?看完本文,相信你就會有答案了。最終我們想要實現這樣的一個效果:

最終效果最終效果

本文最終的效果可以訪問https://gallery.xieyufei.com/about查看

建模

要實現這樣的效果,首先我們需要將二維碼進行建模處理;網絡上也有很多建模工具,這里筆者推薦使用開源且好用的Blender4進行建模;整個建模的過程較為繁瑣,因此需要一定的耐心和細心;如果有更好的建模方式,歡迎在評論區留言討論。

選中右上角的Z軸,將圖片拖拽入編輯器中,最好將二維碼的四周白邊進行裁切;然后調整其XYZ軸位置,讓其居中:

導入導入

Shift+A鍵,我們添加一個網格=>平面進來,再次調整位置,然后選擇右上角的切換透視模式,快捷鍵是Alt+Z鍵;開啟透視模式后,我們就可以調整平面的大小,和二維碼中間部分大小相同即可。

添加并調整平面添加并調整平面

選擇平面后,繼續點擊Tab鍵進入編輯模式,Ctrl+R添加分割線,在平面的橫向和縱向都添加多個分割線,滾動鼠標滾輪可以增加或減少數量,當數量剛好可以切割每個二維碼的方塊時點擊右鍵確定:

添加分割線添加分割線

點擊左上角的面選擇模式以及擴展當前選中項模式,將白色塊的部分選中出來,然后點擊del鍵進行刪除,選擇面選項,這個過程需要耐心慢慢選擇:

注意框選面中間的小點,才能選中面。

選擇刪除面選擇刪除面

刪除后我們得到了這樣一個圖形,我們發現依然可以進行掃碼:

刪除完成刪除完成

我們給每個黑色的小方塊同時添加橫向和縱向的分割線,選擇所有的面,點擊del刪除,選擇僅邊和面選項

這一步也需要細心和耐心,當然你也可以在前面第一次分割的時候,分割得更細。

刪除面和邊刪除面和邊

面和邊刪除了,我們的界面上看似什么都沒有了,不過別著急,然后右上角選擇點模式,我們就能看到刪除了邊和面之后,還有很多的小點剩余下來,我們只需要保留黑色方塊中心的點;這里我們在點模式下框選黑色方塊中的點后,然后使用Ctrl+I鍵進行反向選擇,刪除其他所有的點:

選擇點選擇點

最終我們得到這樣一個點狀的圖形,將其導出到glb文件即可:

最終生成的最終生成的

導入模型

我們的模型處理完成后,可以導入到three.js中來了;我們導入模型后,由于模型的大小和位置可能不是我們需要的,可以對geometry進行縮放、旋轉、平移操作,調整到頁面上合適的位置即可:

const loader = new GLTFLoader();
let qrGeometry
loader.load("/models/qr.glb", (gltf) => {
  const geometry = gltf.scene.children[0].geometry;
  geometry
    .scale(20, 20, 20)
    .rotateX((90 / 180) * Math.PI)
    .rotateY((90 / 180) * Math.PI)
    .translate(0, 0, -20);

  qrGeometry = geometry;
});

生成隨機點

然后就該用到我們的粒子Points了,我們先用隨機數生成一堆的粒子,然后將Camera鏡頭放到粒子堆的邊緣進行移動,就可以產生粒子在旋轉的效果:

const getRandomPos(index) {
  const x = Math.random() * 90 - 45;
  const y = Math.random() * 90 - 45;
  const z = Math.random() * 90 - 45;
  return [x, y, z];
}
const initPoints = () => {
  const randomGeometry = new BufferGeometry();
  const verticles = [];
  for (let i = 0; i < 8000; i++) {
    const [x, y, z] = getRandomPos(i)
    verticles.push(x, y, z);
  }
  randomGeometry.setAttribute(
    "position",
    new Float32BufferAttribute(verticles, 3)
  );

  const material = new PointsMaterial({
    color: 0x333333,
    size: 0.8,
    map: new TextureLoader().load("gradient.png"),
  });

  const pt = new Points(randomGeometry, material);
  screen.add(pt);
  this.pt = pt;
};

但是這樣生成出來的隨機點呈現出來是一個立方體,所以攝像機在移動時需要掌控好位置,如果距離原點太遠,就會出現粒子稀疏不同的情況;那么我們優化隨機函數,讓隨機點生成在一個橢圓體的范圍內,這樣相機在移動時粒子就比較均勻了,不會出現分布不均的情況;這里引入三維空間下的橢圓計算公式:

橢圓的計算方程橢圓的計算方程

這里的計算邏輯也很簡單,有三個變量,我們通過控制變量的方式,先生成Y軸和Z軸的隨機值,然后套用計算公式,就可以計算得到X軸的最大值max,再根據這個max值隨機生成X軸的的坐標即可:

const getRandomPos = (index) => {
  const MAX_Y = 60;
  const MAX_Z = 80;
  const MAX_X = 80;
  const y = Math.random() * MAX_Y * 2 - MAX_Y;
  const z = Math.random() * MAX_Z * 2 - MAX_Z;
  const max = Math.sqrt(
    (1 - Math.pow(y, 2) / MAX_Y / MAX_Y - Math.pow(z, 2) / MAX_Z / MAX_Z) *
      MAX_X *
      MAX_X
  );

  const x = Math.random() * max * 2 - max;
  return [x, y, z];
};

我們看到Y軸的數值比X和Z軸都小一點,因此整個橢圓體會偏扁一點,生成出來的圖形也符合我們的預期:

橢圓體橢圓體

這樣,我們的相機在旋轉時粒子分布就相對比較均勻了;我們將鏡頭拉到粒子的邊緣,然后繞著邊緣做緩慢的環繞運動就可以看到粒子的旋轉效果了:

const changeCameraView = () => {
  new Tween.Tween({
    x: 0,
  })
    .to(
      {
        x: 80,
      },
      2400
    )
    .onUpdate((pos) => {
      const { x } = pos;
      const z = Math.sqrt(80 * 80 - Math.pow(x, 2));
      this.camera.position.x = x;
      this.camera.position.z = z;
      this.camera.lookAt(new Vector3(0, 0, 0));
      this.camera.updateProjectionMatrix();
    })
    .start();
};

模型切換

隨機粒子生成后,我們就可以將randomGeometry模型轉換成我們上面的qrGeometry模型了,引入我們的切換模型函數,這里的函數在粒子云效果的實現里面已經詳細解釋了,這里不再贅述了:

const changeGeometry = (toArray, duration = 1500) => {
  const nowFloatArray = this.pt.geometry.attributes.position.array;

  const tos = this.mixFloatArray(nowFloatArray, toArray);

  new Tween.Tween({
    ...Array.from(nowFloatArray),
  })
    .to(tos, duration)
    .easing(Tween.Easing.Quadratic.InOut)
    .onComplete(() => {
      this.isChanging = false;
    })
    .onUpdate((pos) => {
      for (let key in pos) {
        const val = pos[key];
        const idx = Number(key);
        this.pt.geometry.attributes.position.array[idx] = val;
      }
      this.pt.geometry.attributes.position.needsUpdate = true;
    })
    .start();
};

在旋轉鏡頭的同時,我們進行模型的切換:

this.changeCameraView();
setTimeout(() => {
  this.changeGeometry(qrGeometry.attributes.position.array, 1600);
}, 1600);

本文最終的效果可以訪問https://gallery.xieyufei.com/about查看

總結

本文根據前文粒子云的實現效果,擴展了具體如何來實現一個二維碼的粒子化效果;通過建模工具Blender,可以將我們的二維碼建立模型后導入three.js中;適合網頁上需要呈現展示二維碼效果的地方。

責任編輯:武曉燕 來源: 前端壹讀
相關推薦

2024-06-26 08:46:45

2013-01-30 12:16:49

二維碼NFC近場通訊

2023-11-17 09:07:51

.NET生成二維碼識別二維碼

2017-02-21 09:17:46

二維碼漏洞

2023-11-17 15:44:06

C++庫生成二維碼

2011-12-06 16:40:45

二維碼快拍二維碼靈動快拍

2014-03-05 14:41:55

二維碼登錄

2023-12-25 14:53:36

2015-09-24 09:56:19

.NET二維碼

2012-04-01 09:53:13

二維碼

2020-12-24 18:48:36

二維碼二進制條形碼

2015-10-28 13:33:50

二維碼條形碼掃描源碼

2020-10-08 18:48:02

二維碼安全應用安全網絡攻擊

2023-08-08 14:16:07

二維碼開發鴻蒙

2022-03-24 09:43:29

二維碼二維碼修改器github

2011-11-24 16:00:23

信息圖QR碼二維碼

2025-03-04 09:15:00

惡意軟件網絡安全郵件釣魚

2011-08-24 17:58:01

QRals二維碼

2020-12-20 10:04:44

Qrcode二維碼生成器QR Code

2020-10-26 11:09:42

二維碼網絡犯罪應用安全
點贊
收藏

51CTO技術棧公眾號

欧美一级视频| 俺来俺也去www色在线观看| 日韩专区一卡二卡| 中文字幕亚洲欧美日韩在线不卡 | 91精品久久久久久蜜臀| 国产盗摄视频在线观看| 天天操天天干天天舔| 日产欧产美韩系列久久99| 色老头久久综合| 亚洲欧美日韩久久久久久| 日日摸日日碰夜夜爽无码| 狠狠v欧美ⅴ日韩v亚洲v大胸| 久久超级碰视频| 久久av中文字幕| 国产又粗又长又爽| 2020国产精品小视频| 亚洲激情在线播放| 日本一区不卡| 欧美一区二区在线观看视频| 首页欧美精品中文字幕| 久久69精品久久久久久久电影好| 喷水视频在线观看| 成人在线免费| 亚洲国产精品一区二区久久恐怖片| 日韩福利二区| 欧美一级性视频| 男女男精品视频网| 4k岛国日韩精品**专区| 尤物在线免费视频| 蜜桃一区二区三区| 亚洲成人av在线| 国产精品久久久毛片| a国产在线视频| mm视频在线视频| 国产精品一区二区久久不卡 | 久久久久久久久久久久久久久久久| 亚洲自拍电影| 亚洲福利视频网站| 国内av免费观看| 久久亚洲国产精品尤物| 精品久久久久久久久久久| 黄瓜视频免费观看在线观看www| 色猫av在线| 国产不卡视频一区二区三区| 国产精品专区第二| 波多野结衣在线电影| 影音先锋久久资源网| 久久亚洲精品毛片| 韩国一级黄色录像| 三上亚洲一区二区| 中文字幕九色91在线| 国产一区二区三区四区五区六区| 女仆av观看一区| 精品国产青草久久久久福利| 四川一级毛毛片| 久久天堂久久| 91.com在线观看| 天堂在线一区二区三区| 欧洲美女精品免费观看视频 | 亚洲麻豆国产自偷在线| 中文字幕久久一区| 国产一二三区在线观看| 中文字幕一区二区三中文字幕| 久久er99热精品一区二区三区| 蜜桃在线一区二区| av日韩在线网站| 成人av播放| 日批视频在线播放| 91麻豆123| 日韩免费三级| 国产成人无码精品亚洲| 禁断一区二区三区在线| 亚洲日韩中文字幕| 国产又黄又粗的视频| 亚洲制服一区| 色妞久久福利网| 免费一级特黄3大片视频| 欧美色图国产精品| 最近中文字幕2019免费| 国产又黄又粗视频| 亚洲精品小说| 午夜精品理论片| 九九久久久久久| 国产亚洲精品精品国产亚洲综合| 国产精品美女久久久久aⅴ| 熟女熟妇伦久久影院毛片一区二区| 成人在线免费看片| 精品人伦一区二区三区蜜桃免费| 日韩精品一区中文字幕| 欧美aaa级| 精品少妇一区二区三区在线播放 | 可以免费在线观看的av| 老色鬼久久亚洲一区二区| 国产精品亚洲激情| 91精品国自产在线观看 | 韩国v欧美v亚洲v日本v| 欧美在线性爱视频| 国产在线精品一区| 精品无码人妻一区二区三| 欧美二区视频| 国产精品高精视频免费| 亚洲av色香蕉一区二区三区| 极品少妇一区二区| 岛国视频一区免费观看| 波多野结衣在线影院| 亚洲一区二区五区| 性生活免费在线观看| 婷婷久久综合九色综合99蜜桃| 精品sm在线观看| 日本一区二区视频在线播放| 激情久久五月| 亚洲色图第三页| 深爱五月激情网| 夜间精品视频| 国产精品成人一区| 欧美在线精品一区二区三区| 亚洲欧洲www| 国产在线观看福利| 亚洲视频三区| 中文字幕v亚洲ⅴv天堂| 日韩一区二区视频在线| 国产河南妇女毛片精品久久久| 人禽交欧美网站免费| 偷拍夫妻性生活| 粉嫩一区二区三区在线观看| 精品久久久中文| 人妻精品久久久久中文字幕69| aiai久久| 亚洲精品美女免费| 欧美三根一起进三p| 久久se这里有精品| 欧美精品一区在线| 污视频网站在线免费| 一区二区三区四区不卡视频| 日本高清一区二区视频| 日韩在线第七页| 国产精品久久电影观看| 日韩电影网址| 国产日韩欧美不卡在线| 91免费看片网站| 国产高中女学生第一次| 国产精品国产三级国产有无不卡| 久久综合久久色| 蜜桃一区二区| 国产成+人+综合+亚洲欧洲| 男人的天堂av高清在线| 欧美色欧美亚洲高清在线视频| 亚洲欧美日韩色| 在线欧美不卡| 国产精品手机在线| 成人在线免费观看网址| 香蕉视频免费在线播放| 中文字幕精品三区| 北条麻妃在线视频观看| 欧洲成人一区二区三区| 日本午夜精品一区二区三区电影| 国产一区二区免费在线观看| 91福利在线免费| 欧美三片在线视频观看| www.av天天| 日韩福利电影在线观看| 免费不卡亚洲欧美| 欧美日韩免费观看视频| 欧美一区二区三区在线视频| 欧洲美女女同性互添| 国产高清无密码一区二区三区| 2022中文字幕| 麻豆一区二区| 91丝袜美腿高跟国产极品老师 | 国产一区欧美日韩| 国产乱码精品一区二区三区中文| av超碰免费在线| 色婷婷精品久久二区二区蜜臂av| 亚洲一二三不卡| 亚洲日产av中文字幕| 日韩成人xxxx| 久久这里只有精品9| 亚洲视频 欧洲视频| 国产精久久久久| 免费日韩av| 一区二区三区四区不卡| 中文字幕日韩在线| 日韩av手机在线| 免费黄色片视频| 成人av网址在线| 日韩视频免费在线播放| 91精品一区国产高清在线gif| 91精品网站| 九九热最新地址| 精品三级在线观看视频| 欧美激情综合色| 做爰无遮挡三级| 亚洲欧洲精品一区二区三区| 一级黄色片毛片| 日韩激情视频在线观看| 轻点好疼好大好爽视频| 日韩av系列| 国产情人节一区| 17videosex性欧美| 三级精品视频久久久久| 国产夫妻在线观看| 国产精品久久一卡二卡| 国产精品果冻传媒| 欧美a级片一区| 91久久精品国产91久久性色tv | 天天干,天天操,天天射| 欧美日韩成人在线| 久久精品国产亚洲av香蕉| 日本一区二区三区在线观看| 女同性αv亚洲女同志| 日日夜夜免费精品| 阿v天堂2018| 亚洲91中文字幕无线码三区| 欧美成人一区二区三区在线观看| 国产又粗又长又爽又黄的视频| 亚洲麻豆视频| 天堂一区二区三区| 性欧美videohd高精| 欧美激情在线有限公司| 麻豆网在线观看| 亚洲欧美国产精品va在线观看| 不卡视频免费在线观看| 777欧美精品| 成人精品免费在线观看| 亚洲女性喷水在线观看一区| 中文字幕一区二区三区乱码不卡| 久久精品一区二区三区中文字幕| 熟妇熟女乱妇乱女网站| 不卡一区综合视频| 91老司机在线| 精品欧美日韩精品| 欧美专区日韩视频| 九色porny丨首页入口在线| 欧美大片在线看| v片在线观看| 自拍视频国产精品| 国产黄在线看| 国产一区二区三区直播精品电影| 四虎影院在线域名免费观看| 亚洲精品一区二区三区四区高清| 91视频最新入口| 黄页免费欧美| 国产精品久久电影观看| 欧美va在线观看| 午夜精品福利在线观看| 欧美人与性动交α欧美精品图片| 精品日韩在线观看| 性生活三级视频| 精品国产99国产精品| 国产精品系列视频| 欧美精品乱码久久久久久| www.av88| 在线视频亚洲一区| 国产一级片一区二区| 在线日韩av片| 日韩欧美国产另类| 欧美日精品一区视频| 一级久久久久久久| 日韩一区二区三区免费看| 国产白浆在线观看| 日韩欧美国产综合| 日韩在线视频第一页| 日韩一区二区三区在线观看| 日韩 国产 欧美| 欧美色爱综合网| 国产精品视频一二区| 日韩限制级电影在线观看| 精品乱子伦一区二区| 亚洲国产成人精品久久久国产成人一区| xxxx日本免费| 国产日产精品_国产精品毛片| 精品一区二区国产| 欧美sss在线视频| 欧美在线日韩精品| 国产精品黑丝在线播放 | 亚洲综合二区| 国产手机免费视频| 国产成人短视频在线观看| 欧美一区免费视频| 综合天堂av久久久久久久| 免费拍拍拍网站| 蜜臀av性久久久久蜜臀av麻豆 | 亚洲av无码乱码国产精品fc2| 欧美日韩国产综合视频在线观看| 精品久久无码中文字幕| 亚洲欧洲在线看| 天天操天天干天天插| 色老头一区二区三区| 成人动漫在线播放| 久久综合久久美利坚合众国| 第一福利在线视频| 国产精品美女在线| 国产伦精品一区二区三区在线播放 | 96日本xxxxxⅹxxx17| 精品国产露脸精彩对白| 国产三级视频在线播放线观看| 欧美尺度大的性做爰视频| 欧美激情20| 91影视免费在线观看| 欧美日韩播放| 男人c女人视频| 日本伊人色综合网| 人妻av一区二区三区| 国产精品天美传媒| 日本一级黄色大片| 国产成人免费视频| 日韩av影视| 亚洲激情网址| 久久久福利影院| 国产嫩草影院久久久久| 国产一卡二卡在线| 91精品麻豆日日躁夜夜躁| 国产黄在线观看| 欧美亚洲日本黄色| 成人黄色av网址| 最新视频 - x88av| 日本aⅴ亚洲精品中文乱码| 国产人成视频在线观看| 1区2区3区精品视频| 无码人妻精品一区二区| 亚洲国产成人在线播放| 调教一区二区| 成人在线激情视频| 欧美一区三区| 激情综合在线观看| proumb性欧美在线观看| 午夜69成人做爰视频| 在线播放日韩导航| 在线免费观看黄| 国产精品视频免费在线观看| 久久最新网址| 成人黄色片视频| 久久亚洲一区二区三区四区| 中文字幕亚洲高清| 亚洲国产精品久久久| a'aaa级片在线观看| av资源一区二区| 欧美日韩爆操| 精品人妻无码中文字幕18禁| 亚洲精选视频免费看| 国产又黄又粗又猛又爽| 日韩在线免费高清视频| 粉嫩91精品久久久久久久99蜜桃| 日韩欧美一区二区视频在线播放| 鲁大师影院一区二区三区| 少妇毛片一区二区三区| 色综合夜色一区| 精品999视频| 国产精品欧美激情在线播放| 日韩久久精品网| 超碰人人草人人| 亚洲精品国产视频| 亚洲h视频在线观看| 欧美精品久久一区二区| 国产成人福利av| 久久久久久久中文| 337p粉嫩大胆色噜噜噜噜亚洲| yjizz国产| 国产亚洲精品久久久久久777 | 91福利在线导航| 第三区美女视频在线| 国产精选久久久久久| 综合精品久久| av漫画在线观看| 欧美日韩午夜激情| 国产福利在线观看| 91精品久久久久久综合乱菊| 一区二区免费不卡在线| 免费在线观看日韩av| 精品久久久久久| 成人综合影院| 亚洲影院在线看| 亚洲人成久久| 国产123在线| 日韩欧美一级二级三级| 麻豆视频在线观看免费网站黄| 欧美精品人人做人人爱视频| 久久手机免费观看| 精品国产欧美一区二区三区成人| 精品视频在线观看免费观看| 日韩精品视频在线观看视频| 26uuu色噜噜精品一区二区| 日韩精品在线一区二区三区| 久久精品这里热有精品| 成人盗摄视频| 免费看污黄网站| 亚洲午夜久久久久久久久久久| 国产中文字幕在线视频| 亚洲影院色无极综合| 久久久久久9| 福利所第一导航| 亚洲色图欧美制服丝袜另类第一页| 国产精品日本一区二区三区在线 | 中文字幕亚洲一区在线观看| 在线一区二区三区视频| 国产超碰在线播放| 午夜精品久久久久久久99樱桃| 777电影在线观看| 久久精品日产第一区二区三区精品版| 久久99精品国产.久久久久久 |