cpu和gpu如何互動以呈現計算機圖形?

斯肯內爾攝。...

cpu和gpu如何互動以呈現計算機圖形?Your computer’s Central Processing Unit (CPU) and Graphics Processing Unit (GPU) interact every moment you’re using your computer to deliver you a crisp and resp***ive visual interface. Read on to better understand how they work together.

斯肯內爾攝。

今天的問答環節是由SuperUser提供的,SuperUser是Stack Exchange的一個分支,它是一個由Q&a網站組成的社群驅動分組。

問題

超級使用者讀者Sathya提出了一個問題:

在這裡你可以看到一個小的C++程式的截圖三角形.exe基於openglapi的旋轉三角形。

cpu和gpu如何互動以呈現計算機圖形?

誠然,這是一個非常基本的例子,但我認為它適用於其他圖形卡操作。

我只是好奇,想知道雙擊的整個過程三角形.exe在windowsxp下,直到我能看到顯示器上旋轉的三角形。發生了什麼,CPU(首先處理.exe)和GPU(最後輸出螢幕上的三角形)是如何互動的?

我想顯示這個旋轉三角形主要涉及以下硬體/軟體:

硬體

  • 硬碟驅動器
  • 系統記憶體(RAM)
  • 中央處理器
  • 影片儲存器
  • 圖形處理器
  • 液晶顯示器

軟體

  • 作業系統
  • DirectX/OpenGL API
  • Nvidia驅動程式

有人能解釋一下這個過程嗎,也許可以用一些流程圖來說明一下?

它不應該是一個涵蓋每一個步驟的複雜解釋(估計超出了範圍),而是一箇中級It人員可以遵循的解釋。

我敢肯定,很多自稱IT專業人士的人都無**確描述這個過程。

答案

cpu和gpu如何互動以呈現計算機圖形?

儘管有多名社群成員回答了這個問題,但奧利弗·薩爾茨堡(Oliver Salzburg)還是不遺餘力地回答了這個問題,不僅給出了詳細的回答,而且還附上了出色的圖表。

JasonC提供的圖片,可在此處作為牆紙使用。

他寫道:

我決定寫一點關於程式設計方面以及元件如何相互通訊的內容。也許它能給某些領域帶來一些啟示。

簡報

哪怕是你在問題中釋出的一張圖片,也能畫在螢幕上,這需要什麼呢?

在螢幕上畫三角形有很多方法。為簡單起見,假設沒有使用頂點緩衝區。(頂點緩衝區是儲存座標的記憶體區域)假設程式只是告訴圖形處理管道一行中的每個頂點(頂點只是空間中的一個座標)。

但是,在我們能畫出任何東西之前,我們首先要執行一些腳手架。我們稍後再看原因:

// Clear The Screen And The Depth Buffer glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Reset The Current Modelview Matrix glMatrixMode(GL_MODELVIEW); glLoadIdentity(); // Drawing Using Triangles glBegin(GL_TRIANGLES); // Red glColor3f(1.0f,0.0f,0.0f); // Top Of Triangle (Front) glVertex3f( 0.0f, 1.0f, 0.0f); // Green glColor3f(0.0f,1.0f,0.0f); // Left Of Triangle (Front) glVertex3f(-1.0f,-1.0f, 1.0f); // Blue glColor3f(0.0f,0.0f,1.0f); // Right Of Triangle (Front) glVertex3f( 1.0f,-1.0f, 1.0f); // Done Drawing glEnd();

那是怎麼回事?

當你編寫一個程式,希望使用圖形卡,你通常會選擇某種介面的驅動程式。驅動程式的一些眾所周知的介面包括:

  • OpenGL
  • Direct3D
  • 庫達

對於這個例子,我們將使用OpenGL。現在,驅動程式介面為您提供了使程式與圖形卡(或驅動程式,然後驅動程式與圖形卡)對話所需的所有工具。

這個介面一定會給你一些工具。這些工具採用API的形式,您可以從程式中呼叫它。

這個API就是我們在上面的例子中看到的。讓我們仔細看看。

腳手架

在你真正繪製任何實際的圖形之前,你必須先進行一次設定。您必須定義您的視口(實際渲染的區域)、您的透檢視(相機進入您的世界)、您將使用什麼樣的抗鋸齒(平滑三角形的邊緣)…

但我們不會看這些。我們只看一眼你每一幀都要做的事情。比如:

清除螢幕

圖形管道不會為您清除每一幀的螢幕。你得說出來。為什麼?這就是為什麼:

cpu和gpu如何互動以呈現計算機圖形?

如果你不清除螢幕,你只需在每一幀上畫。這就是為什麼我們用gl\u COLOR\u BUFFER\u位集呼叫glClear。另一位(GL\u DEPTH\u BUFFER\u位)告訴OpenGL清除depthbuffer。此緩衝區用於確定哪些畫素位於其他畫素的前面(或後面)。

轉變

cpu和gpu如何互動以呈現計算機圖形? Image source

變換是我們獲取所有輸入座標(三角形的頂點)並應用ModelView矩陣的部分。這是解釋模型(頂點)如何旋轉、縮放和平移(移動)的矩陣。

接下來,我們應用投影矩陣。這會移動所有座標,使它們正確面對我們的相機。

現在我們再次變換,使用我們的視口矩陣。我們這樣做是為了將模型縮放到監視器的大小。現在我們有一組頂點可以渲染了!

我們稍後再談轉型。

繪圖

為了繪製一個三角形,我們可以簡單地告訴OpenGL透過呼叫glBegin with the GL\u triangles來開始一個新的三角形列表不變。在那裡還有其他你可以畫的形式。像三角帶或三角扇子。這些主要是最佳化,因為它們需要較少的CPU和GPU之間的通訊來繪製相同數量的三角形。

之後,我們可以提供一個由3個頂點組成的列表,這些頂點應該組成每個三角形。每個三角形使用3個座標(就像我們在三維空間中一樣)。此外,我還透過在呼叫glVertex3f之前呼叫glcolor3f,為每個頂點提供一種顏色。

3個頂點(三角形的3個角)之間的著色由OpenGla自動計算。它將在多邊形的整個面上插值顏色。

相互作用

現在,當你點選視窗。應用程式只需捕獲發出單擊訊號的視窗訊息。然後您可以在您的程式中執行任何您想要的操作。

一旦你想開始與你的3D場景互動,這就變得困難多了。

您首先必須清楚地知道使用者單擊視窗的畫素。然後,考慮到你的視角,你可以計算光線的方向,從滑鼠點選進入你的場景。然後可以計算場景中是否有任何物件與該光線相交。現在您知道使用者是否單擊了一個物件。

那麼,如何使它旋轉?

轉型

我知道通常應用的兩種型別的轉換:

  • 基於矩陣的變換
  • 骨基轉化

區別在於骨骼影響單個頂點。矩陣總是以相同的方式影響所有繪製的頂點。讓我們看一個例子。

例子

早些時候,我們在繪製三角形之前載入了單位矩陣。單位矩陣是一種根本不提供變換的矩陣。所以,無論我畫什麼,都只受我的視角影響。所以,三角形根本不會旋轉。

如果我現在想旋轉它,我可以自己(在CPU上)做數學運算,然後用其他座標(旋轉的)呼叫glVertex3f。或者我可以讓GPU做所有的工作,在繪圖前呼叫glrotatef:

// Rotate The Triangle On The Y axis glRotatef(amount,0.0f,1.0f,0.0f);

當然,數量只是一個固定值。如果你想設定動畫,你必須跟蹤數量並每幀增加一次。

那麼,等等,剛才的駭客帝國談話怎麼了?

在這個簡單的例子中,我們不必關心矩陣。我們簡單地稱之為glRotatef,它為我們處理所有這些。

glRotate produces a rotation of angle degrees around the vector x y z . The current matrix (seeglMatrixMode) is multiplied by a rotation matrix with the product replacing the current matrix, as ifglMultMatrix were called with the following matrix as its argument:

x 2 ⁡ 1 – c + c x ⁢ y ⁡ 1 – c – z ⁢ s x ⁢ z ⁡ 1 – c + y ⁢ s 0 y ⁢ x ⁡ 1 – c + z ⁢ s y 2 ⁡ 1 – c + c y ⁢ z ⁡ 1 – c – x ⁢ s 0 x ⁢ z ⁡ 1 – c – y ⁢ s y ⁢ z ⁡ 1 – c + x ⁢ s z 2 ⁡ 1 – c + c 0 0 0 0 1

好吧,謝謝你!

結論

顯而易見的是,OpenGL有很多話題。但它什麼也沒告訴我們。通訊在哪裡?

OpenGL在這個例子中告訴我們的唯一一件事就是它何時完成。每次手術都需要一定的時間。有些手術需要很長的時間,有些手術很快。

傳送一個頂點到GPU將是如此之快,我甚至不知道如何表達它。從CPU向GPU傳送數千個頂點,每一幀,很可能根本沒有問題。

清除螢幕可能需要毫秒或更糟的時間(請記住,繪製每一幀通常只有大約16毫秒的時間),具體取決於視口的大小。要清除它,OpenGL必須以你想要清除的顏色繪製每個畫素,可能是數百萬畫素。

除此之外,我們幾乎只能向OpenGL詢問圖形介面卡的功能(最大解析度、最大抗鋸齒、最大顏色深度……)。

但我們也可以用畫素填充紋理,每個畫素都有特定的顏色。因此,每個畫素都有一個值,紋理是一個巨大的“檔案”,裡面充滿了資料。我們可以將其載入到圖形卡(透過建立紋理緩衝區),然後載入一個著色器,告訴該著色器使用我們的紋理作為輸入,並在“檔案”上執行一些非常繁重的計算。

然後我們可以將計算結果(以新顏色的形式)渲染成新的紋理。

這就是你可以讓GPU在其他方面為你工作的方式。我想CUDA在這方面也有類似的表現,但我從來沒有機會與之合作。

我們真的只觸及了整個主題。3D圖形程式設計真是個怪獸。

cpu和gpu如何互動以呈現計算機圖形? Image Source


有什麼要補充的解釋嗎?在評論中發出聲音。想從其他精通技術的Stack Exchange使用者那裡瞭解更多答案嗎?在這裡檢視完整的討論主題。

  • 發表於 2021-04-12 06:51
  • 閱讀 ( 42 )
  • 分類:網際網路

你可能感興趣的文章

windows10下如何增加專用影片ram

... 如何在windows10中檢查vram ...

  • 發佈於 2021-03-11 01:28
  • 閲讀 ( 57 )

windows中的vulkan執行時庫是什麼?

... 7上,訪問“控制面板”>“程式和功能”。向下滾動以查詢條目,或使用右上角的搜尋框查詢條目。 ...

  • 發佈於 2021-03-11 14:52
  • 閲讀 ( 51 )

你電腦的終極指南:你想知道的一切——等等

...技術實際上還沒有發展到那個程度。當我們在2012年探索如何讓您的計算機保持安靜時,常見的解決方案是: ...

  • 發佈於 2021-03-13 07:48
  • 閲讀 ( 50 )

如何測試linux pc的效能

...此,這幾乎是獲取定量資料的唯一方法,說明系統的效能如何——如果您的數字不足,這表明您可能希望升級一些PC元件。 ...

  • 發佈於 2021-03-17 09:58
  • 閲讀 ( 48 )

為什麼windows會崩潰?故障排除指南

... 本文將重點討論什麼是意外的計算機崩潰以及如何識別問題。計算機崩潰的發生有多種原因。對於普通的PC使用者來說,PC崩潰通常被視為PC損壞或損壞的跡象。在現實中,PC機的關閉很少值得擔心。只要電腦沒有受到...

  • 發佈於 2021-03-17 13:14
  • 閲讀 ( 57 )

windows十大最佳免費基準程式

... 請閱讀我們關於如何像專業人士一樣進行基準測試的文章,瞭解如何準確地對元件進行基準測試。 ...

  • 發佈於 2021-03-18 09:39
  • 閲讀 ( 47 )

如何為初學者diy以太坊採礦裝置

...有可能創造一個DIY挖掘鑽機,使用很少的權力。本文介紹如何建立自己的廉價以太坊採礦鑽機。 ...

  • 發佈於 2021-03-20 17:35
  • 閲讀 ( 45 )

什麼是cuda核心,它們如何改進pc遊戲?

...人們對這些神祕的核心讚不絕口,但你仍然不知道他們是如何改進GPU的。對你來說,它們只是讓你想到海洋生物的東西。 ...

  • 發佈於 2021-03-20 21:38
  • 閲讀 ( 48 )

如何在chrome中開啟和關閉硬體加速

...魁禍首,最好的辦法是禁用它,看看是否解決了問題。 如何開啟或關閉硬體加速 預設情況下,硬體加速是在Chrome上啟用的,所以讓我們先看看禁用它。 啟動Chrome,單擊選單圖示,然後單擊“設定”。或者,您可以鍵入chrome://設...

  • 發佈於 2021-04-03 15:19
  • 閲讀 ( 69 )

windows工作管理員:完整指南

...Windows7釋出以來,微軟已經極大地改進了工作管理員。 如何啟動工作管理員 Windows提供了許多啟動工作管理員的方法。按Ctrl+Shift+Esc以使用鍵盤快捷鍵開啟工作管理員,或右鍵單擊Windows工作列並選擇“工作管理員” 您也可以按...

  • 發佈於 2021-04-03 17:57
  • 閲讀 ( 122 )
殘念罪
殘念罪

0 篇文章

作家榜

  1. admin 0 文章
  2. 孫小欽 0 文章
  3. JVhby0 0 文章
  4. fvpvzrr 0 文章
  5. 0sus8kksc 0 文章
  6. zsfn1903 0 文章
  7. w91395898 0 文章
  8. SuperQueen123 0 文章

相關推薦