Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
VladR
Založen: 30. 07. 2007 Příspěvky: 1322 Bydliště: Greater New York City Area
|
Zaslal: 23. říjen 2012, 00:30:55 Předmět: |
|
|
Sorry za odmlku, bol som dlhsie offline.
Zhuleny napsal: |
Mozes mi teoreticky vysvetlit ako mesh v ktorom je iny pocet uv koordinatov ako vertexov renderovat cez drawindexedprimitive? nenasiel som na internete doposial ziadne vysvetlenie ak oto urobit. |
To je samozrejme. Ber, ze jeden fyzicky vertex moze byt sucastou aj 10 trianglov a vsade moze mat inu UV suradnicu, kedze to moze byt vertex na hrane 5 materialov (napr. nohavice/opasok/kosela/zbran/sveter/...)
Zhuleny napsal: |
Teraz som pokusne nacital vertexy a texture coords, a potom som vytvoril nove pole do ktoreho som ulozil udaje z indexu vo f riadkoch. vysledok o5 nic moc :/ |
Doporucil by som stravit pol dna debugovanim vseobecnej metody, ktora ti spravi Indexed List z Non-Indexed (takze to bude vseobecna metoda, nezavisla na OBJ formate), kedze NonIndexed ti uz funguje. Vysledok si neskor ulozis do svojho binarneho formatu, takze nebudes musiet zakazdym podstupovat import do NonIndexed a neskor konverziu do Indexed.
Ako primarne kriterium by som zvolil unikatne UV (prirodzene, s nejakou deltou) a dovtedy decimoval list unikatnych UV, kym by nebol prazdny.
Ci uz to spravis tak, ze si najprv spravis pole, kde ku kazdemu unikatnemu UV priradis Triangle Index a Normalu, resp. budes zakazdym prechadzat cele pole je viacmenej fuk (zvol to, do coho sa ti viac bude chciet ist), ale mne pride najjednoduchsie (kvoli debugovaniu) mat najprv to pole unikatnych UV koordinatov a z neho to vymazavat popri vytvarani Indexed Listu.
Jo, a bez STL v tomto ani ranu
BTW, mozes objasnit preco sa pokusas pisat low-level renderer ? Ja to samozrejme schvalujem, a som rad ze sa aj v dnesnej dobe najde niekto, kto nechce byt len skripterom, ale chce rozumiet, co sa deje, ked napises HeroMesh->Render (dx).
Som len zvedavy  |
|
Návrat nahoru |
|
 |
Zhuleny
Založen: 31. 01. 2012 Příspěvky: 28
|
Zaslal: 23. říjen 2012, 20:53:56 Předmět: |
|
|
citace: |
BTW, mozes objasnit preco sa pokusas pisat low-level renderer ? Ja to samozrejme schvalujem, a som rad ze sa aj v dnesnej dobe najde niekto, kto nechce byt len skripterom, ale chce rozumiet, co sa deje, ked napises HeroMesh->Render (dx).
Som len zvedavy |
Chcem urobit mesh ktory by sa ku kostre nespraval podla naprogramovanych dat, ale ich pocital priamo za behu programu, a v pripade narazu do prekazky by sa nezasekla animacia a bleskovo nepresla na animaciu narazu do prekazky, ale model by si len jednoducho nabil hubu o stenu napriklad verim ze to do toho stadia dotiahnem.
citace: |
Pěkné, gratuluji Jestli to chceš optimalizovat, chtělo by to fps counter (nebo aspoň vykreslovat frame time v něčem rozumném - ms?)
A můžes zkusit i mipmapping, aspoň směrové světlo (vypadá to unlit - pletu se?). |
Svetla su zatial vypnute, teraz som sa sustredil na nacitanie a spracovanie mtl suborov. A tu som zvlastne narazil. Robim si SKYBOX(ak sa nepletiem) za prve pouziva 6 textur/materialov, a za druhe budem ho asi neskor tak ci onak potrebovat. tu mam obj:# Generated By Simlab Soft 'www.simlab-soft.com'
mtllib farmpeeps_forest_medow_skybox.mtl
g 3DGeom~1
usemtl skybox_foresthills_back
v -20 0 20
v -20 40 20
v 20 0 20
v 20 40 20
vn -1 0 0
vn -1 0 0
vn -1 0 0
vn -1 0 0
vt 1 0
vt 1 1
vt 0 0
vt 0 1
f 1/1/1 2/2/2 3/3/3
f 2/2/2 4/4/4 3/3/3
g 3DGeom~2
usemtl skybox_foresthills_bottom
v 20 0 20
v 20 0 -20
v -20 0 20
v -20 0 -20
vn 6.12323e-17 1.11022e-16 -1
vn 6.12323e-17 1.11022e-16 -1
vn 6.12323e-17 1.11022e-16 -1
vn 6.12323e-17 1.11022e-16 -1
vt 0 0
vt 1 0
vt 0 1
vt 1 1
f 5/5/5 6/6/6 7/7/7
f 6/6/6 8/8/8 7/7/7
povodny bol maly len 1,5f velky tak ho upravujem.No a takto sa to pokusam renderovat
kód: |
if(!SHUTDOWN)hr = videoMan->vs->d3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST,0,2);
if(!SHUTDOWN)hr = videoMan->vs->d3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST,2,2);
|
Ale zobrazi sa mi iba prvy stvorec(stena v predu), druhy(zem) sa nezobrazy vobec.
ak je vsak if(!SHUTDOWN)hr = videoMan->vs->d3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST,0,4); vyrenderuje sa v poriadku. Vertex buffer je nacitany predpokladam korektne lebo ten guard sa renderuje v poriadku.
Je mozne ze som zle pochopil DrawPrimitive funkciu alebo mam zle obj data kedze ich pisem rucne. Ak to ced DrawPrimitive nejde renderovat tymto sposobom, tak asi budem musiet naprogramovat indexovanie, hruby postup uz mam v hlave aj premysleny.
Edit
VladR mozem sa pri obj spolahnut ze Normaly budu vzdy najpocetnesie "koordinaty"? |
|
Návrat nahoru |
|
 |
smisek
Založen: 11. 11. 2011 Příspěvky: 2
|
Zaslal: 24. říjen 2012, 08:16:53 Předmět: |
|
|
podle [url=http://msdn.microsoft.com/en-us/library/windows/desktop/bb174371(v=vs.85).aspx]MSDN[/url] je druhým argumentem offset ve vertex bufferu, takže bys neměl použít 2, ale 4 (jak to máš teď, tak by to ale asi mělo kreslit jeden trojúhelník vpravo):
kód: |
¨ if (!SHUTDOWN) hr = videoMan->vs->d3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 2);
¨ if (!SHUTDOWN) hr = videoMan->vs->d3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 4, 2);
|
|
|
Návrat nahoru |
|
 |
Zhuleny
Založen: 31. 01. 2012 Příspěvky: 28
|
Zaslal: 24. říjen 2012, 11:35:36 Předmět: |
|
|
Smisek, tam som pozeral a studoval to, aj ked sa mylis, doviedol si ma na spravnu stopu.
kód: |
if(!SHUTDOWN)hr = videoMan->vs->d3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST,0,2);
if(!SHUTDOWN)hr = videoMan->vs->d3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST,6,2); |
Teraz to uz renderuje jedna radost takze funkcia DrawPrimitive je DrawPrimitive(primitive type, cislo vrcholu od ktoreho zacat, pocet primitive type). Ja som chybne predpokladal ze to bude pocet trojuholnikov a nie pocet vrcholov(2 trojuholniky = 6 vrcholov pri TRIANGLELIST)
Mar ma pravdu strasne sa mi pletu pojmy :\ |
|
Návrat nahoru |
|
 |
smisek
Založen: 11. 11. 2011 Příspěvky: 2
|
Zaslal: 24. říjen 2012, 11:43:22 Předmět: |
|
|
njn už jsem zblblej, že quad se kreslí stripem na 4 vrcholy, list má samozřejmě 6  |
|
Návrat nahoru |
|
 |
|