色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于 GPU 渲染的高性能空間包圍計算

圖撲-數字孿生 ? 來源:圖撲-數字孿生 ? 作者:圖撲-數字孿生 ? 2024-02-18 10:47 ? 次閱讀

空間包圍檢測在計算機圖形學、虛擬仿真工業生產等有著廣泛的應用。

現代煤礦開采過程中,安全一直是最大的挑戰之一。地質空間中存在諸多如瓦斯積聚、地質構造異常、水文條件不利等隱蔽致災因素,一旦被觸發,可能引發災難性的后果。因此在安全生產過程中有效的管理和規避各隱蔽致災因素,有著重要的意義。

通過對煤礦地質空間中各地質因素建模,建立空間數據庫,還原地下真實場景,使用計算機圖形學進行空間計算,可以實時監測各隱蔽致災因素的位置和距離,指導安全生產,并進行可視化展示。

空間包圍檢測有多種方法,比如基于包圍盒的檢測,三角面碰撞檢測等。本文提出了一種基于 GPU 渲染的高效計算方法。

假定待檢測球體范圍的半徑為r。兩種檢測方法如下:

方法 1:遍歷模型所有的點,計算點和球心的距離。如果有距離小于 r,模型在球體范圍內。
方法 2:以檢測區域的包圍盒為正交投影空間,渲染所有需要檢測的模型。渲染過程中計算每個渲染點到球心的距離,如果有距離小于r的渲染點,模型在球體范圍內。
模型和檢測區域有以下幾種位置關系:

wKgaomXDNlaAF5TBAACBYZPwGrU286.png

圖 1:模型完全在球體范圍內:方法 1 可檢測
圖 2:模型部分點在球體范圍內:方法 1 可檢測
圖 3:模型點不在球體范圍內,部分三角面在球形范圍內:方法 2 可檢測
圖 4:模型不在球體范圍內:方法 1 + 2 可檢測
圖 5:模型完全包含球體范圍:模型如果是空心的,方法 1 + 2 可檢測模型不在球體范圍內。如果需要計算結果是模型在球體范圍內,也就是模型是實心的,建模時需要在模型內部加上額外的輔助計算的三角面,用于表達內部信息。此時用方法 1 + 2 可檢測模型在球體范圍內。

wKgZomXDNlaAO3BaAACn5i3av6c516.png

以上方法使用 WebGL 渲染到紋理(Render To Texture) 和 readPixels 功能。圖撲 HT for Web SDK 組件庫對 WebGL 底層復雜操作做了封裝, 為用戶省掉了繁瑣的底層 WebGL 操作,可以方便快捷的實現正交透視、渲染到紋理和異步 readPixels 等高級 WebGL 功能。

方法 1:點檢測法
準備一張 N X N 紋理圖 texture1(HT RenderTarget),保證要檢測的模型的數量不大于 N X N。每一個模型在紋理上分配一個像素,像素的位置為 (x,y)。

創建點渲染模式著色器程序,實現以下功能:

頂點著色器:檢測每個點到球心的距離,將距離是否小于r的信息傳給片段著色器。指定的位置 (x,y) 賦給 gl_Position。
片段著色器:如果距離小于 r, 渲染紅色,否則不渲染顏色。
JavaScript 程序遍歷每一個待檢測模型,將模型的頂點和模型在紋理上的位置 (x,y) 通過 attribute 和 uniform 傳給頂點著色器。所有模型渲染結束后,使用異步 readPixels 將渲染結果讀出來。通過判斷讀取結果里每個像素點顏色值,獲得模型是否在球體內部信息。

wKgaomXDNlaAGsnqAAEt-uqadOc011.png

主要代碼:

// 創建渲染材質1
const texture1 = new ht.graph3d.RenderTarget(g3d, g3d.getGL(), 100, 100);
 
// 循環渲染所有的模型,結果保存到texture1。
for (let i = 0; i < nodeCount; i++) {
    data = datas[i];
    tModel = getDataMesh(data); // 獲取模型網格信息
    // 準備著色器數據
    tModel.mat = model4.mat;
    tModel.matDef[DEFAULT_MAT_NAME] = model4.mat;
    tModel.mat.modelMat = data.getMatrix4().toArray();
    x = i % 100;
    y = Math.floor(i / 100);
    model4.mat.uPos = [x / 100 * 2 - 1 + 1 / 200, 2 * y / 100 - 1 + 1 / 200];
    // 渲染到texture1
    g3d.setViewport(gl, 0, 0, 100, 100);
    g3d.renderModel(texture1, model4, {
        clear: false
    });
}
 
// 讀取檢測結果
texture1.readPixelsAsync(0, 0, 100, 100, null, (result) =?> {
    for (let y = 0; y < 100; y++) {
        for (let x = 0; x < 100; x++) {
            // 遍歷像素點,檢測是否是紅色
            // ......
        }
    }
});

方法 2:面檢測法
準備兩張紋理貼圖 texture1 和 texture2。Texture1 的要求同方法 1。Texture2 默認使用 1000 X 1000 的分辨率。

創建兩套著色器。第一套著色器使用三角面渲染:

頂點著色器:正常計算頂點投影信息
片段著色器:檢測每一個點到球心的距離,如果小于 r,渲染紅色
第二套著色器使用點渲染:

頂點著色器:根據輸入的 texture2 坐標(attribute),使用 texture2D 獲取對應位置的顏色值,如果是紅色,表示模型在球體內部,將此信息傳給片段著色器。模型在 texture1 上的位置信息 (x,y) 賦給 gl_Position。
片段著色器:如果距離小于 r, 渲染紅色,否則不渲染顏色。
JavaScript 程序遍歷每一個模型,使用著色器 1 將結果渲染到 texture2。渲染過程使用正交透視矩陣,視錐是球體的包圍盒。JavaScript 將 texture2 (uniform sampler2D)、texture2 每個像素的 x, y位置信息 (attribute)、模型在 texture1 上的位置信息 (uniform) 傳給頂點著色器 2。片段著色器 2 將模型是否在球體內的信息渲染到 texture1。所有模型渲染結束后,使用異步 readPixels 將渲染結果讀出來。通過判斷讀取結果里每個像素點顏色值,獲得模型是否在球體內部信息。

wKgZomXDNleARyZHAAEXWlZNxq0476.png

主要代碼:

// 創建渲染材質1,2
 
const texture1 = new ht.graph3d.RenderTarget(g3d, g3d.getGL(), 100, 100);
 
const texture2 = new ht.graph3d.RenderTarget(g3d, g3d.getGL(), 1000, 1000);
 
 
// 循環渲染所有的模型到texture2。texture2信息渲染到texture1
 
for (let i = 0; i < nodeCount; i++) {
 
    data = datas[i];
 
    tModel = getDataMesh(data); // 獲取模型網格信息
 
    // 準備著色器1數據
    tModel.mat = model2.mat;
    tModel.matDef[DEFAULT_MAT_NAME] = model2.mat;
    tModel.mat.modelMat = data.getMatrix4().toArray();
 
    // 渲染到texture2
    g3d.setViewport(gl, 0, 0, 1000, 1000);
    g3d.renderModel(texture2, tModel, { clear: true });
 
    // 準備著色器2數據
    model3.mat.uImage = texture2.texture;
    x = i % 100;
    y = Math.floor(i / 100);
    model3.mat.uPos = [x / 100 * 2 - 1 + 1 / 200, 2 * y / 100 - 1 + 1 / 200];
 
    // 渲染到texture1
    g3d.setViewport(gl, 0, 0, 100, 100);
    g3d.renderModel(texture1, model3, { clear: false });
 
 }

方法 1 簡單快速。但檢測結果不準確。方法 2 檢測結果準確,但計算過程復雜。實際使用中兩種方法結合使用。首先使用方法 1 檢測。對于不在球體范圍內的模型,再使用方法 2 檢測。

如果需要檢測橢球體范圍或者長方體的范圍,可以獲取橢球體或長方的變換矩陣,計算獲得逆矩陣。將逆矩陣應用于每一個待檢測模型的節點。此時只需要檢測變換后的模型是否在單位圓或單位立方體內即可。HT SDK 3D 引擎庫提供了豐富的數學計算 API,可以非常直觀簡潔的實現以上功能。

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • gpu
    gpu
    +關注

    關注

    28

    文章

    4729

    瀏覽量

    128892
  • 檢測
    +關注

    關注

    5

    文章

    4482

    瀏覽量

    91444
  • 渲染
    +關注

    關注

    0

    文章

    69

    瀏覽量

    10917
收藏 人收藏

    評論

    相關推薦

    【昉·星光 2 高性能RISC-V單板計算機體驗】體驗Imagination GPU帶來的絲滑3D圖形渲染效果

    GPU渲染的glmark2 SDK鏡像上集成了Imagination的GPU驅動,可以使用GPU進行圖形渲染加速。另外,SDK鏡像內部已經編
    發表于 12-24 21:24

    【「算力芯片 | 高性能 CPU/GPU/NPU 微架構分析」閱讀體驗】--了解算力芯片GPU

    本篇閱讀學習第七、八章,了解GPU架構演進及CPGPU存儲體系與線程管理 █從圖形到計算GPU架構演進 GPU圖像計算發展 ●從三角形開始
    發表于 11-03 12:55

    NVIDIA火熱招聘GPU高性能計算架構師

    這邊是NVIDIA HR Allen, 我們目前在上海招聘GPU高性能計算架構師(功能驗證)的崗位,有意向的朋友歡迎發送簡歷到 allelin@nvidia.comWechat
    發表于 09-01 17:22

    【昉·星光 2 高性能RISC-V單板計算機體驗】星光 2 功耗測評

    ,具有更強大的圖像處理能力,如能進行3D圖像渲染。憑借其高性能和對OpenCL、OpenGL ES、Vulkan的支持,昉·驚鴻7110更智能,更高效。昉·驚鴻7110既能完成一系列復雜的圖像/視頻
    發表于 09-28 10:34

    什么是強制gpu渲染_強制渲染gpu有什么用

    本文主要介紹了gpu的定義、gpu工作原理、gpu功能作用及手機的強制進行GPU渲染的詳細解釋,最后介紹了強制
    發表于 01-05 17:13 ?7896次閱讀

    GPU原理 GPU渲染流程

    GPU渲染流水線,是硬件真正體現渲染概念的操作過程,也是最終將圖元畫到2D屏幕上的階段。GPU管線涵蓋了渲染流程的幾何階段和光柵化階段,但對
    發表于 04-27 11:33 ?9490次閱讀
    <b class='flag-5'>GPU</b>原理 <b class='flag-5'>GPU</b><b class='flag-5'>渲染</b>流程

    GPU領跑運算性能,實現高性能計算新突破

    2018 全國高性能計算學術年會(HPC CHINA 2018)于10月20日在青島閉幕。大會以“HPC+一切皆可計算”為主題,圍繞高性能計算
    的頭像 發表于 10-24 17:43 ?5401次閱讀

    存儲空間高性能計算的重要性

    對于很多有高性能計算需求的用戶來說,通常比較關注的是計算的硬件配置是否是最新的,因為這往往關系到計算效率。但性能
    發表于 08-13 15:28 ?880次閱讀

    GPU加速高性能計算經典應用

    高性能計算(HPC)在重大科學發現的前沿基礎科學研究領域已逐漸成為不可或缺的重要手段之一。從分子動力學模擬、生物制藥、材料電子結構計算、材料模擬到生命科學,都離不開高性能
    的頭像 發表于 05-24 09:13 ?2645次閱讀

    如何將高性能計算和科學計算應用軟件更好的部署到GPU計算平臺

    NVIDIA 與智東西公開課共同策劃推出「GPU 加速高性能計算(HPC)經典應用在線研討會」。研討會將聚焦經典高性能計算和科學
    的頭像 發表于 05-27 09:53 ?1556次閱讀

    一文詳解CPU渲染GPU渲染之間的優劣

    CPU 渲染利用計算機的 CPU 來執行場景并將其渲染到接近完美。這也是執行渲染的更傳統方式。然而,隨著 GPU 的出現,基于
    的頭像 發表于 03-08 14:50 ?2304次閱讀

    智慧渲染,通用為“先”——象帝先推動 “通用、好用、高性能、自主可控” GPU解決方案

    與發熱的要求還很高。 象帝先專注于高性能通用圖形處理器的開發,提供“通用、好用、高性能、自主可控”的GPU芯片與完整的軟件驅動,同時積極推動生態系統的建立與發展。通過在桌面端與服務器端部署通用
    的頭像 發表于 06-25 12:41 ?1796次閱讀

    主流國產gpu產品有哪些品牌(相關規格介紹)

    國產GPU 持續發力,對標行業龍頭縮小差距。GPU 有兩條主要的發展路線:分別為傳統的 2D/3D 圖形渲染 GPU 和專注高性能
    發表于 08-10 10:16 ?3560次閱讀
    主流國產<b class='flag-5'>gpu</b>產品有哪些品牌(相關規格介紹)

    CPU渲染GPU渲染優劣分析

    使用計算機進行渲染時,有兩種流行的系統:基于中央處理單元(CPU)或基于圖形處理單元(GPU)。CPU渲染利用計算機的CPU來執行場景并將其
    的頭像 發表于 05-23 08:27 ?589次閱讀
    CPU<b class='flag-5'>渲染</b>和<b class='flag-5'>GPU</b><b class='flag-5'>渲染</b>優劣分析

    GPU高性能服務器配置

    GPU高性能服務器作為提升計算速度和效率的關鍵設備,在各大應用場景中發揮著越來越重要的作用。在此,petacloud.ai小編為你介紹GPU高性能
    的頭像 發表于 10-21 10:42 ?192次閱讀
    主站蜘蛛池模板: 色色噜一噜| 国产精品97久久AV色婷婷| 久久橹| 快播电影官方网站| 性色欲情网站IWWW| 诱受H嗯啊巨肉舍友1V1| 国产亚洲精品久久久久久白晶晶| 日本高清在线一区二区三区| 69日本人xxxx16—18| 国产午夜精品理论片免费观看| 开心片色99xxxx| 有人在线观看的视频吗免费| 九九黄色大片| 亚洲欧洲一级| 吉吉影音先锋av资源网| 亚洲国产精品线在线观看| 国产精品久久久久久久人热| 十次啦中文网| 国产精品嫩草影院| 午夜视频无码国产在线观看| 国产精品点击进入在线影院高清| 色偷偷7777www| 国产超碰精久久久久久无码AV| 色多多污污在线观看网站| 高H高肉强J短篇NP| 色在线视频亚洲欧美| 国产成人精品免费视频大| 乌克兰粉嫩摘花第一次| 国产乱人伦AV麻豆网| 亚洲spank男男实践网站| 国产在线观看成人| 亚洲久热无码中文字幕| 久草在线在线精品观看99| 影音先锋男人av橹橹色| 老湿影院色情a| 999久久免费高清热精品| 女人把腿张开叫男人桶免费视频| bl 纯肉 高Hbl被强文| 日本久久免费大片| 国产99久久久国产精品成人 | 欧洲vs美洲完整视频|