Terve kaikki,
Olen tässä väsäämässä pientä 3D moottoria ja tähän saakka moottori on edennyt kohtuu luontevasti.
Nyt kuitenkin haluaisin moottoriini FrameBufferi tuen. Eli aikaisemmin olen piirtänyt skene olioon määritetyt objektit suoraan ruudulle.
Eli olen mielessäni koittanut pyöritellä miten tuo tulisi tuohon toteuttaa.
Nykyinen toteutus malli on kohtuu simppeli:
Scene -> SceneManager -> Renderer
FrameBufferin lisäämiseen ajattelin käyttää seuraavia olioita:
Pass(Scene, Camera) -> Effect
Eli Pass olisi yhden "Stepin" kohta, jossa piirretään määritetty skene tekstuuriin.
Effect olio on se, joka sitoo useammaan Pass olion itseensä Effect -> addPass.
Ongelmaksi kuitenkin syntyy tuo minun moottorin rakenne. Effect on pakko lisätä Skenen sisälle jos mielii päästä renderiin käsiksi. Jotenkin kuitenkin tuntuu tyhmälle että Passiin voi määritellä piirrettävän skenen joka sitten laitetaan Effectiin ja siitä sitten esim. samaan skeneen jota yksi Pass on määritetty piirtämään?
Muutenkin pitäisi olla sellainen mahdollisuus, että voin käyttää FrameBufferia piirtämään esim. kerran kuvan tekstuuriin. Tai sitten reali ajassa joka "frame kierros".
...oman mielen abstraktiota tuohonhan tuli oksennettua, mutta tarkennetaan kyssäreitten mukaan.
Terve kaikille,
Olen kirjoittamassa framebuffer tukea omaan 3D pelimoottorille.
FrameBuffer kuitenkin toimii jokseenkin oudosti, vaikka mielestäni kaikki pitäisi olla oikein...
/* Tässä osa testi koodistani. Koodin ideana, on se että minulla on määritettynä 2 eri tyyppistä Pass:iä. ShaderPass ja ScenePass. ScenePass olen määrittänyt testinä piirtämään suoraan rutuun. ShaderPass olisi taas tarkoitus piirtää framebufferiin. Testissä on olennaista myös se, että ScenePass piirretään ensin ruutuun ilman framebufferia ja ShaderPass taas tämän jälkeen FrameBufferiin. Kuitenkin myös ShaderPass glClearColor( 1.0f, 0.0f, 0.0f, 1.0f ) punainen clear väri piirtyy ruutuun vaikka framebuffer on bindattu rednerToTexture -metodin sisällä. */
Moderaattori yhdisti aiheet.
if( _spScenePass != NULL ) { glClearColor( 0.0f, 0.0f, 1.0f, 1.0f ); }else{ glClearColor( 1.0f, 0.0f, 0.0f, 1.0f ); }
Eikös tämän pitäisi olla toisinpäin?
Ei? Siis testin ideana oli vain saada testattua meneekö glClearColor tosiaan ShaderPass:in kohdalla FrameBufferiin ( jolloin punainen väri ei pitäisi tulla ruutuun ).
Tietenkin voi opetella lukemaan koodia + koodin kommentit ennen kun täyttää viestiketjua. :)
Kiitos kuitenkin vastauksesta. :)
EDIT: Taisinkin löytää ratkaisun. :)
kayttaja-3842 kirjoitti:
Taisinkin löytää ratkaisun. :)
No kertoisitko vielä sen?
Ongelma oli oikeastaan minun moottorissani. Shaderiä kutsuttiin vasta uniformien asetuksen jälkeen. Lisäksi huomasin, että glClearColor värjää aina screenin oli framebufferi bindattuna tai ei.
Tämä vissiin ihan oikea "ominaisuus".
Aihe on jo aika vanha, joten et voi enää vastata siihen.