GrafShader

A VIK Wikiből
Ugrás a navigációhoz Ugrás a kereséshez

Ez az oldal a korábbi SCH wiki-ről lett áthozva. Az eredeti változata itt érhető el.

Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor kérlek javíts rajta egy rövid szerkesztéssel.

Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót


Shaderek

A vertex shader kimenete és a pixel árnyaló (fragment shader) bemenete között egy GL_TRIANGLES primitív feldolgozása során ez történik:

  • A kimeneti regiszterekben (POSITION, TEXCOORD0..) a hardver összevár három csúcspontot, amelyek egy háromszöget alkotnak (0.5p).
  • A háromszöget homogén-koordinátákban a Sutherland-Hodgeman algoritmussal vágja az alábbi egyenletekkel definiált vágósíkokra: -w<x<w, -w<y<w, -w<z<w (azaz egy [x,y,z,w] pont akkor számít belső pontnak, ha mind a 6 egyenlőtlenség teljesül) (1p). A vágóalgoritmus egyenként dolgozza fel a vágósíkokat, és vágja a háromszöget. Ha egy két két végpontja közül pontosan az egyik sérti meg az adott egyenlőtlenséget, akkor azt kicseréli a metszéspontra. Példaul a –w<x esetén a [x1,y1,z1,w1] és [x2,y2,z2,w2] végpontú élre az -w1t -w2(1-t) = x1t +x2(1-t) egyenletet oldja meg t-re és a metszéspontot a [x1,y1,z1,w1] t + [x2,y2,z2,w2] (1-t) kifejezésbe helyettesíti be. Ugyanezt teszi az összes regiszterekben lévő csúcspont tulajdonsággal (pl. szín, textúrakoordináta) (1p).
  • A kapott sokszöget újraháromszögesíti (0.5p).
  • Alkalmazza a képernyő transzformációt, azaz a [-1,1]x[-1,1]x[-1,1] kockát a glViewport-tal beállított [viewport.left,viewport.right]x[viewport.bottom,viewport.top]x[0,1]-re képezi le (megjegyzés, a z tartomány lehet más is, de ezt nem tanultuk, aki mégis tudja, az plusz pontot kap) (0.5p).
  • A háromszög xy vetületének kitöltéséhez kiszámítja az inkremenseket a z-re és az összes tulajdonságra (szín, textúra koordináták) (a képleteket illetően lásd a következő feladatot) (0.5p).
  • A háromszöget pásztánként kitölti meglátogatva azokat a pixeleket, úgy, hogy inkrementális elven az összes csúcsponttulajdonságot a belső pixelre lineárisan interpolálja (1p).
  • Meghívja a pixel árnyalót.

-- Maday Peter - 2008.01.15.