主頁 >  其他 > WebGL 與 WebGPU 比對[1] 前奏

WebGL 與 WebGPU 比對[1] 前奏

2022-01-17 17:28:19 其他

目錄
  • 1 為什么是 WebGPU 而不是 WebGL 3.0
    • 顯卡驅動
    • 圖形 API 的簡單年表
    • WebGL 能運行在各個瀏覽器的原因
    • WebGPU 的名稱由來
  • 2 與 WebGL 比較編碼風格
    • OpenGL 的編碼風格
    • CPU 負載問題
    • WebGPU 的裝配式編碼風格
    • 廚子戲法
  • 3 多執行緒與強大的通用計算(GPGPU)能力
    • WebWorker 多執行緒
    • 通用計算(GPGPU)
  • 4 瀏覽器的實作
  • 5 未來
    • 參考資料


這篇講講歷史,不太適合直奔主題的朋友們,

1 為什么是 WebGPU 而不是 WebGL 3.0

你若往 Web 圖形技術的底層去深究,一定能追溯到上個世紀 90 年代提出的 OpenGL 技術,也一定能看到,WebGL 就是基于 OpenGL ES 做出來的這些資訊,OpenGL 在那個顯卡羸弱的年代發揮了它應有的價值,

顯卡驅動

我們都知道現在的顯卡都要安裝顯卡驅動程式,通過顯卡驅動程式暴露的 API,我們就可以操作 GPU 完成圖形處理器的操作,

問題就是,顯卡驅動和普通編程界的匯編一樣,底層,不好寫,于是各大廠就做了封裝 —— 碼界的基操,

圖形 API 的簡單年表

OpenGL 就是干這個的,負責上層介面封裝并與下層顯卡驅動打交道,但是,眾所周知,它的設計風格已經跟不上現代 GPU 的特性了,

Microsoft 為此做出來最新的圖形API 是 Direct3D 12,Apple 為此做出來最新的圖形API 是 Metal,有一個著名的組織則做出來 Vulkan,這個組織名叫 Khronos,D3D12 現在在發光發熱的地方是 Windows 和 PlayStation,Metal 則是 Mac 和 iPhone,Vulkan 你可能在安卓手機評測上見得多,這三個圖形 API 被稱作三大現代圖形API,與現代顯卡(無論是PC還是移動設備)的聯系很密切,

WebGL 能運行在各個瀏覽器的原因

噢,忘了一提,OpenGL 在 2006 年把丟給了 Khronos 管,現在各個作業系統基本都沒怎么裝這個很老的圖形驅動了,

那問題來了,基于 OpenGL ES 的 WebGL 為什么能跑在各個作業系統的瀏覽器?

因為 WebGL 再往下已經可以不是 OpenGL ES 了,在 Windows 上現在是通過 D3D 轉譯到顯卡驅動的,在 macOS 則是 Metal,只不過時間越接近現在,這種非親兒子式的實作就越發困難,

蘋果的 Safari 瀏覽器最近幾年才珊珊支持 WebGL 2.0,而且已經放棄了 OpenGL ES 中 GPGPU 的特性了,或許看不到 WebGL 2.0 的 GPGPU 在 Safari 上實作了,果子哥現在正忙著 Metal 和更偉大的 M 系列自研芯片呢,

WebGPU 的名稱由來

所以,綜上所述,下一代的 Web 圖形介面不叫 WebGL 3.0 的原因,你清楚了嗎?已經不是 GL 一脈的了,為了使現代巨頭在名稱上不打架,所以采用了更貼近硬體名稱的 WebGPU,WebGPU 從根源上和 WebGL 就不是一個時代的,無論是編碼風格還是性能表現上,

題外話,OpenGL 并不是沒有學習的價值,反而它還會存在一段時間,WebGL 也一樣,

2 與 WebGL 比較編碼風格

WebGL 實際上可以說是 OpenGL 的影子,OpenGL 的風格對 WebGL 的風格影響巨大,

學習過 WebGL 介面的朋友都知道一個東西:gl 變數,準確的說是 WebGLRenderingContext 物件,WebGL 2.0 則是 WebGLRenderingContext2.

OpenGL 的編碼風格

無論是操作著色器,還是操作 VBO,亦或者是創建一些 Buffer、Texture 物件,基本上都得通過 gl 變數一條一條函式地走程序,順序是非常講究的,例如,下面是創建兩大著色器并執行編譯、連接的代碼:

const vertexShaderCode = `
attribute vec4 a_position;
void main() {
	gl_Position = a_position;
}
`

const fragmentShaderCode = `
precision mediump float;
void main() {
  gl_FragColor = vec4(1, 0, 0.5, 1);
}
`

const vertexShader = gl.createShader(gl.VERTEX_SHADER)
gl.shaderSource(vertexShader, vertexShaderCode)
gl.compileShader(vertexShader)
const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER)
gl.shaderSource(fragmentShader, fragmentShaderCode)
gl.compileShader(fragmentShader)

const program = gl.createProgram()
gl.attachShader(program, vertexShader)
gl.attachShader(program, fragmentShader)
gl.linkProgram(program)

// 還需要顯式指定你需要用哪個 program
gl.useProgram(program)
// 繼續操作頂點資料并觸發繪制
// ...

創建著色器、賦予著色器代碼并編譯的三行 js WebGL 呼叫,可以說是必須這么寫了,頂多 vs 和 fs 的創建編譯順序可以換一下,但是又必須在 program 之前完成這些操作,

CPU 負載問題

有人說這無所謂,可以封裝成 JavaScript 函式,隱藏這些程序細節,只需傳遞引數即可,是,這是一個不錯的封裝,很多 js 庫都做過,并且都很實用,

但是,這仍然有難以逾越的鴻溝 —— 那就是 OpenGL 本身的問題,

每一次呼叫 gl.xxx 時,都會完成 CPU 到 GPU 的信號傳遞,改變 GPU 的狀態,是立即生效的,熟悉計算機基礎的朋友應該知道,計算機內部的時間和硬體之間的距離有多么重要,世人花了幾十年時間無不為信號傳遞付出了努力,上述任意一條 gl 函式改變 GPU 狀態的程序,大致要走完 CPU ~ 總線 ~ GPU 這么長一段距離,

我們都知道,辦事肯定是一次性備齊材料的好,不要來來回回跑那么多遍,而 OpenGL 就是這樣子的,有人說為什么要這樣而不是改成一次發送的樣子?歷史原因,OpenGL 盛行那會兒 GPU 的作業沒那么復雜,也就不需要那么超前的設計,

綜上所述,WebGL 是存在 CPU 負載隱患的,是由于 OpenGL 這個狀態機制決定的,

現代三大圖形API 可不是這樣,它們更傾向于先把東西準備好,最后提交給 GPU 的就是一個完整的設計圖紙和緩沖資料,GPU 只需要拿著就可以專注辦事,

WebGPU 的裝配式編碼風格

WebGPU 雖然也有一個總管家一樣的物件 —— device,型別是 GPUDevice,表示可以操作 GPU 設備的一個高層級抽象,它負責創建操作圖形運算的各個物件,最后裝配成一個叫 “CommandBuffer(指令緩沖,GPUCommandBuffer)”的物件并提交給佇列,這才完成 CPU 這邊的勞動,

所以,device.createXXX 創建程序中的物件時,并不會像 WebGL 一樣立即通知 GPU 完成狀態的改變,而是在 CPU 端寫的代碼就從邏輯、型別上確保了待會傳遞給 GPU 的東西是準確的,并讓他們按自己的坑站好位,隨時等待提交給 GPU,

在這里,指令緩沖物件具備了完整的資料資料(幾何、紋理、著色器、管線調度邏輯等),GPU 一拿到就知道該干什么,

// 在異步函式中
const device = await adapter.requestDevice()
const buffer = device.createBuffer({
  /* 裝配幾何,傳遞記憶體中的資料,最終成為 vertexAttribute 和 uniform 等資源 */
})
const texture = device.createTexture({
  /* 裝配紋理和采樣資訊 */
})

const pipelineLayout = device.createPipelineLayout({
  /* 創建管線布局,傳遞系結組布局物件 */
})

/* 創建著色器模塊 */
const vertexShaderModule = device.createShaderModule({ /* ... */ })
const fragmentShaderModule = device.createShaderModule({ /* ... */ })

/*
計算著色器可能用到的著色器模塊
const computeShaderModule = device.createShaderModule({ /* ... * / })
*/

const bindGroupLayout = device.createBindGroupLayout({
  /* 創建系結組的布局物件 */
})

const pipelineLayout = device.createPipelineLayout({
  /* 傳遞系結組布局物件 */
})

/*
上面兩個布局物件其實可以偷懶不創建,系結組雖然需要系結組布局以
通知對應管線階段系結組的資源長啥樣,但是系結組布局是可以由
管線物件通過可編程階段的代碼自己推斷出來系結組布局物件的
本示例代碼保存了完整的程序
*/

const pipeline = device.createRenderPipeline({
  /* 
  創建管線
  指定管線各個階段所需的素材
  其中有三個階段可以傳遞著色器以實作可編程,即頂點、片段、計算 
  每個階段還可以指定其所需要的資料、資訊,例如 buffer 等
  
  除此之外,管線還需要一個管線的布局物件,其內置的系結組布局物件可以
  讓著色器知曉之后在通道中使用的系結組資源是啥樣子的
  */
})

const bindGroup_0 = deivce.createBindGroup({
  /* 
  資源打組,將 buffer 和 texture 歸到邏輯上的分組中,
  方便各個程序呼叫,程序即管線,
  此處必須傳遞系結組布局物件,可以從管線中推斷獲取,也可以直接傳遞系結組布局物件本身
  */
})

const commandEncoder = device.createCommandEncoder() // 創建指令緩沖編碼器物件
const renderPassEncoder = commandEncoder.beginRenderPass() // 啟動一個渲染通道編碼器
// 也可以啟動一個計算通道
// const computePassEncoder = commandEncoder.beginComputePass({ /* ... */ }) 

/*
以渲染通道為例,使用 renderPassEncoder 完成這個通道內要做什么的順序設定,例如
*/

// 第一道繪制,設定管線0、系結組0、系結組1、vbo,并觸發繪制
renderPassEncoder.setPipeline(renderPipeline_0)
renderPassEncoder.setBindGroup(0, bindGroup_0)
renderPassEncoder.setBindGroup(1, bindGroup_1)
renderPassEncoder.setVertexBuffer(0, vbo, 0, size)
renderPassEncoder.draw(vertexCount)

// 第二道繪制,設定管線1、另一個系結組并觸發繪制
renderPassEncoder.setPipeline(renderPipeline_1)
renderPassEncoder.setBindGroup(1, another_bindGroup)
renderPassEncoder.draw(vertexCount)

// 結束通道編碼
renderPassEncoder.endPass()

// 最后提交至 queue,也即 commandEncoder 呼叫 finish 完成編碼,回傳一個指令緩沖
device.queue.submit([
  commandEncoder.finish()
])

上述程序是 WebGPU 的一般化代碼,很粗糙,沒什么細節,不過基本上就是這么個邏輯,

對通道編碼器的那部分代碼,筆者保留的比較完整,讓讀者更好觀察一個指令編碼器是如何編碼通道,并最后結束編碼創建指令緩沖提交給佇列的,

廚子戲法

用做菜來比喻,OpenGL 系的編程就好比做一道菜時需要什么調料就去拿什么調料,做好一道菜再繼續做下一道菜;而現代圖形API 則是多灶臺開火,所有材料都在合適的位置上,包括處理好的食材和輔料,即使一個廚師(CPU)都可以同時做好幾道菜,效率很高,

3 多執行緒與強大的通用計算(GPGPU)能力

WebWorker 多執行緒

WebGL 的總管家物件是 gl 變數,它必須依賴 HTML Canvas 元素,也就是說必須由主執行緒獲取,也只能在主執行緒調度 GPU 狀態,WebWorker 技術的多執行緒能力只能處理資料,比較雞肋,

WebGPU 改變了總管家物件的獲取方式,adapter 物件所依賴的 navigator.gpu 物件在 WebWorker 中也可以訪問,所以在 Worker 中也可以創建 device,也可以裝配出指令緩沖,從而實作多執行緒提交指令緩沖,實作 CPU 端多執行緒調度 GPU 的能力,

通用計算(GPGPU)

如果說 WebWorker 是 CPU 端的多執行緒,那么 GPU 本身的多執行緒也要用上,

能實作這一點的,是一個叫做“計算著色器”的東西,它是可編程管線中的一個可編程階段,在 OpenGL 中可謂是姍姍來遲(因為早期的顯卡并沒挖掘其并行通用計算的能力),更別說 WebGL 到了 2.0 才支持了,蘋果老兄甚至壓根就懶得給 WebGL 2.0 實作這個特性,

WebGPU 出廠就帶這玩意兒,通過計算著色器,使用 GPU 中 CU(Compute Unit,計算單元)旁邊的共享記憶體,速度比普通的顯存速度快得多,

有關計算著色器的資料不是特別多,目前只能看例子,在參考資料中也附帶了一篇博客,

將 GPGPU 帶入 Web 端后,腳本語言的運行時(deno、瀏覽器JavaScript,甚至未來的 nodejs 也有可能支持 WebGPU)就可以訪問 GPU 的強大并行計算能力,據說 tensorflow.js 改用 WebGPU 作為后置技術后性能有極為顯著的提升,對深度學習等領域有極大幫助,即使用戶的瀏覽器沒那么新潮,渲染編程還沒那么快換掉 WebGL,WebGPU 的通用計算能力也可以在別的領域發光發熱,更別說計算著色器在渲染中也是可以用的,

真是誘人啊!

4 瀏覽器的實作

Edge 和 Chrome 截至發文,在金絲雀版本均可以通過 flag 打開試用,

Edge 和 Chrome 均使用了 Chromium 核心,Chromium 是通過 Dawn 這個模塊實作的 WebGPU API,根據有關資料,Dawn 中的 DawnNative 部分負責與三大圖形 API 溝通,向上則給一個叫 DawnWire 的模塊傳遞資訊,DawnWire 模塊則負責與 JavaScript API 溝通,也就是你寫的 WebGPU 代碼,WGSL 也是這個部分實作的,Dawn 是 C++ 實作的,你可以在參考資料中找到連接,

FireFox 則使用了 gfx-rs 專案實作 WebGPU,顯然是 Rust 語言實作的 WebGPU,也有與 Dawn 類似的模塊設計,

Safari 則更新自家的 WebKit 實作 WebGPU,

5 未來

展望宏圖之類的話不說,但是隨著紅綠藍三家的 GPU 技術越發精湛,加上各個移動端的 GPU 逐漸起色,三大現代圖形API肯定還在發展,WebGPU 一定能在 Web 端釋放現代圖形處理器(GPU)的強大能力,無論是圖形游戲,亦或是通用并行計算帶來的機器學習、AI能力,

參考資料

  • Google Dawn Page
  • gfx-rs GitHub Home Page
  • Get started with GPU Compute on the web

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/413026.html

標籤:其他

上一篇:對極驗geetest滑塊驗證碼圖片還原演算法的研究

下一篇:簡簡單單的總結,意如生活的平淡

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more