引擎技術研究之Shader技術

2021-04-20 12:43:08 字數 2083 閱讀 6656

shader

技術屬於

gpu的渲染技術,其相應語言是高階著色器語言

(high level shader language

簡稱hlsl

)。hlsl

主要作用為將一些複雜的影象處理快速而又有效率地在顯示卡上完成。 在

directx

中有兩種

shader

,頂點著色器

vertex  shader (vs)

和畫素著色器

pixel  shader (ps)

。能夠實現vs和

ps的顯示卡的圖形處理流水線被稱作為是可程式設計的。

vs實際代替了傳統圖形渲染流水線裡的

t&l部分,其以頂點為計算單位

,負責處理世界座標中的頂點資訊,可以處理光照、陰影、座標變換、法向量等等。

ps代替了傳統圖形渲染流水線中的光柵化部分,比如紋理貼圖等

, 其以畫素為計算單位,用來操縱物體表面的色彩和外觀。

1shader基本框架

shader

檔案的字尾名為

.fx,可在檔案裡編寫如下**:

首先定義一顏色紋理變數:

texture colormap

,這是shader與c++的介面.

定義一取樣變數,例:

sampler colorsampler = sampler_state

;設計一頂點格式,例:

struct vsoutshadow

;定義全域性變數:

shared uniform float4x4 world: world//

世界變換矩陣

shared uniform float4x4 view: view;//

觀察矩陣

shared uniform float4x4 projection : projection;//

投影矩陣

頂點著色函式,例:

vsoutshadow vs_scene

( float4 inposition : position, float2 texcoord:texcoord0)

畫素著色函式,例:

float4 ps_scene( vsoutshadow in) : color0

定義技術:

technique techscene

}

2.在c++應用shader

先設計一

effectmanager

類,並提供一介面,用於根據傳入的

.fx

檔案的路徑名建立一

id3dxeffect

型別的指標m_pshader並使其指向該檔案,函式返回m_pshader,可用m_pshader呼叫相應函式設定shader裡的變數值,例如:

m_pshader->setfloat("ambient",m_sight);

m_pshader->setmatrix("world",&finalworldmat);

其中ambient,world為shader裡的變數,m_sight,finalworldmat為c++程式裡的變數,設定特定型別的變數需呼叫相應的函式。

設定技術:m_pshader->settechnique("techscene")

techscene

為shader裡已定義的技術。

著色,例:

uint passnum=0;

m_pshader->begin(&passnum,0);

for(uint pass=0;pass

m_pshader

->end();

_render

()裡需設定紋理,例

:m_pshader->settexture("colormap",m_pmeshtextures[i]);

提交: m_pshader

->commitchanges();

引擎技術研究之渲染到目標

渲染到目標,通俗地說就是把特定場景的物體放在目標上顯示。這個目標可以是紋理,視窗等。本文介紹的是把場景渲染到紋理,並以的形式儲存起來。一其原理如下 在初始化時建立一紋理texture,獲取指向該紋理的指標,接著建立深度表面,並獲取指向其的指標depthsu ce。在渲染時先獲取系統的預設的渲染目標和...

AOP技術研究 引言

1 引言 軟體設計因為引入物件導向思想而逐漸變得豐富起來。一切皆為物件 的精義,使得程式世界所要處理的邏輯簡化,開發者可以用一組物件以及這些物件之間的關係將軟體系統形象地表示出來。而從物件的定義,進而到模組,到元件的定義,利用物件導向思想的封裝 繼承 多型的思想,使得軟體系統開發可以向搭建房屋那樣,...

技術研究與工程開發

一 r d概念的分拆 搞研發的掏出名片來一般會印上這麼個部門 r d。所謂r d就是research develop,研究與開發,所以簡稱研發。我曾經碰到個高人,強調把這兩詞拆開來單獨理解。研究 就是把乙個團隊知識之外的知識點弄懂,引入專案中使用 開發 就是把已經明白的東西做出來。二 為什麼多數程式...