Ես փորձում եմ պարզել, թե ինչպես կարելի է արտապատկերել 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);