Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
perry

Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 4. říjen 2013, 17:12:06 Předmět: OpenGL - blending - jak to vlastně funguje :) |
|
|
Dělám něco s blendingem a nemůžu nikde najít, jak vlastně funguje. Jasně, chápu jak funguje kombinování barev.
Modelová situace. Prázdná scéna. Mám model v modelu a kreslím ho na jeden draw-call. Chci vnější objekt průhledný abych viděl to uvnitř.
Jakým způsobem se potom rozhoduje, co je "venku" a "vevnitř" ? A co se má zakrýt čím. Bere to podle pořadí vrcholů směrem k pozorovateli ?
Průhlednosti na objektech řídím tím, že kazdý má jinou texturu. Vnejší má alpha kanál na 0.5 a vnitřní má např. 0.7. Tím pádem by mělo být při pohledu "zvenku" vidět obal, pak to vevnitř, ale zároveň i to "vzadu" (pokud je jasný, jak to myslím ) _________________ Perry.cz |
|
Návrat nahoru |
|
 |
mar
Založen: 16. 06. 2012 Příspěvky: 610
|
Zaslal: 4. říjen 2013, 17:56:30 Předmět: Re: OpenGL - blending - jak to vlastně funguje :) |
|
|
perry napsal: |
Jakým způsobem se potom rozhoduje, co je "venku" a "vevnitř" ? A co se má zakrýt čím. |
No rozhoduje, jestli máš zapnutý z-buffer test. Pokud ne, pak by se to mělo prostě vykreslit v pořadí, v jakém to pošleš.
EDIT: asi bych to vyřešil tak, že bych vypnul z-write.
nejdřív bych vykreslil vnější model s obráceným cullingem, pak vnitřní s obráceným a pak s normálním a přes to vnější s normálním (doufám, že to dává smysl  |
|
Návrat nahoru |
|
 |
perry

Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 4. říjen 2013, 18:15:32 Předmět: |
|
|
No, jasně.. pokud mám z-buffer a z-test tak je to jasné. Jenomže když kreslím na jeden zátah něco v něčem, tak nemám žádné info o hloubce a z-buffer je prázdný. Můžu to kreslit rozdělené, to jo... ale zajímalo mě, jak se to chová právě když to kreslím najednou. Protože co jsem zkoušel, tak mi ten výsledek přišel relativně OK... ale nevím proč a jak to v tomhle případě funguje. _________________ Perry.cz |
|
Návrat nahoru |
|
 |
mar
Založen: 16. 06. 2012 Příspěvky: 610
|
Zaslal: 4. říjen 2013, 18:30:40 Předmět: |
|
|
Aha myslel jsem, že to kreslíš ve dvou, tak to se omlouvám. No pokud ti to přijde ok, tak bych to asi neřešil. Určitě bych neřekl, že ti to driver a/nebo GPU bude sortovat Prostě to tam nahrne jak to je a hotovo. |
|
Návrat nahoru |
|
 |
frca

Založen: 28. 07. 2007 Příspěvky: 1561
|
|
Návrat nahoru |
|
 |
nou

Založen: 28. 07. 2007 Příspěvky: 1050
|
Zaslal: 4. říjen 2013, 19:41:52 Předmět: |
|
|
poradie vykreslenia jednotlivych je myslim ze zachovane. teda ak kreslis jednotlive trojuholniky spravne zoradene tak by si mal dostat korektne vysledky. _________________ Najjednoduchšie chyby sa najtažšie hľadajú. |
|
Návrat nahoru |
|
 |
frca

Založen: 28. 07. 2007 Příspěvky: 1561
|
Zaslal: 4. říjen 2013, 21:19:25 Předmět: |
|
|
Pro řazení bude nutné duplikovat funkcionalitu vertex shaderu pro CPU (ztransformovat vertexy před řazením). Spíš než kreslit po trojúhelníku raději setřídit indexy primitiv. Ale i tak to CPU část a opakovaný upload indexů v každém framu zpomalí. Navíc to ani nebude 100% spolehlivé (např. při prolínání trojúhelníků).
Stojí to za to? _________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
 |
perry

Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 4. říjen 2013, 21:21:34 Předmět: |
|
|
Prolínání tam není.. je to čistě objekt v objektu. S protínáním by to samozřejmě bylo pak horší. _________________ Perry.cz |
|
Návrat nahoru |
|
 |
]semo[

Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 7. říjen 2013, 11:02:45 Předmět: |
|
|
Můžeš to vykreslit jako jeden objekt, ale musíš zajistit, aby ty vnitřní trojúhleníky byly na začátku index bufferu. Můžeš ten objekt mít jako dva objekty, ale po načtení z nich udělat jeden (tak, aby trojúhleníky z vnitřího objektu byly na začátku).
A dost dobrá věc na kreslení blendovaných objektů je kreslit ve dvou průchodech; první s front-face cullingem, druhý s back-bace cullingem. _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
 |
]semo[

Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 7. říjen 2013, 11:05:38 Předmět: |
|
|
frca napsal: |
Pro řazení bude nutné duplikovat funkcionalitu vertex shaderu pro CPU (ztransformovat vertexy před řazením). |
Jen poznámka: neni nutný transformovat vertexy. Vhodnější je naopak transformovat pozici pozorovatele inverzní maticí modelu. _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
 |
frca

Založen: 28. 07. 2007 Příspěvky: 1561
|
Zaslal: 7. říjen 2013, 11:27:49 Předmět: |
|
|
Možná jsem detailista, ale není pro řazení rozhodující vzdálenost od roviny pozorovatele (resp. near plane), a ne od pozice pozorovatele? _________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
 |
]semo[

Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 7. říjen 2013, 12:54:17 Předmět: |
|
|
Jo, to je pravda. No ale i tak lze transformovat rovinu (pozice, normála). Ale možná to pak vyjde skoro nastejno :-) _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
 |
perry

Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 7. říjen 2013, 19:14:04 Předmět: |
|
|
No nakonec jsem to trochu poupravil a místo modelu v modelu budu kreslit jenom roviny.. jedna za druhou. Tím odpadne problém s back-face cullingem a i sort bude k dispozici.
(Možná někoho napadlo... je to určené na volume rendering, kde se sice používá běžně raycast, ale jeho výkon na mobilním zařízení je dost žalostný, takže chci zkusit něco jiného) _________________ Perry.cz |
|
Návrat nahoru |
|
 |
|