AMcoder - javascript, python, java, html, php, sql

OpenGL-ն իրականացնում է skybox-ը հետաձգված մատուցման մեջ

Ես փորձում եմ պարզել, թե ինչպես կարելի է արտապատկերել skybox-ը հետաձգված մատուցման մեջ, որպեսզի այն ներառվի հետմշակման էֆեկտներում, սակայն իմ Geometry փուլը տեսադաշտում է, և, ցավոք, այս փուլում երկնքի տուփը կազդի իր դիրքի վրա՝ համեմատած թեթև, ինչպես ցանկացած առարկա (այն իրեն պահում է ինչպես մեծ տուփ, որը գտնվում է լույսի աղբյուրից շատ հեռու և շատ մութ է): իմ կարգավորումը, առանց skybox-ը հետմշակման մեջ ներառելու փորձի, հետևյալն է.

1:(կապել FBO) Երկրաչափությունը վերափոխել գույնի, նորմալ, դիրքավորել FBO հյուսվածքային հավելվածները (անջատել FBO-ն):

2: (կապել FBO) Պատկերացրեք տեսարանը և հաշվարկեք լուսավորությունը էկրանի տարածքում: (անջատեք FBO-ն)

3: (կապել FBO) կիրառել հետմշակման էֆեկտներ (անջատել FBO-ն)

4. «Geometry FBO»-ի խորության բուֆերը լռեցնել նախնական շրջանակի բուֆերին

5. ցուցադրել skybox:

Ես փորձել եմ 5-րդ քայլը փոխել 3-ով այսպես.

2: (կապել FBO) Պատկերացրեք տեսարանը և հաշվարկեք լուսավորությունը էկրանի տարածքում:

5. ցուցադրել skybox

(անջատել FBO-ն)

3: (կապել FBO) կիրառել հետմշակման էֆեկտներ (անջատել FBO-ն)

4. Երկրաչափություն FBO-ի խորության բուֆերը լռելյայն շրջանակի բուֆերին

բայց ակնհայտ է, որ skybox-ը չունի խորքային տեղեկատվություն դեպքի վայրի մասին և ցուցադրվում է լուսավորման բեմի վերևում: Եվ եթե ես փորձում եմ որևէ խորության բլթինգ անել 2-ից 5-ի միջև, կարծում եմ, որ անվավեր GL զանգեր եմ անում, քանի որ զանգելիս արդեն կապված եմ FBO-ի հետ:

 GL30.glBindFramebuffer(GL30.GL_READ_FRAMEBUFFER, DeferredFBO.fbo_handle);
 GL30.glBindFramebuffer(GL30.GL_DRAW_FRAMEBUFFER, 0); // Write to default
                                                            // framebuffer or a skybox framebuffer    


    GL30.glBlitFramebuffer(0, 0, DisplayManager.Width,
            DisplayManager.Height, 0, 0, DisplayManager.Width,
            DisplayManager.Height, GL11.GL_DEPTH_BUFFER_BIT,
            GL11.GL_NEAREST);

  • Հըմ, մոդելի դիտման տարածքը կոորդինատային տարածություն չէ: Սա մատրիցա է, որը փոխակերպվում է մոդելից դեպի (աշխարհ) դիտման տարածություն: Հետաքրքիրն այստեղ այն է, որ միջին հատվածը, որը GL-ը հակված է բաց թողնել, հարմար կոորդինատային տարածք է հետաձգված ստվերում և, հավանաբար, կօգնի ձեզ դուրս գալ: 20.12.2015
  • Ներողություն, խմբագրված: 20.12.2015

Պատասխանները:


1

Այնուհետև տվեք նրան այն խորը տեղեկատվությունը, որը նրան պակասում է:

Երբ դուք ցուցադրում էիք ձեր տեսարանը 1-ին քայլում, օգտագործեցիք խորության բուֆեր: Այսպիսով, երբ նկարում եք ձեր skybox-ը, ձեզ անհրաժեշտ է FBO, որն օգտագործում է նույն խորության բուֆերը: Բայց այս FBO-ն նաև պետք է օգտագործի գունավոր պատկերը, որը դուք ցուցադրել եք քայլ 2-ում:

Այժմ այս FBO-ն չի կարող լինել նույն FBO-ն, որը դուք օգտագործել եք 2-րդ քայլում: Ինչո՞ւ:

Քանի որ դա կլինի չսահմանված վարքագիծ: Ենթադրաբար, 2-րդ քայլը կարդում է ձեր խորքային բուֆերից՝ դիրքը վերակառուցելու համար (եթե դա այդպես չէ, ապա դուք կարող եք պարզապես կցել խորության բուֆերը FBO-ին 2-րդ քայլից: Բայց նորից, դուք նույնպես վատնում եք տոննաներ< /em> կատարման): Բայց այդ խորության բուֆերը նույնպես կցված է FBO-ին: Եվ դա դարձնում է անորոշ վարքագիծ: Նույնիսկ եթե դուք չեք գրում մինչև խորը, OpenGL-ում այն ​​դեռ որոշված ​​չէ:

Այսպիսով, ձեզ անհրաժեշտ կլինի ևս մեկ FBO, որն ունի 1-ին քայլի խորության բուֆերը 2-րդ քայլի գունային բուֆերի հետ:

Եթե ​​դուք մուտք չունեք OpenGL 4.5/ARB_texture_barrier/NV_texture_barrier: Այդ հատկանիշով այն դառնում է սահմանված վարքագիծ, եթե դուք օգտագործում եք գրելու դիմակներ՝ անջատելու խորքային բուֆերային գրությունները: . Այն ամենը, ինչ դուք պետք է անեք, թողեք glTextureBarrier նախքան 2-րդ քայլը կատարելը: Այսպիսով, դուք այլ FBO-ի կարիք չունեք, եթե ունեք դա:

Երկու դեպքում էլ միացված պահեք ձեր skybox-ը նկարելիս խորության թեստը, բայց անջատեք խորության գրումը: Սա թույլ կտա ոչնչացնել ձեր իրական աշխարհի հետևում գտնվող բեկորները, բայց երկնքի տուփի բեկորների խորությունը կլինի անսահման հեռու:

19.12.2015
  • Շատ շնորհակալ եմ Նիկոլ։ 20.12.2015

  • 2

    Այսպիսով, ես գտա այս խնդրի իրոք հեշտ հակային լուծումը, առանց որևէ հյուսվածքային խոչընդոտներ ներառելու կամ խորության կամ գունային բուֆերների հետ խառնվելու:

    Ես իրականում արտապատկերում եմ Skybox Geometry-ը Deferred Rendering գործընթացի Geometry pass-ում, ես արտապատկերում եմ skybox-ը և դրոշակ եմ դնում հատվածի ստվերում, որպեսզի գունավորեմ իմ skybox-ը, հիշելով փոփոխել դիտման մատրիցը՝ թարգմանությունը հեռացնելու մեկ այլ միասնական դրոշակով գագաթում: Շեյդեր. Fragment shader-ում ես սահմանել եմ skybox գույնը որպես այդպիսին: Ահա հիմնական ամփոփումը՝ առանց ամբողջ ծածկագիրը տեղադրելու:

    layout (binding = 4) uniform samplerCube cubeMap;
    uniform float SkyRender;
    void main(){
    if(SkyRender){
    vec4 SkyColor = texture(cubeMap, skyTexCoords);
    gAlbedoSpec.rgb = SkyColor.rgb;
    gAlbedoSpec.a = -1;
    }else{
    gAlbedoSpec.rgb = texture(DiffuseTexture, TexCoords);
    gAlbedoSpec.a =   texture(SpecularTexture, TexCoords).r;
    }
    

    Ես դրեցի իմ skybox-ի ալֆա բաղադրիչը Color buffer-ում որպես դրոշակ իմ Lighting pass-ի համար: Այստեղ ես դրեցի այն -1:

    Իմ լուսային անցագրում ես պարզապես ընտրում եմ իմ տուփը գունավորել Diffuse Only-ով` լուսավորության հաշվարկներ ավելացնելու փոխարեն, եթե իմ gAlbedoSpec ալֆա արժեքը -1 է:

    if(Diffuse.a > -1){
    FragColor = SphereNormal * vec4(Dlighting, 1.0)+vec4(Slighting, 1.0);
    }else{
    FragColor = Diffuse ;
    }
    

    Այն բավականին պարզ է և շատ կոդ չի պահանջում և կատարում է աշխատանքը:

    04.01.2016
  • Համոզվեք, որ այս -1 դրոշը գնահատելիս դուք դա անում եք միայն մեկ, օրինակ. միայն l-անցում` ուղղորդված լույսի համար, և ոչ թե յուրաքանչյուր կետի/կետի/... լույսի համար, քանի որ դուք հավանաբար ունեք «հավելումային» խառնուրդի ռեժիմ, այնպես որ ձեր երկնքի տուփը չափազանց պայծառ կլինի բազմաթիվ լույսի աղբյուրների պատճառով, որոնք ավելացնում են լույսը: վերջնական արդյունքը։ 04.07.2016
  • Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..


    © 2024 amcode.ru, AMcoder - javascript, python, java, html, php, sql