簡體   English   中英

使用Direct 3D時,應該在代碼中處理什么以及在HLSL中應該處理什么?

[英]When using Direct 3D, what should be processed in code and what should be processed in HLSL?

我是3D編程的新手,即使用DirectX。 我一直在嘗試按照如何做基本事情的教程,我一直在看微軟提供的示例。 我遇到的一個重大問題是如何判斷在實際游戲代碼中應該進行哪些計算以及在HLSL中應該進行哪些計算。 我無法理解應該在哪里做什么,因為看起來,對我來說,你幾乎可以擁有與着色器文件中的計算相關的所有代碼,或者你可以將它全部放在可執行代碼中並且只發送熊最小的像素和頂點着色器。 如何判斷代碼應該放在哪里? 如果你需要一個例子,我會試着找一個。

“代碼” - CPU代碼

“HLSL” - GPU代碼

基本上,您希望所有純圖形都在GPU上發生。 也就是說,當有關您要渲染的內容的信息已發送到GPU時,它應接管並使用該信息生成最終圖像。

你想讓CPU對GPU說“這就是我要呈現的內容,這里就是你需要做的一切” ,然后確保告訴GPU “這就是你渲染它的方式”

一些例子(無論如何都不是完整的或最終的列表):

中央處理器:

  • 處理窗口打開/關閉/調整大小的任何事情
  • 用戶從鼠標,鍵盤輸入
  • 讀取和設置配置
  • 生成和更新視圖矩陣
  • 應用邏輯
  • 設置和初始化渲染(紋理,緩沖區等)
  • 生成頂點數據(位置,紋理坐標等)
  • 創建圖形實體(三角形,紋理,顏色等)
  • 處理動畫(時間步,交換緩沖區)
  • 將更新的數據發送到每幀的GPU

GPU:

  • 使用視圖矩陣將東西放在屏幕上的正確位置
  • 從頂點數據到片段數據的插值
  • 着色(通常,這是最復雜的部分)
  • 計算並寫入最終像素顏色

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM