最近一直在做乙個給建築繪製描邊(主要是牆體的側稜)的解決方案,雖然three.js內建有edgesgeometry可以根據現有mesh的geometry生成不帶斜線的線框,但是在pc端linewidth是不能生效的,這是因為受限於windows平台的direct3d,所以在pc端通常的解決方案是通過兩點繪製乙個矩形來替代有寬度的線。
在實際專案中,由於建築很多,如果都是用這種方式生成描邊的話,無端地新增了更多mesh,我希望找到更好的解決方案,那就是通過uv資料來繪製。最後我通過自定義資料(position、uv)繪製了乙個「牆體」,並且通過shader實現了描邊,圖示如下。
這種解決方案,重點在於如何生成uv資料,因為圖中每個矩形寬度是不一樣的,我們需要在傳遞邊界資訊的同時也要講尺寸相關資訊通過uv傳輸過去;
所以單就uv.x來看,圖中所示9個立方體,對應的uv.x初始值是:
0,1,0,1,0,1,0,1,0,1然後根據立方體的寬度,對uv.x做出更改:
0-0.1/width,1+0.1/width,0-0.1/width,1+0.1/width,0-0.1/width,1+0.1/width,0-0.1/width,1+0.1/width,0-0.1/width,1+0.1/widthwidth對應的是相鄰兩個立方體的寬度和,這樣就可以根據offset值(0.1/width)動態地繪製出粗細均勻的描邊了(上述所示案例的offset資料還需要調整);
這樣我們就僅用乙個uv資料處理了兩個事物:
①邊界判斷
②統一粗細處理
基於上述專案中的解決方案引發了我進一步的思考:這種資料加密/解密的方式,如果用在模型檔案或者是webgl資料傳輸上,很有可能會帶來3d程式在效能上的提公升。
一、目前的處理方式
目前,3d模型的position資料和uv資料都是分離開來通過不同的attribute變數,從cpu傳輸到gpu;並且三維模型的處理方式也是如此。
二、資料加密/解密的方式
試想一下,如果我們在模型匯出的時候,將position資料和uv資料進行加密(注意:不是將乙個vec3、乙個vec2合併成乙個vec5);
比如:
vec2 uv = vec2(0.15,0.55或者是其他規則,將原本需要多個資料表達的資訊,通過一定的加密規則加密成乙個資料進行傳輸。);float uv = 15.55;
然後3d庫解析的時候對資料進行解密處理,這樣的話模型檔案的大小會得到一定程度的削減。
如果不交給3d庫解密的話,也可以交給webgl去解密,解密方式可以內建到webgl中,這樣的話,webgl渲染的時候,資料傳輸的過程中(cpu--->gpu的資料傳輸)資料量就會大大減少;
解密工作交給gpu處理的話速度會比cpu快很多,這樣也能提高webgl的渲染效能。
以上為個人淺見,如感興趣,歡迎前來交流**。
資料傳輸加密 RSA AES
首先 我們先了解一下什麼是rsa和aes 1 什麼是rsa?2 什麼是aes?通過上面,我們了解到。aes是目前主流的對稱加密演算法,而rsa是非對稱加密演算法。什麼是對稱演算法aes?對稱演算法 請求發起方與接收方擁有相同的金鑰。發起流程 1 請求方用金鑰加密密文,傳送給接收方。2 接收方用金鑰對...
資料傳輸的加密
一 對稱加密 加密資料與解密資料使用相同的金鑰,這種加密方法稱為對稱加密 特點 加密與解密使用相同金鑰,加密解密速度快 將原始資料進行切塊,逐個進行加密。缺點 每乙個通訊的物件都有一把金鑰,如果通訊物件過多導致金鑰過多。金鑰分發問題,如何保證金鑰不被竊取 二 非對稱加密 加密資料與解密資料使用一堆不...
關於資料傳輸中加密解密那點事兒個人見解
隨著網際網路的興起,越來越多的資訊和資源要通過網路傳輸完成 然而在這些資料傳輸中總有一些 無關人員 做一些竊聽 盜取 篡改等危害資料安全的行為,所以我們要對資料進行加密處理,以保證資料的安全傳輸 所以有了一下幾種加密方式 一 對稱加密 這種演算法簡單來說就是 資料的傳送方和接收方都必須要有同一種金鑰...