Permalänk

[C++ DX8] Texturer

Håller på och försöker rendera lite texturer i min 3D motor och skulle vilja veta hur jag gör det på bästa sätt. Motorn är ganska simpel och renderar i "block" ungefär som GTA och GTA2. Alltså att man har golvplan och väggar som är kvadratiska ytor bestående av 2 trianglar var. Inget problem att rendera vertiserna, kan också rendera en textur i taget. Men hur ska jag bära mig åt för att rendera fler texturer i samma scen? Man använder ju en textur med:

m_pD3DDevice->SetTexture()

och ritar sedan upp en mängd verticer med:

m_pD3DDevice->DrawPrimitive()

min första idé var att jag skulle köra en loop som loopar igenom alla "väggar" och "golv", byter textur, ritar 2 tringlar och sedan kör om tills alla väggar och golv är renderade, men det verkar inte fungera. Några bättre förslag?

Visa signatur

And on the seventh day, god stepped back and said: "There is my creation, perfect in every way... oh, dammit I left pot all over the place. Now they'll think I want them to smoke it... Now I have to create republicans." - Bill Hicks

Permalänk
Medlem

jag tar för givet att du vet du drawprimitive fungerar..

DrawPrimitive(D3DPT_TRIANGLELIST, A, B)

där A är din _startvertex_ och b är antalet primitivet (i detta fal polygoner)
så kan du

// rita tak
SetTexture(0, my_ceiling);
DrawPrimitive(D3DPT_TRIANGLELIST, 0, 2)

// rota golv
SetTexture(0, my_floor)
DrawPrimitive(D3DPT_TRIANGLELIST, 6, 2) // eftersom att de 2 tidigare polygonerna består av 6 vertices (0 - 5) så startar detta offset på 6

edit:
aa.. sorry.. såg nu...
njae.. det är väl vertexbuffer och indexbuffer som gäller.. men att byta state (renderstate, texturestate) är dyrt i d3d så det gäller att rendera alla texturer som ser likadana ut och har likadana egenskaper för sig..

typ:
SetRenderstate(D3DRS_ALPHABLENDENABLE)
..rendera alla texturer som är alphablendade

SetRenderstate(D3DTS_ZBUFFERDISABLE)
..rendera alla texturer som inte berörs av zbuffern

Visa signatur

{|XSX|PS3|PS4|}

Permalänk
Medlem

Du ska sortera alla polygoner efter material, för att byta textur kostar endel. Sen renderar du en del i taget och byter till det material dom ska ha.

Visa signatur

Perl - Made by Idiots, Java - Made for Idiots, C++ - Envied by Idiots