Am invatat sa fac render to texture. E mai usor decat credeam. Pacat ca nu prea am ce sa fac cu asta in momentul asta in engine.
Am facut billboarding la particle engine ( poza e tot timpul indreptata inspre camera, adica e paralela cu near clip plane din view frustrum mai exact ).
Din pacate am facut asta in CPU si a dat o lovitura serioasa FPS-ului. Am citit pe net si am aflat ca se face in shader billboarding-ul.
Aici apare o problema. Eu calculez o matrice de Billboard(obtinuta din matricea View ) si fac pt fiecare particula scalare si translatie. Si rezultatul e ceva de genul scalare*matBill*translatie.
Ma gandesc sa obtin cumva colturile unui quad de la -1,-1 la 1,1 din coordonatele de textura, sa le inmultesc cu factorul de scalare, sa le inmultesc cu matricea de Billboarding si sa translatez. Problema e ca nu stiu cm sa transmit scalarea pentru toate particulele, pentru ca fac instancing si nu pot sa setez constanta pentru fiecare in parte.
Daca folosesc in structura de input pentru vertex shader TEXCOORD1 pe post de size, are ceva ? Sau size-ul de la pointsprites. Face directx ceva automat cu astea ?
O alta problema e ca acum particulele fac ceva ce semana cu Z-Fighting. Adica apare una in fata, frame-ul urmator cealalta si tot asa . Sincer sa fiu, nu inteleg de ce nu se intampla asta si inainte, ca aveam setat acelasi Z pentru toate particulele la o instanta de ParticleSystem (intre timp am modificat sa nu am acelasi Z la particule). Am schimbat de la
d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
la
d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8;
si s-a mai rezolvat problema. Totusi mi se pare ca precizia e mult prea mica si cu 24 de biti la depth buffer. Adica nu cred ca asa e normal sa se intample.
ToDo:
Reorganizare masiva ca deja am cam 900 de linii in main.cpp

. Am gasit si un model mai modular dupa care sa imi construiesc aplicatia.
Incerc de cateva zile sa inteleg cum merge treaba cu Skinned Meshes si cu animatia lor. Cred ca am inteles in mare, dar sa vedem cand incerc sa implementez si in engine-ul meu.