рдУрдкрди рдореЗрдВ WBOIT: рдЫрдБрдЯрд╛рдИ рдХреЗ рдмрд┐рдирд╛ рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛

рд╣рдо "рднрд╛рд░рд┐рдд рдорд┐рд╢реНрд░рд┐рдд рдЖрджреЗрд╢-рд╕реНрд╡рддрдВрддреНрд░ рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛" (рдЗрд╕рдХреЗ рдмрд╛рдж WBOIT) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ - 2013 рдореЗрдВ JCGT рдореЗрдВ рд╡рд░реНрдгрд┐рдд рддрдХрдиреАрдХ ( рд▓рд┐рдВрдХ )ред

рдЬрдм рд╕реНрдХреНрд░реАрди рдкрд░ рдХрдИ рдкрд╛рд░рджрд░реНрд╢реА рд╡рд╕реНрддреБрдПрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВ, рддреЛ рдкрд┐рдХреНрд╕реЗрд▓ рдХрд╛ рд░рдВрдЧ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЗ рдХрд░реАрдм рд╣реИред рдпрд╣рд╛рдБ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз рд░рдВрдЧ рдорд┐рд╢реНрд░рдг рд╕реВрддреНрд░ рд╣реИ:

\ start {рдореИрдЯреНрд░рд┐рдХреНрд╕} C = C_ {рдкрд╛рд╕} \ рдЕрд▓реНрдлрд╛ + C_ {рджреВрд░} (1- \ рдЕрд▓реНрдлрд╛) рдФрд░& (1) \ рдЕрдВрдд {рдореИрдЯреНрд░рд┐рдХреНрд╕}


рдЯреБрдХрдбрд╝реЗ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд╛ рдХреНрд░рдо рдЗрд╕рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ: рдкрд╛рд╕ рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рд░рдВрдЧ рдФрд░ рдЗрд╕рдХреА рдЕрдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдХреЛ C рдХреЗ рдкрд╛рд╕ рдФрд░ ╬▒ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдкреАрдЫреЗ рд╕реНрдерд┐рдд рд╕рднреА рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд░рдВрдЧ рдХреЛ C рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реВрдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдЕрдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╣реИ рдЬреЛ 0 рд╕реЗ 1 рддрдХ рдорд╛рди рд▓реЗрддреА рд╣реИ, рдЬрд╣рд╛рдВ 0 рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡рд╕реНрддреБ рдЗрддрдиреА рдкрд╛рд░рджрд░реНрд╢реА рд╣реИ рдХрд┐ рдпрд╣ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣реА рд╣реИ, рдФрд░ 1 - рдпрд╣ рдЗрддрдирд╛ рдЕрдкрд╛рд░рджрд░реНрд╢реА рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдкреАрдЫреЗ рдХреБрдЫ рднреА рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ ред

рдЗрд╕ рд╕реВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдХреНрд░рдордмрджреНрдз рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рдЗрд╕рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рд┐рд░рджрд░реНрдж рд╢рд╛рдорд┐рд▓ рд╣реИ! рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдкреНрд░рддреНрдпреЗрдХ рдлреНрд░реЗрдо рдореЗрдВ рдЫрдВрдЯрд╛рдИ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдк рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЫрд╛рдВрдЯ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЬрдЯрд┐рд▓ рдЖрдХрд╛рд░ рдХреА рдХреБрдЫ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рдХрд╛рдЯрдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдХрдЯреЗ рд╣реБрдП рд╣рд┐рд╕реНрд╕реЛрдВ рдХреА рдЧрд╣рд░рд╛рдИ рд╕реЗ рд╣рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╕рддрд╣реЛрдВ рдХреЛ рдХрд╛рдЯрдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА)ред рдпрджрд┐ рдЖрдк рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╢реЗрдбрд┐рдВрдЧ рдореЗрдВ рдЫрдВрдЯрд╛рдИ рд╣реЛрдЧреАред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ "рдСрд░реНрдбрд░-рдЗрдВрдбрд┐рдкреЗрдВрдбреЗрдВрдЯ рдЯреНрд░рд╛рдВрд╕рдкреЗрд░реЗрдВрд╕реА" (OIT) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рдХреА рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдПрдХ рд▓рд┐рдВрдХреНрдб рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЗрд╕ рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдХрд┐рддрдиреА рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреА рд╣реЛрдЧреА, рд▓рдЧрднрдЧ рдЕрд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реИред рдФрд░ рдЕрдЧрд░ рдкрд░реНрдпрд╛рдкреНрдд рдореЗрдореЛрд░реА рдирд╣реАрдВ рд╣реИ, рддреЛ рдХрд▓рд╛рдХреГрддрд┐рдпрд╛рдВ рд╕реНрдХреНрд░реАрди рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреАред

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рдЬреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рддрдиреЗ рдкрд╛рд░рднрд╛рд╕реА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдордВрдЪ рдкрд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЬрд╣рд╛рдВ рд╡реЗ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рд╕реАрдПрдбреА рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдИ рдкрд╛рд░рджрд░реНрд╢реА рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрдВрдЧреЗ, рдФрд░ рд╡реЗ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рд╕реНрдерд┐рдд рд╣реЛрдВрдЧреЗред

рдЕрдм рдЖрдк рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреА рдЬрд╝рд┐рдВрджрдЧреА рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдХреЛ рд╕рдордЭрддреЗ рд╣реИрдВ рдФрд░ рд░рдВрдЧреЛрдВ рдХреЛ рдорд┐рд▓рд╛рдиреЗ рдХрд╛ рдПрдХ рдРрд╕рд╛ рдлрд╛рд░реНрдореВрд▓рд╛ рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЫрдВрдЯрд╛рдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреАред рдРрд╕рд╛ рд╕реВрддреНрд░ рд▓реЗрдЦ рдореЗрдВ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдерд╛ред рд╡рд╣рд╛рдБ рднреА рдХрдИ рд╕реВрддреНрд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд▓реЗрдЦрдХреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдПрдХ (рдФрд░ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рднреА) рдпрд╣ рдПрдХ рд╣реИ:

\ start {рдореИрдЯреНрд░рд┐рдХреНрд╕} C = {{sum_ {i = 1} ^ {n} C_i \ alpha_i} \ over {\ sum_ {i = 1} ^ {n} \ Alpha_i}} (1- \ prod_ i) = 1} ^ {n} (1- \ рдЕрд▓реНрдлрд╛_рдЖрдИ)) + C_0 \ prod_ {i = 1} ^ {n} (1- \ рдЕрд▓реНрдлрд╛_рдЖрдИ) рдФрд░& (2) \ рдЕрдВрдд {рдореИрдЯреНрд░рд┐рдХреНрд╕}




рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ рдкрд╛рд░рднрд╛рд╕реА рддреНрд░рд┐рдХреЛрдгреЛрдВ рдХреЗ рд╕рдореВрд╣ рд╣реИрдВ рдЬреЛ рдЧрд╣рд░рд╛рдИ рдореЗрдВ рдЪрд╛рд░ рдкрд░рддреЛрдВ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВред рдмрд╛рдИрдВ рдУрд░, рдЙрдиреНрд╣реЗрдВ WBOIT рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рджрд╛рдИрдВ рдУрд░ рдлрд╝рд╛рд░реНрдореБрд▓реЛрдВ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЗ рдХреНрд░рдо рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдлреЙрд░реНрдореВрд▓рд╛ (1), рд░рдВрдЧреЛрдВ рдХреЗ рдХреНрд▓рд╛рд╕рд┐рдХ рд╕рдореНрдорд┐рд╢реНрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЧрдИ рддрд╕реНрд╡реАрд░ рд╣реИред рдЖрдЧреЗ рдореИрдВ рдЗрд╕реЗ CODB (рдХреНрд▓рд╛рд╕рд┐рдХ рдСрд░реНрдбрд░-рдбрд┐рдкреЗрдВрдбреЗрдВрдЯ рдмреНрд▓реЗрдВрдбрд┐рдВрдЧ) рдХрд╣реВрдВрдЧрд╛ред

рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдкрд╛рд░рджрд░реНрд╢реА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ, рд╣рдореЗрдВ рд╕рднреА рдЕрдкрд╛рд░рджрд░реНрд╢реА рд▓реЛрдЧреЛрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЙрд╕рдХреЗ рдмрд╛рдж, рдкрд╛рд░рджрд░реНрд╢реА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЧрд╣рд░рд╛рдИ рдмрдлрд░ рдХреЛ рд▓рд┐рдЦреЗ рдмрд┐рдирд╛ (рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: glEnable(GL_DEPTH_TEST); glDepthMask(GL_FALSE); )ред рдпрд╣реА рд╣реИ, рдХреБрдЫ рд╕реНрдХреНрд░реАрди рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ (x, y) рдХреЗ рд╕рд╛рде рдПрдХ рдмрд┐рдВрджреБ рдкрд░ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ: рдкрд╛рд░рджрд░реНрд╢реА рдЯреБрдХрдбрд╝реЗ рдЬреЛ рдЕрдкрд╛рд░рджрд░реНрд╢реА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд░реАрдм рд╣реЛрддреЗ рд╣реИрдВ, рдЧрд╣рд░рд╛рдИ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВ, рдЗрд╕ рдмрд╛рдд рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд┐ рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд╛рд░рджрд░реНрд╢реА рдЯреБрдХрдбрд╝реЗ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдЧрд╣рд░рд╛рдИ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВ, рдФрд░ рдкрд╛рд░рджрд░реНрд╢реА рдЯреБрдХрдбрд╝реЗ рдЖрдЧреЗ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред рдЕрдкрд╛рд░рджрд░реНрд╢реА, рдЧрд╣рд░рд╛рдИ рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░, рддрджрдиреБрд╕рд╛рд░, рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рд╕реВрддреНрд░ рдореЗрдВ рд╕реА 0 (2) рдПрдХ рдЕрдкрд╛рд░рджрд░реНрд╢реА рдЯреБрдХрдбрд╝реЗ рдХрд╛ рд░рдВрдЧ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдкрд╛рд░рджрд░реНрд╢реА рдЯреБрдХрдбрд╝реЗ рдЦреАрдВрдЪреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ n рдЯреБрдХрдбрд╝реЗ рд╣реИрдВ, рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ n рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ 1 рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред C i , i-th рдкрд╛рд░рджрд░реНрд╢реА рдЯреБрдХрдбрд╝реЗ рдХрд╛ рд░рдВрдЧ рд╣реИ, ╬▒ i рдЗрд╕рдХреА рдЕрдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдмрд╛рд░реАрдХреА рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╕реВрддреНрд░ (2) рдереЛрдбрд╝рд╛ рд╕рд╛ рд╕реВрддреНрд░ (1) рдЬреИрд╕рд╛ рд╣реИред рдЕрдЧрд░ рдЖрдк рдРрд╕рд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ C C рдХреЗ рдкрд╛рд╕ рд╣реИ , C 0 C рджреВрд░ рд╣реИ , рдФрд░ - рдпрд╣ ╬▒ рд╣реИ , рддреЛ рдпрд╣ 1 рд╕реВрддреНрд░ рд╣реЛрдЧрд╛, рдПрдХ рд╕реЗ рдПрдХред рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ - рдпрд╣ рдкрд╛рд░рджрд░реНрд╢реА рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рд░рдВрдЧреЛрдВ рдХрд╛ рднрд╛рд░рд┐рдд рдФрд╕рдд рд╣реИ (рджреНрд░рд╡реНрдпрдорд╛рди рдХрд╛ рдХреЗрдВрджреНрд░ рдПрдХ рд╣реА рд╕реВрддреНрд░ рджреНрд╡рд╛рд░рд╛ рдпрд╛рдВрддреНрд░рд┐рдХреА рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ), рдпрд╣ рдирд┐рдХрдЯрддрдо рдЯреБрдХрдбрд╝рд╛ C рдХрд╛ рд░рдВрдЧ рд╣реЛрдЧрд╛ред рд╕реА 0 рд╕рднреА рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рдкреАрдЫреЗ рд╕реНрдерд┐рдд рдЕрдкрд╛рд░рджрд░реНрд╢реА рдЯреБрдХрдбрд╝реЗ рдХрд╛ рд░рдВрдЧ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдордиреЗ рдЗрд╕ рднрд╛рд░рд┐рдд рдФрд╕рдд рдХреА рдЧрдгрдирд╛ рдХреА, рдФрд░ рдпрд╣ рд╕реА рджреВрд░ рддрдХ рдЬрд╛рдПрдЧрд╛ ред рдпрд╣реА рд╣реИ, рд╣рдордиреЗ рд╕рднреА рдкрд╛рд░рджрд░реНрд╢реА рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рдПрдХ "рдФрд╕рдд" рдЯреБрдХрдбрд╝реЗ рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ рдФрд░ рд░рдВрдЧреЛрдВ рдХреЗ рдорд┐рд╢реНрд░рдг рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рд╕реВрддреНрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ - рд╕реВрддреНрд░ (1)ред ╬С рдХреЗ рд▓рд┐рдП рдпрд╣ рдЪрд╛рд▓рд╛рдХ рд╕реВрддреНрд░ рдХреНрдпрд╛ рд╣реИ рдХрд┐ рдореВрд▓ рд▓реЗрдЦ рдХреЗ рд▓реЗрдЦрдХ рд╣рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ?

 Alpha=1тИТ prodni=1(1тИТ Alphai)


рдпрд╣ n-рдЖрдпрд╛рдореА рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдПрдХ рдЕрджрд┐рд╢ рдХрд╛рд░реНрдп рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрдИ рдЪрд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрдВрддрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╕рднреА ╬▒ рдореИрдВ 0 рд╕реЗ 1 рддрдХ рдХреА рд╕реАрдорд╛ рдХреЗ рд╣реИрдВ, рдХрд┐рд╕реА рднреА рдЪрд░ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЖрдВрд╢рд┐рдХ рд╡реНрдпреБрддреНрдкрдиреНрди рд╣рдореЗрд╢рд╛ рдПрдХ рдЧреИрд░-рдирдХрд╛рд░рд╛рддреНрдордХ рд╕реНрдерд┐рд░рд╛рдВрдХ рд╣реЛрдЧрд╛ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рдкрд╛рд░рджрд░реНрд╢реА рдЯреБрдХрдбрд╝реЗ рдХреА рдмрдврд╝рддреА рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд╕рд╛рде "рдФрд╕рдд" рдЯреБрдХрдбрд╝реЗ рдХреА рдЕрдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдмрдврд╝ рдЬрд╛рддреА рд╣реИ, рдФрд░ рдареАрдХ рдпрд╣реА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд░реИрдЦрд┐рдХ рд░реВрдк рд╕реЗ рдмрдврд╝рддрд╛ рд╣реИред

рдпрджрд┐ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдХреА рдЕрдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ 0 рд╣реИ, рддреЛ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдпрд╣ рдкрд░рд┐рдгрд╛рдореА рд░рдВрдЧ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдпрджрд┐ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЯреБрдХрдбрд╝реЗ рдХреА рдЕрдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ 1 рд╣реИ, рддреЛ ╬▒ 1 рд╣реИред рдЕрд░реНрдерд╛рдд, рдЕрдкрд╛рд░рджрд░реНрд╢реА рдЯреБрдХрдбрд╝рд╛ рдЕрджреГрд╢реНрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЖрдо рддреМрд░ рдкрд░ рдЕрдЪреНрдЫрд╛ рд╣реЛрддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд╕рд╛рде рдЯреБрдХрдбрд╝реЗ рдХреЗ рдкреАрдЫреЗ рд╕реНрдерд┐рдд рдкрд╛рд░рджрд░реНрд╢реА рдЯреБрдХрдбрд╝реЗ = 1 рдЕрднреА рднреА рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрдордХрддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдореА рд░рдВрдЧ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:



рдпрд╣рд╛рдБ, рдПрдХ рдирд╛рд░рдВрдЧреА рддреНрд░рд┐рднреБрдЬ рдКрдкрд░, рд╣рд░реЗ рд░рдВрдЧ рдХреЗ рдиреАрдЪреЗ, рдФрд░ рд╣рд░реЗ рд░рдВрдЧ рдХреЗ рдиреАрдЪреЗ рдЧреНрд░реЗ рдФрд░ рд╕рд┐рдпрд╛рди, рдФрд░ рдпрд╣ рд╕рдм рдПрдХ рдХрд╛рд▓реЗ рд░рдВрдЧ рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╣реИред рдиреАрд▓рд╛ рдЕрдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ = 1, рдЕрдиреНрдп рд╕рднреА - 0.5ред рджрд╛рдИрдВ рдУрд░ рдХреА рддрд╕реНрд╡реАрд░ рд╡рд╣реА рд╣реИ рдЬреЛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, WBOIT рдШреГрдгрд┐рдд рджрд┐рдЦрддрд╛ рд╣реИред рдПрдХрдорд╛рддреНрд░ рд╕реНрдерд╛рди рдЬрд╣рд╛рдВ рд╕рд╛рдорд╛рдиреНрдп рдирд╛рд░рдВрдЧреА рд░рдВрдЧ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рд╡рд╣ рд╣рд░реЗ рддреНрд░рд┐рдХреЛрдг рдХрд╛ рдХрд┐рдирд╛рд░рд╛ рд╣реИ, рдЬреЛ рдПрдХ рдЕрдкрд╛рд░рджрд░реНрд╢реА рд╕рдлреЗрдж рд░реЗрдЦрд╛ рд╕реЗ рдШрд┐рд░рд╛ рд╣реБрдЖ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЕрднреА рдХрд╣рд╛, рдпрджрд┐ рдкрд╛рд░рджрд░реНрд╢реА рдЕрдВрд╢ рдХреА рдЕрдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ 1 рд╣реИ рддреЛ рдПрдХ рдЕрдкрд╛рд░рджрд░реНрд╢реА рдЯреБрдХрдбрд╝рд╛ рдЕрджреГрд╢реНрдп рд╣реИред

рдпрд╣ рдФрд░ рднреА рдмреЗрд╣рддрд░ рд╣реИ рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ:



рдирд╛рд░рдВрдЧреА рддреНрд░рд┐рдХреЛрдг рдореЗрдВ 1 рдХреА рдЕрдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рд╣реЛрддреА рд╣реИ, рд╣рд░реЗ рд░рдВрдЧ рдХреА рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдмрдВрдж рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдмрд╕ рдЕрдкрд╛рд░рджрд░реНрд╢реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдЦреАрдВрдЪреА рдЬрд╛рддреА рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдСрд░реЗрдВрдЬ рддреНрд░рд┐рдХреЛрдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ GREEN рддреНрд░рд┐рдХреЛрдг рдЪрдордХрддрд╛ рд╣реИред

рддрд╕реНрд╡реАрд░ рдХреЛ рд╕рднреНрдп рджрд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЙрдЪреНрдЪ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рди рджреА рдЬрд╛рдПред рдореЗрд░реА рдХрд╛рд░реНрдпрд╢реАрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдореИрдВ 0.5 рд╕реЗ рдЕрдзрд┐рдХ рдХреА рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ред рдпрд╣ 3 рдбреА рд╕реАрдПрдбреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдпреЛрдЬрдирд╛рдмрджреНрдз рддрд░реАрдХреЗ рд╕реЗ рдЦреАрдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╡рд┐рд╢реЗрд╖ рдпрдерд╛рд░реНрдерд╡рд╛рдж рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рддрд┐рдмрдВрдз рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред

рдХрдо рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде, рдмрд╛рдИрдВ рдФрд░ рджрд╛рдИрдВ рдУрд░ рдХреЗ рдЪрд┐рддреНрд░ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИрдВ:



рдФрд░ рдЙрдЪреНрдЪ рдХреЗ рд╕рд╛рде рд╡реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВ:



рдпрд╣ рдПрдХ рдкрд╛рд░рджрд░реНрд╢реА рдкреЙрд▓реАрд╣реЗрдбреНрд░реЙрди рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:




рдкреЙрд▓реАрд╣реЗрдбреНрд░реЙрди рдореЗрдВ рдирд╛рд░рдВрдЧреА рдкрд╛рд░реНрд╢реНрд╡ рдФрд░ рд╣рд░реЗ рд░рдВрдЧ рдХреЗ рдХреНрд╖реИрддрд┐рдЬ рдЪреЗрд╣рд░реЗ рд╣реИрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЖрдк рдЗрд╕реЗ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдирд╣реАрдВ рд╕рдордЭ рдкрд╛рдПрдВрдЧреЗ, рдпрд╛рдиреА рдЪрд┐рддреНрд░ рдХрд╛рдпрд▓ рдирд╣реАрдВ рд╣реИред рдЬрд╣рд╛рдВ рд╕рд╛рдордиреЗ рдПрдХ рдирд╛рд░рдВрдЧреА рджреАрд╡рд╛рд░ рд╣реИ, рдЖрдкрдХреЛ рдирд╛рд░рдВрдЧреА рд╕реЗ рдЕрдзрд┐рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЬрд╣рд╛рдВ рд╣рд░реЗ рд░рдВрдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╣реИред рдПрдХ рд░рдВрдЧ рдореЗрдВ рдЪреЗрд╣рд░реЗ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛:



рдЧрд╣рд░рд╛рдИ рдЖрдзрд╛рд░рд┐рдд WBOIT


рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЫрдВрдЯрд╛рдИ рдХреА рдХрдореА рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рддрд░рд╣ рдХреНрд╖рддрд┐рдкреВрд░реНрддрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдЦ рдХреЗ рд▓реЗрдЦрдХ рд╕реВрддреНрд░ рдХреЛ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдП (2)ред рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдХрдард┐рди рдмрдирд╛ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХрдо рдЕрдиреБрдорд╛рдирд┐рдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рддреНрд░рд┐-рдЖрдпрд╛рдореА рджреГрд╢реНрдп рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ - рдореИрдВрдиреЗ рд▓реЗрдЦ рдХреЛ рдкрдврд╝рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджрд┐рдпрд╛ред

рдпрд╣ рддрд░реНрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ WBOIT рдХрднреА-рдХрднреА рдХреБрдЫ рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рд╢рд╛рд╕реНрддреНрд░реАрдп рдЫрдБрдЯрд╛рдИ рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдХреЗрд╡рд▓ рджреЛ рдХрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдгреЛрдВ рдХреА рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд░реВрдк рдореЗрдВ рдзреБрдЖрдВ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ - рдЕрдВрдзреЗрд░реЗ рдФрд░ рд╣рд▓реНрдХреЗ рдзреБрдПрдВ рдХреЗ рд╕рд╛рдеред рдЬрдм рдПрдХ рдХрдг рджреВрд╕рд░реЗ рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ, рддреЛ рдЫрдВрдЯрд╛рдИ рдХреЗ рд╕рд╛рде рд╢рд╛рд╕реНрддреНрд░реАрдп рд░рдВрдЧ рдорд┐рд╢реНрд░рдг рдПрдХ рдмрджрд╕реВрд░рдд рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ - рд╣рд▓реНрдХреЗ рд╕реЗ рдзреБрдПрдВ рдХрд╛ рд░рдВрдЧ рдЧрд╣рд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдЦ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдЧрд╣рд░рд╛рдИ-рд╕рдВрд╡реЗрджрдирд╢реАрд▓ WBOIT рдПрдХ рдЪрд┐рдХрдиреА рд╕рдВрдХреНрд░рдордг рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд▓рдЧрддрд╛ рд╣реИред рдкрддрд▓реЗ рдЯреНрдпреВрдмреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдлрд░ рдФрд░ рдмрд╛рд▓реЛрдВ рдХреЗ рдореЙрдбрд▓рд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдпрд╣реА рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдХреЛрдб


рдЕрдм OpenGL рдкрд░ рд╕реВрддреНрд░ (2) рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдЬреАрдердм ( рд▓рд┐рдВрдХ ) рдкрд░ рд╣реИ, рдФрд░ рд▓реЗрдЦ рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЪрд┐рддреНрд░ рд╡рд╣рд╛рдВ рд╕реЗ рд╣реИрдВред рдЖрдк рдореЗрд░реЗ рддреНрд░рд┐рднреБрдЬреЛрдВ рдХреЗ рд╕рд╛рде рдЗрдХрдЯреНрдард╛ рдФрд░ рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдХреНрдпреВрдЯреА рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдХреЗрд╡рд▓ рдкрд╛рд░рджрд░реНрд╢реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдореИрдВ рдЗрди рджреЛ рд▓реЗрдЦреЛрдВ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ:

тЖТ рдУрдкрдирдЬреАрдПрд▓ рдЬрд╛рдиреЗрдВред рдкрд╛рда 4.3 - рдорд┐рдХреНрд╕рд┐рдВрдЧ рдХрд▓рд░реНрд╕
тЖТ Direct3D 11 рдФрд░ OpenGL 4 рдкрд░ рд▓рд┐рдВрдХ рдХреА рдЧрдИ рд╕реВрдЪрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрджреЗрд╢-рд╕реНрд╡рддрдВрддреНрд░ рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо

рджреВрд╕рд░рд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╣рд▓рд╛ рдПрдХ рдкрдврд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕реВрддреНрд░ (2) рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ 2 рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝реНрд░реЗрдордмрдлрд╝рд░, 3 рдорд▓реНрдЯреАрд╕реНрдкреНрд▓ рдмрдирд╛рд╡рдЯ рдФрд░ рдПрдХ рд░реЗрдВрдбрд░ рдмрдлрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЧрд╣рд░рд╛рдИ рд▓рд┐рдЦреЗрдВрдЧреЗред рдкрд╣рд▓реА рдмрдирд╛рд╡рдЯ рдореЗрдВ - colorTextureNT (NT рдХрд╛ рдЕрд░реНрде рдЧреИрд░-рдкрд╛рд░рджрд░реНрд╢реА) - рд╣рдо рдЕрдкрд╛рд░рджрд░реНрд╢реА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдореЗрдВ GL_RGB10_A2 рдЯрд╛рдЗрдк рд╣реИред рджреВрд╕рд░реА рдмрдирд╛рд╡рдЯ (colorTexture) GL_RGBA16F рдкреНрд░рдХрд╛рд░ рдХреА рд╣реЛрдЧреА; рдЗрд╕ рдмрдирд╛рд╡рдЯ рдХреЗ рдкрд╣рд▓реЗ 3 рдШрдЯрдХреЛрдВ рдореЗрдВ, рд╣рдо рд╕реВрддреНрд░ рдХреЗ рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдХреЛ рд▓рд┐рдЦреЗрдВрдЧреЗ (2): рдЪреМрдереЗ рдореЗрдВ - ред рдкреНрд░рдХрд╛рд░ рдХреА рдПрдХ рдФрд░ рдмрдирд╛рд╡рдЯ GL_R16 (рдПрд▓реНрдлрд╛ рдЯреЗрдХреНрд╕рдЪрд░) рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧреА ред

рдкрд╣рд▓реЗ рдЖрдкрдХреЛ OpenGL рд╕реЗ рдЕрдкрдиреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  f->glGenFramebuffers (1, &framebufferNT ); f->glGenTextures (1, &colorTextureNT ); f->glGenRenderbuffers(1, &depthRenderbuffer); f->glGenFramebuffers(1, &framebuffer ); f->glGenTextures (1, &colorTexture); f->glGenTextures (1, &alphaTexture); 

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, Qt рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣рд╛рдБ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╕рднреА OpenGL рдХреЙрд▓ QOpenGLFunctions_4_5_Core рдкреНрд░рдХрд╛рд░ рдХреА рдПрдХ рд╡рд╕реНрддреБ рд╕реЗ рдЧреБрдЬрд╝рд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдореЗрд╢рд╛ рдореЗрд░реЗ рд▓рд┐рдП f рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдм рдЖрдкрдХреЛ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП:

  f->glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, colorTextureNT); f->glTexImage2DMultisample( GL_TEXTURE_2D_MULTISAMPLE, numOfSamples, GL_RGB16F, w, h, GL_TRUE ); f->glBindRenderbuffer(GL_RENDERBUFFER, depthRenderbuffer); f->glRenderbufferStorageMultisample( GL_RENDERBUFFER, numOfSamples, GL_DEPTH_COMPONENT, w, h ); f->glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, colorTexture); f->glTexImage2DMultisample( GL_TEXTURE_2D_MULTISAMPLE, numOfSamples, GL_RGBA16F, w, h, GL_TRUE ); f->glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, alphaTexture); f->glTexImage2DMultisample( GL_TEXTURE_2D_MULTISAMPLE, numOfSamples, GL_R16F, w, h, GL_TRUE ); 

рдФрд░ рдлрд╝реНрд░реЗрдордмрдлрд╝рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ:

  f->glBindFramebuffer(GL_FRAMEBUFFER, framebufferNT); f->glFramebufferTexture2D( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D_MULTISAMPLE, colorTextureNT, 0 ); f->glFramebufferRenderbuffer( GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthRenderbuffer ); f->glBindFramebuffer(GL_FRAMEBUFFER, framebuffer); f->glFramebufferTexture2D( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D_MULTISAMPLE, colorTexture, 0 ); f->glFramebufferTexture2D( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, GL_TEXTURE_2D_MULTISAMPLE, alphaTexture, 0 ); GLenum attachments[2] = {GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1}; f->glDrawBuffers(2, attachments); f->glFramebufferRenderbuffer( GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthRenderbuffer ); 

рджреВрд╕рд░реЗ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдкрд╛рд╕ рдкрд░, рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рджреЛ рдмрдирд╛рд╡рдЯреЛрдВ рдореЗрдВ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЗрд╕реЗ glDrawBuffers рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕ рдХреЛрдб рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдПрдХ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдХреЛрдб рдЬреЛ рдмрдирд╛рд╡рдЯ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмрдлрд╝рд░реНрд╕ рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рддрд╛ рд╣реИ рдЙрд╕реЗ рд╣рд░ рдмрд╛рд░ рд╡рд┐рдВрдбреЛ рдХреЗ рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЛрдб рдЖрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рд░ рдмрд╛рд░ рд╡рд┐рдВрдбреЛ рд░рд┐рдбрд░реНрди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

  f->glBindFramebuffer(GL_FRAMEBUFFER, framebufferNT); // ...   ... 

рд╣рдордиреЗ рдЕрднреА-рдЕрднреА colorTextureNT рдмрдирд╛рд╡рдЯ рдкрд░ рд╕рднреА рдЕрдкрд╛рд░рджрд░реНрд╢реА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд┐рдпрд╛, рдФрд░ рд░реЗрдВрдбрд░ рдмрдлрд░ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд▓рд┐рдЦреАред рдбреНрд░рд╛рдЗрдВрдЧ рдХреЗ рдЕрдЧрд▓реЗ рдЪрд░рдг рдореЗрдВ рдПрдХ рд╣реА рд░реЗрдВрдбрд░рдмрдлрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЕрдкрд╛рд░рджрд░реНрд╢реА рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рднреА рдЧрд╣рд░рд╛рдИ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд╣рд╛рдВ рд▓рд┐рдЦреА рдЧрдИ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП GL_FRAMEBUFFER_BARRIER_BIT рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╛рд░рджрд░реНрд╢реА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЕрдкрдЯреИрдХреНрд╕рдЪрд░ () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рдЕрдВрддрд┐рдо рдЪрд░рдг рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдЯреБрдХрдбрд╝рд╛ shader textures colorTextureNT, colorTexture рдФрд░ AlphaTexture рд╕реЗ рдлреЙрд░реНрдореВрд▓рд╛ (2) рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдкрдврд╝реЗрдЧрд╛ред рдмрдирд╛рд╡рдЯ рддрдм рддрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП ApplyTextures () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдо GL_TEXTURE_FETCH_BARRIER_BIT рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

  static constexpr GLfloat clearColor[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; static constexpr GLfloat clearAlpha = 1.0f; f->glBindFramebuffer(GL_FRAMEBUFFER, framebuffer); f->glClearBufferfv(GL_COLOR, 0, clearColor); f->glClearBufferfv(GL_COLOR, 1, &clearAlpha); f->glMemoryBarrier(GL_FRAMEBUFFER_BARRIER_BIT); PrepareToTransparentRendering(); { // ...   ... } CleanupAfterTransparentRendering(); f->glMemoryBarrier(GL_TEXTURE_FETCH_BARRIER_BIT); f->glBindFramebuffer(GL_FRAMEBUFFER, defaultFBO); ApplyTextures(); 

defaultFBO рдлреНрд░реЗрдордмрдлрд╝рд░ рд╣реИ рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдо рдЫрд╡рд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ 0 рд╣реИ, рд▓реЗрдХрд┐рди Qt рдореЗрдВ рдпрд╣ QOpenGLWidget :: defaultFramebufferObject () рд╣реИред

рд╣рд░ рдмрд╛рд░ рдЬрдм рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдЯреБрдХрдбрд╝реЗ рдХреЗ рд░рдВрдЧ рдФрд░ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрдЧреАред рд▓реЗрдХрд┐рди ColorTexture рдмрдирд╛рд╡рдЯ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╣рдо рдЗрди рд░рд╛рд╢рд┐рдпреЛрдВ рдХреЗ рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдпреЛрдЧ (рдФрд░ AlphaTexture рдмрдирд╛рд╡рдЯ рдХреЗ рдЙрддреНрдкрд╛рдж) рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдмреНрд▓реЗрдВрдбрд┐рдВрдЧ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЪреВрдВрдХрд┐ рдкрд╣рд▓реА рдмрдирд╛рд╡рдЯ рдХреЗ рд▓рд┐рдП рд╣рдо рдпреЛрдЧ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП - рдЙрддреНрдкрд╛рдж, рдкреНрд░рддреНрдпреЗрдХ рд▓рдЧрд╛рд╡ рдХреЗ рд▓рд┐рдП рд╕рдореНрдорд┐рд╢реНрд░рдг рд╕реЗрдЯрд┐рдВрдЧреНрд╕ (glBlendFunc рдФрд░ glBlendEquation) рдХреЛ рдЕрд▓рдЧ рд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрд╣рд╛рдБ рддреИрдпрд╛рд░ рдХреА рд╕рд╛рдордЧреНрд░реА рд╣реИ:

  f->glEnable(GL_DEPTH_TEST); f->glDepthMask(GL_FALSE); f->glDepthFunc(GL_LEQUAL); f->glDisable(GL_CULL_FACE); f->glEnable(GL_MULTISAMPLE); f->glEnable(GL_BLEND); f->glBlendFunci(0, GL_ONE, GL_ONE); f->glBlendEquationi(0, GL_FUNC_ADD); f->glBlendFunci(1, GL_DST_COLOR, GL_ZERO); f->glBlendEquationi(1, GL_FUNC_ADD); 

рдФрд░ CleanupAfterTransparentRendering () рдлрд╝рдВрдХреНрд╢рди рдХреА рд╕рд╛рдордЧреНрд░реА:

  f->glDepthMask(GL_TRUE); f->glDisable(GL_BLEND); 

рдореЗрд░реЗ рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ, рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдкрддреНрд░ рдбрдмреНрд▓реНрдпреВ рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред W рджреНрд╡рд╛рд░рд╛ рд░рдВрдЧ рдХрд╛ рдЙрддреНрдкрд╛рдж рдФрд░ рд╕реНрд╡рдпрдВ w рд╣рдо рдПрдХ рдЖрдЙрдЯрдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ 1 - w рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВред рдкреНрд░рддреНрдпреЗрдХ рдЖрдЙрдЯрдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП, рдПрдХ рд▓реЗрдЖрдЙрдЯ рдХреНрд╡рд╛рд▓реАрдлрд╛рдпрд░ рдХреЛ "рд╕реНрдерд╛рди = X" рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдПрдХреНрд╕ рдЕрдЯреИрдЪрдореЗрдВрдЯ рдПрд░реЗ рдореЗрдВ рддрддреНрд╡ рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ 3 рдбреА рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдореЗрдВ рдЧреНрд▓рдбреНрд░рд╛рдлрд░реНрдлрд╝рд░реНрд╕ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдерд╛ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╕реНрдерд╛рди = 0 рдХреЗ рд╕рд╛рде рдЖрдЙрдЯрдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ GL_COLOR_ATTACHMENT0 рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдмрдирд╛рд╡рдЯ рдХреЛ рднреЗрдЬрд╛ рдЧрдпрд╛ рд╣реИ) , рдФрд░ GL_COLOR_ATTACHMENT1 рд╕реЗ рдЬреБрдбрд╝реА рдмрдирд╛рд╡рдЯ рдореЗрдВ рд╕реНрдерд╛рди = 1 рдХреЗ рд╕рд╛рде рдкреИрд░рд╛рдореАрдЯрд░)ред рдЙрд╕реА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ glBlendFunci рдФрд░ glBlendEquationi рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдЕрдЯреИрдЪрдореЗрдВрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЕрдЯреИрдЪрдореЗрдВрдЯ рдирдВрдмрд░ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВред

рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдХрд░рдирд╛:

 #version 450 core in vec3 color; layout (location = 0) out vec4 outData; layout (location = 1) out float alpha; layout (location = 2) uniform float w; void main() { outData = vec4(w * color, w); alpha = 1 - w; } 

ApplyTextures () рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рд╣рдо рдкреВрд░реА рд╡рд┐рдВрдбреЛ рдкрд░ рдПрдХ рдЖрдпрдд рдмрдирд╛рддреЗ рд╣реИрдВред рдЯреБрдХрдбрд╝рд╛ shader рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рд╕рднреА рдмрдирд╛рд╡рдЯреЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ, рд╡рд░реНрддрдорд╛рди рд╕реНрдХреНрд░реАрди рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдмрдирд╛рд╡рдЯ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рдореМрдЬреВрджрд╛ рдирдореВрдирд╛ рд╕рдВрдЦреНрдпрд╛ (gl_SampleID) рдмрд╣реБрд░реВрдк рдмрдирд╛рд╡рдЯ рдореЗрдВ рдирдореВрдирд╛ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред Shader рдореЗрдВ gl_SampleID рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрд╕ рдореЛрдб рдХреЛ рдЪрд╛рд▓реВ рдХрд░рддрд╛ рд╣реИ рдЬрдм рдкреНрд░рддреНрдпреЗрдХ рдирдореВрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рдЯреБрдХрдбрд╝рд╛ shader рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рдЗрд╕реЗ рдкреВрд░реЗ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдо рдЙрди рд╕рднреА рдирдореВрдиреЛрдВ рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЖрджрд┐рдо рдХреЗ рдЕрдВрджрд░ рдереЗ)

рд╢реАрд░реНрд╖ рдЫрд╛рдпрд╛ рдореЗрдВ рдХреБрдЫ рднреА рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдирд╣реАрдВ рд╣реИ:

 #version 450 core const vec2 p[4] = vec2[4]( vec2(-1, -1), vec2( 1, -1), vec2( 1, 1), vec2(-1, 1) ); void main() { gl_Position = vec4(p[gl_VertexID], 0, 1); } 

рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдХрд░рдирд╛:

 #version 450 core out vec4 outColor; layout (location = 0) uniform sampler2DMS colorTextureNT; layout (location = 1) uniform sampler2DMS colorTexture; layout (location = 2) uniform sampler2DMS alphaTexture; void main() { ivec2 upos = ivec2(gl_FragCoord.xy); vec4 cc = texelFetch(colorTexture, upos, gl_SampleID); vec3 sumOfColors = cc.rgb; float sumOfWeights = cc.a; vec3 colorNT = texelFetch(colorTextureNT, upos, gl_SampleID).rgb; if (sumOfWeights == 0) { outColor = vec4(colorNT, 1.0); return; } float alpha = 1 - texelFetch(alphaTexture, upos, gl_SampleID).r; colorNT = sumOfColors / sumOfWeights * alpha + colorNT * (1 - alpha); outColor = vec4(colorNT, 1.0); } 

рдФрд░ рдЕрдВрдд рдореЗрдВ, ApplyTextures () рдлрд╝рдВрдХреНрд╢рди рдХреА рд╕рд╛рдордЧреНрд░реА:

  f->glActiveTexture(GL_TEXTURE0); f->glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, colorTextureNT); f->glUniform1i(0, 0); f->glActiveTexture(GL_TEXTURE1); f->glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, colorTexture); f->glUniform1i(1, 1); f->glActiveTexture(GL_TEXTURE2); f->glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, alphaTexture); f->glUniform1i(2, 2); f->glEnable(GL_MULTISAMPLE); f->glDisable(GL_DEPTH_TEST); f->glDrawArrays(GL_TRIANGLE_FAN, 0, 4); 

рдЦреИрд░, OpenGL рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣ рдХреЛрдб рдореЗрд░реЗ OpenGL рд╡рд┐рдЬреЗрдЯ рдХреЗ рд╡рд┐рдирд╛рд╢рдХрд░реНрддрд╛ рдореЗрдВ рд╣реИ:

  f->glDeleteFramebuffers (1, &framebufferNT); f->glDeleteTextures (1, &colorTextureNT); f->glDeleteRenderbuffers(1, &depthRenderbuffer); f->glDeleteFramebuffers (1, &framebuffer); f->glDeleteTextures (1, &colorTexture); f->glDeleteTextures (1, &alphaTexture); 

Source: https://habr.com/ru/post/hi457284/


All Articles