国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

使用 .NET 8.0 和 OpenGL 創(chuàng)建一個(gè)簡易的渲染器

這篇具有很好參考價(jià)值的文章主要介紹了使用 .NET 8.0 和 OpenGL 創(chuàng)建一個(gè)簡易的渲染器。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言
我個(gè)人對三維渲染領(lǐng)域的開發(fā)有著濃厚的興趣,盡管并未在相關(guān)行業(yè)工作過,我的了解還很片面。去年,在與群友聊天時(shí),他們推薦了一本《Unity Shader入門精要》,說適合像我這樣想自學(xué)的新人,于是我打開了通往新世界的大門。這本書涵蓋了很多基礎(chǔ)的渲染知識,如光照、陰影、各種風(fēng)格的渲染等等。對于有興趣的同學(xué),可以在京東讀書中在線閱讀,無需購買紙質(zhì)版。 在學(xué)習(xí)過程中,我發(fā)現(xiàn)使用Unity Shader編寫著色器非常方便,它很好地封裝了渲染概念中的Pipeline、Pass等要點(diǎn)。因此,我萌生了一個(gè)想法:是否可以模仿Unity Shader來開發(fā)一款屬于自己的渲染器呢?

必備的技術(shù)點(diǎn) (不分先后)

  • 線性代數(shù) -?在編寫Shader時(shí),了解線性代數(shù)是至關(guān)重要的,因?yàn)樵S多內(nèi)置函數(shù)與線性代數(shù)相關(guān),幫助你理解代碼含義。
  • 圖形學(xué)基礎(chǔ) -?了解圖形學(xué)基礎(chǔ)也是必要的,即使只對圖形庫的作用和渲染流程有基本了解。
  • 圖形庫API -?掌握圖形庫API是開發(fā)渲染器的核心,可以根據(jù)個(gè)人偏好選擇適合自己的API,如OpenGL、Vulkan、DirectX等。
  • 編程基礎(chǔ) -?編程基礎(chǔ)也是必備技能。

這些知識結(jié)合起來,可以幫助你更好地開發(fā)自己的渲染器。

項(xiàng)目搭建和所需依賴

  • Silk.NET.OpenGL - OpenGL 的 C# 包裝器。
  • Silk.NET.Shaderc、Silk.NET.Shaderc.Native - 用于以 SPIR-V 方式編譯 GLSL。注意,OpenGL 4.6 支持 SPV Shader。
  • Silk.NET.Windowing、Silk.NET.Input - 對 glfw、sdl 窗口進(jìn)行包裝,包含控制器輸入(鼠標(biāo)、鍵盤等)。
  • StbImageSharp - 用于解析圖片。
  • Silk.NET.Assimp - 用于解析三維模型。
  • Silk.NET.Maths - 一個(gè)完善的數(shù)學(xué)庫。
  • Hexa.NET.ImGui、Hexa.NET.ImGuizmo - ImGui 的 C# 包裝器。

項(xiàng)目架構(gòu)

  • TrContext.cs - 統(tǒng)一管理使用的 GL 和 GL 擴(kuò)展的上下文。
  • TrShader.cs - 用于加載 Shader,支持 SPV 二進(jìn)制文件和 Shader 字符串。
  • TrRenderPipeline.cs - 管理一條管線中的 Shader,并維護(hù)管線狀態(tài),如混合狀態(tài)、重采樣、深度測試、模板測試等。
  • TrRenderPass.cs - 管理多條管線和切換管線。
  • TrTexture.cs - 管理紋理和采樣器屬性。
  • TrFrame.cs - 創(chuàng)建并維護(hù)一個(gè) Frame,支持多重采樣。
  • TrScene.cs - 內(nèi)置一個(gè) Frame 的 ImGui 窗口,用于綁定渲染。
  • TrBuffer.cs - 使用 OpenGL 創(chuàng)建并維護(hù)內(nèi)存,可設(shè)置內(nèi)存優(yōu)先級。
  • TrTransform.cs - 簡易的矩陣變換類,支持平移、縮放、旋轉(zhuǎn)。
  • TrCamera.cs - 相機(jī)類。
  • TrMesh.cs -?管理網(wǎng)格體的頂點(diǎn)數(shù)據(jù)和索引數(shù)據(jù)。
  • TrMaterial.cs -?渲染器的核心,管理著渲染管線和材質(zhì)屬性,負(fù)責(zé)進(jìn)行網(wǎng)格的渲染。

項(xiàng)目中,所有材質(zhì)和 Shader 按照書中的章節(jié)進(jìn)行了分組管理。

使用 .NET 8.0 和 OpenGL 創(chuàng)建一個(gè)簡易的渲染器

項(xiàng)目預(yù)覽

  • 初始界面

使用 .NET 8.0 和 OpenGL 創(chuàng)建一個(gè)簡易的渲染器

  • 窗體菜單

使用 .NET 8.0 和 OpenGL 創(chuàng)建一個(gè)簡易的渲染器

  • 場景模型拾取和 Transform

使用 .NET 8.0 和 OpenGL 創(chuàng)建一個(gè)簡易的渲染器

  • 漫反射場景

使用 .NET 8.0 和 OpenGL 創(chuàng)建一個(gè)簡易的渲染器

  • ?各類紋理渲染

使用 .NET 8.0 和 OpenGL 創(chuàng)建一個(gè)簡易的渲染器

  • Shadertoy?網(wǎng)站的 shader 渲染,我抄了幾個(gè)?Shadertoy BETA

使用 .NET 8.0 和 OpenGL 創(chuàng)建一個(gè)簡易的渲染器

?

項(xiàng)目地址

qian-o/Triangle: OpenGL 實(shí)戰(zhàn)項(xiàng)目。 (github.com)文章來源地址http://www.zghlxwxcb.cn/news/detail-827290.html

到了這里,關(guān)于使用 .NET 8.0 和 OpenGL 創(chuàng)建一個(gè)簡易的渲染器的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 使用OpenGL 和 opengl ES 渲染YUV圖片文件的QT示例

    頭文件:CPlayWidget.h cpp文件:CPlayWidget.cpp 默認(rèn)打開 ./test.yuv文件 頭文件:CPlayWidget.h? 與上面沒有差別 cpp文件:只替換了著色器代碼:

    2024年01月20日
    瀏覽(23)
  • macOS下使用OpenGL做離屏渲染

    有時(shí),我們想通過GPU做一些視頻、圖像處理,而處理的結(jié)果不需要顯示在顯示器上,而是直接交給主存,這時(shí)候我們可以通過OpenGL的 離屏渲染 ( Offscreen Rendering )來實(shí)現(xiàn)。 由于我們不需要將渲染好的像素顯示到屏幕上,因此我們可以使用framebuffer object,將像素放到 fbo 上,

    2024年02月03日
    瀏覽(17)
  • Qt使用OpenGL進(jìn)行多線程離屏渲染

    Qt使用OpenGL進(jìn)行多線程離屏渲染

    基于Qt Widgets的Qt程序,控件的刷新默認(rèn)狀況下都是在UI線程中依次進(jìn)行的,換言之,各個(gè)控件的QWidget::paintEvent方法會在UI線程中串行地被調(diào)用。若是某個(gè)控件的paintEvent很是耗時(shí)(等待數(shù)據(jù)時(shí)間+CPU處理時(shí)間+GPU渲染時(shí)間),會致使刷新幀率降低,界面的響應(yīng)速度變慢。 假如這個(gè)

    2024年02月02日
    瀏覽(20)
  • .Net 8.0 除gRPC之外的另一個(gè)選擇,IceRPC之快速開始HelloWorld

    .Net 8.0 除gRPC之外的另一個(gè)選擇,IceRPC之快速開始HelloWorld

    很高興啊,我們來到了第一篇,程序員的HelloWorld,快速開始RPC之游 演示如何在幾分鐘內(nèi),使用 IceRPC ,構(gòu)建和運(yùn)行一個(gè)完整的客戶端-服務(wù)器(C/S)應(yīng)用程序. 必要條件: 只要電腦安裝 .NET 8 SDK 就行了. 來吧,開始你的RPC之旅 接下來,我們要一起構(gòu)建一個(gè)簡單的網(wǎng)絡(luò)應(yīng)用程序,包括如下:

    2024年03月20日
    瀏覽(22)
  • 使用Python和OpenGL渲染PS2存檔3D圖標(biāo)

    使用Python和OpenGL渲染PS2存檔3D圖標(biāo)

    經(jīng)過前面一系列文章的鋪墊,PS2存檔3D圖標(biāo)的文件已經(jīng)全部解析完畢。本篇開始將介紹使用如下工具將3D圖標(biāo)渲染出來,并盡可能接近PS2主機(jī)原生的效果。 Python3 PyGame Numpy ModernGL PyGLM 第一步先初始化 PyGame ,設(shè)置窗口大小為 640x480 , FPS 為 60 。開啟 OpenGL 渲染模式, OpenGL 的版

    2024年02月03日
    瀏覽(44)
  • ffmpeg cuda硬件解碼后處理使用opengl渲染,全硬件流程

    使用硬件解碼后不要transfer到內(nèi)存,使用cuda轉(zhuǎn)化nv12 - bgr24 轉(zhuǎn)化完畢后cuda里面存了一份bgr24 如果需要opencv gpumat直接使用cuda內(nèi)存,則可以手動構(gòu)造gpumat 可以使用gpumat的各種函數(shù) ptr(0)、ptr(1)和ptr(2)分別獲取了R、G、B三個(gè)通道的數(shù)據(jù)指針。 使用reinterpret_cast將uchar 指針轉(zhuǎn)換為ucha

    2024年04月12日
    瀏覽(23)
  • 搭建一個(gè)簡易框架  3秒創(chuàng)建一個(gè)WebApi接口

    搭建一個(gè)簡易框架 3秒創(chuàng)建一個(gè)WebApi接口

    前端ajax請求數(shù)據(jù),傳遞的參數(shù)都是一個(gè)json字符串,經(jīng)過多次解析發(fā)現(xiàn)其實(shí)都是一個(gè)DataSet {\\\"selectA1\\\":[{\\\"Name\\\":\\\"156324\\\"}]} {\\\"selectA1\\\":[{\\\"Name\\\":\\\"156324\\\"}],\\\"selectA2\\\":[{\\\"IdA\\\":\\\"11\\\",\\\"IdB\\\":\\\"12\\\"},{\\\"IdA\\\":\\\"13\\\",\\\"IdB\\\":\\\"14\\\"}]} 既然如此那么數(shù)據(jù)庫設(shè)計(jì)一張表 . . 前端請求數(shù)據(jù)時(shí)傳遞一個(gè)字符串JsonParm,里面放json格式

    2024年02月03日
    瀏覽(20)
  • 創(chuàng)建一個(gè)簡易百度百科詞條的方法!

    創(chuàng)建一個(gè)簡易百度百科詞條的方法!

    百度百科作為中國最大的中文百科全書,擁有著廣泛的用戶群體和權(quán)威性。對于許多人來說,創(chuàng)建一個(gè)百度百科詞條是一種展示自己和宣傳自己的有效方式。所以越來越多的人都想要上百度百科,百度百科詞條的創(chuàng)建是一大難關(guān),今天伯樂網(wǎng)絡(luò)傳媒就來給大家分享創(chuàng)建一個(gè)簡

    2024年02月21日
    瀏覽(21)
  • 如何創(chuàng)建一個(gè)簡易的HTML網(wǎng)頁框架

    如何創(chuàng)建一個(gè)簡易的HTML網(wǎng)頁框架

    在我們初步學(xué)習(xí)了web前端開發(fā)的一些知識時(shí),我們可能會考慮構(gòu)建一個(gè)簡單的html網(wǎng)站,但是,如何著手去開始我們的網(wǎng)站,對于新手來說可能是個(gè)問題。 在這篇文章中,我將介紹我在構(gòu)建一個(gè)簡易的網(wǎng)頁時(shí),首先去做的事情。 當(dāng)然,我本身也并非專業(yè)的前端設(shè)計(jì)師,寫此文

    2024年02月06日
    瀏覽(21)
  • 五.實(shí)戰(zhàn)軟件部署 1-3實(shí)戰(zhàn)章節(jié)-前言&MYSQL 5.7版本在centos系統(tǒng)安裝&MYSQL 8.0版本在centos系統(tǒng)安裝

    五.實(shí)戰(zhàn)軟件部署 1-3實(shí)戰(zhàn)章節(jié)-前言&MYSQL 5.7版本在centos系統(tǒng)安裝&MYSQL 8.0版本在centos系統(tǒng)安裝

    目錄 五.實(shí)戰(zhàn)軟件部署 1-實(shí)戰(zhàn)章節(jié)-前言 五.實(shí)戰(zhàn)軟件部署 2-MYSQL 5.7版本在centos系統(tǒng)安裝 1-配置yum倉庫 2-使用yum安裝mysql 3-安裝完成后,啟動mysql并配置開機(jī)自啟動 4-檢查mysql的運(yùn)行狀態(tài) --配置 1-獲取mysql的初識密碼 2-登錄mysql數(shù)據(jù)庫系統(tǒng) 3-修改root用戶密碼 4-配置root的簡單密碼

    2024年02月21日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包