Kiszámítása a felületre merőleges, Direct3D, cikkek, programozás - programozás C,

Az utolsó bemutató, ahol megmutattam strukturálása és osztályozása a projekt, adok a példa egy háromdimenziós táj. táj építési maga az algoritmus írom le, a későbbi órák (erőkkel dolgozik a táj), de most már érdekel, hogyan lehet előállítani a szokásos számítás a poligonok teszik ki a felszínre a táj. Azok, akik futni a példákat, látták a világítás történik. Az egész program, a táj, telepítését a normál nem kerül sor, az egyetlen említése normals szereplő felhívás GenerateNormals () függvényt. Azt létre kifejezetten a kiszámítása normál terep (és benne van az osztályban, míg a háromdimenziós tárgyak, azt hiszem, és akkor lesz egy kicsit más helyen).

Nézzük először az elmélet a megállapítás a síkjára merőleges a munkapont (gyakran fel ezt a kérdést), és megfontolja, hogyan valósítható meg a Direct3D8 (vagy inkább, ahogy én tettem).

Tehát mi a normális? A normális az irányt a térben, és a paramétereket (x, y, z), valamint minden vektor. A funkció a normál nevezhetjük, hogy annak hossza mindig egyenlő 1 Azaz:

Hogy ez normális? Kezdeni, hogy három pontot (a, b és c). Az ezeket a pontokat kell számolnunk a p vektor (a pont a B) és a q (A-tól C):

Miután megkapta a két vektor, kiszámíthatjuk a normális, mint a kereszt terméket a vektorok p és q a normalizálására az eredmény. Ez lehet megjeleníteni pszeudo-kód:

Normalizálásához az eredményeket kell osztani minden paraméter-vektort a hossza, amelyet úgy számítunk, mint:

Ez az elmélet. Most, ahogy én tettem.

Van egy sor pont képviseli a csúcsok és egy sor mutató, amely megmutatja, hogyan kell kijátszani ezeket a csúcsokat (azaz a tényleges építési hulladéklerakók). Meg kell futtatni az indexeket a tömb indexek, így koordináta értékeit három pontot alkotó egyetlen poligon, majd kiszámítja és szerezzen normálvektorok (majd rendelje hozzá a kívánt tetején). Itt van, hogyan néz ki.

- p_ObjInd - tömbindexek
- p_ObjVert - vertex array
- dwNumIndecies - száma indexek
- V1, V2, V3 - Federation három csúcsa (az elmélet a, b és c)
- a, b, c - a vertex (tárolják a koordinátáit egy vektor)
- p és q - vektor az A pont a B és A-tól, illetve a C
- N - Számított normális

Mint látható, ez egyszerű. A kereszt termék a vektorok p és q normalizálására használható eredményeket D3DXVec3Cross () függvény és D3DXVec3Normalize ().

Egy másik szempont. Ha hagyjuk mindent, ahogy van, a fények felgyulladnak több „megtört”. Ennek elkerülése érdekében - meg kell, hogy a simító normálisokat szomszédos poligonok. Képzeld - akkor tulajdonképpen várható valamilyen normális egy pontot (csomópontok azonos koordinátákkal), de tartozó különböző sokszög. Csinálom elég könnyen.

Lehetetlen kiszámítani a normális felső, mert ez csak egy pont a térben. Azonban lehet, hogy egy hozzávetőleges számítás. Kiszámításakor a rendes megértését ötletek síkok és arcok, a merőlegesek a csúcsok a módszerrel könnyen. Vertex normals lesz az átlag a normálvektora arcokat maga körül. Így meghatározó szomszédos arcok, akkor könnyen meghatározni a normális ennél csúcs. Itt van egy minta számítási algoritmus: hozzon létre egy n változó, amelyekhez a vektort, és inicializálja azt (0,0,0). Most kell, hogy hozzon létre egy hurkot a csúcsok minden vertex meghatároz egy oldalt, amelyben benne van. Ha ez a sor is szerepel, és a csúcs, amelyhez a számítás, a normál az arc hozzáadjuk n. Így megkapjuk a szokásos összeg. Már csak azt, hogy normalizálják a n.

Attól függően, hogy a bemenő paraméter in_smooth simítást hajt végre, vagy sem. Itt Remélem minden világos.

Egy kicsit több - Van tárgyak állhat több részből áll. Ez biztosítja, és amikor a normalizáció kell biztosítani - úgy néz ki, mint az egész funkció normalizálódása az osztályban.

Most talán, mindent. Példa ugyanaz marad, és tettem egy képernyőképet másik.

Kiszámítása a felületre merőleges, Direct3D, cikkek, programozás - programozás C,