рдпрд╣ рдкреЛрд╕реНрдЯ рд╡реЗрдЯреЗрдб рдмреНрд▓реЗрдВрдбреЗрдб рдСрд░реНрдбрд░-рдЗрдВрдбрд┐рдкреЗрдВрдбреЗрдВрдЯ рдЯреНрд░рд╛рдВрд╕рдкреЗрд░реЗрдВрд╕реА (WBOIT) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ - рдЬреЛ рдЯреНрд░рд┐рдХ 2013 рдореЗрдВ JCGT рдореЗрдВ
рдХрд╡рд░ рдХреА рдЧрдИ рдереАред
рдЬрдм рдПрдХ рд╕реНрдХреНрд░реАрди рдкрд░ рдХрдИ рдкрд╛рд░рджрд░реНрд╢реА рдСрдмреНрдЬреЗрдХреНрдЯ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдкрд┐рдХреНрд╕реЗрд▓ рд░рдВрдЧ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рджрд░реНрд╢рдХ рдХреЗ рдХрд░реАрдм рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз рд╕рдореНрдорд┐рд╢реНрд░рдг рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
\ start {рдореИрдЯреНрд░рд┐рдХреНрд╕} C = C_ {рдкрд╛рд╕} \ рдЕрд▓реНрдлрд╛ + C_ {рджреВрд░} (1- \ рдЕрд▓реНрдлрд╛) рдФрд░& (1) \ рдЕрдВрдд {рдореИрдЯреНрд░рд┐рдХреНрд╕}
рдЯреБрдХрдбрд╝реЗ рдЖрджреЗрд╢ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдСрдкрд░реЗрдЯрд░ рдХреЗ
рдкрд╛рд╕ рдПрдХ рдЦрдВрдб рдХрд╛ рд░рдВрдЧ (рд╕реА
рдкрд╛рд╕ ) рдФрд░ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ (
╬▒ ) рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдкреАрдЫреЗ рд╕рднреА рдЯреБрдХрдбрд╝реЛрдВ рдХрд╛ рд╕рдордЧреНрд░ рд░рдВрдЧ (рд╕реА
рджреВрд░ ) рд╣реЛрддрд╛ рд╣реИред рдЕрдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ 0 рд╕реЗ 1 рддрдХ рд╣реЛ рд╕рдХрддреА рд╣реИ; 0 рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╡рд╕реНрддреБ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╛рд░рджрд░реНрд╢реА (рдЕрджреГрд╢реНрдп) рд╣реИ рдФрд░ 1 рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдкрд╛рд░рджрд░реНрд╢реА рд╣реИред
рдЗрд╕ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рдЧрд╣рд░рд╛рдИ рд╕реЗ рд╕реЙрд░реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╕реЛрдЪрд┐рдП рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рдЕрднрд┐рд╢рд╛рдк рд╣реИред рдЖрдо рддреМрд░ рдкрд░, рдЖрдкрдХреЛ рдкреНрд░рддрд┐ рдлреНрд░реЗрдо рдПрдХ рдЫрдВрдЯрд╛рдИ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдЖрдк рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЫрд╛рдБрдЯрддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдЕрдирд┐рдпрдорд┐рдд рдЖрдХрд╛рд░ рдХреА рд╕рддрд╣реЛрдВ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЕрдиреБрднрд╛рдЧреЛрдВ рдореЗрдВ рдХрд╛рдЯрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдлрд┐рд░ рдЙрди рд╕рддрд╣реЛрдВ рдХреЗ рдХрдЯ-рдСрдл PARTS рдХреЛ рдЫрд╛рдВрдЯрдирд╛ рд╣реЛрдЧрд╛ (рдЖрдкрдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рддрд╣реЛрдВ рдХреЛ рдХрд╛рдЯрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред рдпрджрд┐ рдЖрдк рдЕрдВрд╢реЛрдВ рдХреЛ рдЫрд╛рдБрдЯрддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЕрдкрдиреЗ рд╢реЗрдбреНрд╕ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЫрдБрдЯрд╛рдИ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ "рдСрд░реНрдбрд░-рдЗрдВрдбрд┐рдкреЗрдВрдбреЗрдВрдЯ рдЯреНрд░рд╛рдВрд╕рдкреЗрд░реЗрдВрд╕реА" (OIT) рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╡реАрдбрд┐рдпреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдПрдХ рд▓рд┐рдВрдХреНрдб рд╕реВрдЪреА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рд▓рдЧрднрдЧ рдЕрд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЙрд╕ рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдХрд┐рддрдиреА рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рдФрд░ рдпрджрд┐ рдЖрдк рд╕реНрдореГрддрд┐ рд╕реЗ рдХрдо рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╕реНрдХреНрд░реАрди рдкрд░ рдХрд▓рд╛рдХреГрддрд┐рдпрд╛рдВ рдорд┐рд▓рддреА рд╣реИрдВред
рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рджреГрд╢реНрдп рдкрд░ рдкрд╛рд░рджрд░реНрд╢реА рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╡рд┐рдирд┐рдпрдорд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдкрджреЛрдВ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╕рдордЭреЗрдВред рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдПрдХ CAD рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдкрдиреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕реНрдерд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрд┐рддрдиреА рдЪрд╛рд╣реЗрдВ рдЙрддрдиреА рд╡рд╕реНрддреБрдПрдВ рд╣реЛрдВрдЧреА, рдФрд░ рдЙрдирдХрд╛ рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рд╕рд╛рджрд╛ рдордирдорд╛рдирд╛ рд╣реЛрдЧрд╛ред
рдЕрдм рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рд╕рдореНрдорд┐рд╢реНрд░рдг рд╕рдВрдЪрд╛рд▓рдХ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрддрдирд╛ рдореЛрд╣рдХ рдХреНрдпреЛрдВ рд╣реИ рдХрд┐ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЫрдБрдЯрд╛рдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдФрд░ рдРрд╕рд╛ рдПрдХ рдСрдкрд░реЗрдЯрд░ рд╣реИ - рдПрдХ рдкреЗрдкрд░ рдореЗрдВ рдЬрд┐рд╕рдХрд╛ рдореИрдВрдиреЗ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдерд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХрдИ рд╕реВрддреНрд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд▓реЗрдЦрдХ (рдФрд░ рдЦреБрдж рдХреЛ) рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдорд╛рдирддреЗ рд╣реИрдВ:
\ 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) рдЙрд╕ рдмрд┐рдВрджреБ (x, y) рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдЧреИрд░-рдкрд╛рд░рджрд░реНрд╢реА рдЯреБрдХрдбрд╝реЗ рдХрд╛ рд░рдВрдЧ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрд▓ рдкрд╛рд░рджрд░реНрд╢реА рдЯреБрдХрдбрд╝реЗ рд╣реИрдВ рдЬреЛ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЙрддреНрддреАрд░реНрдг рд╣реБрдП рд╣реИрдВ, рдФрд░ рдЙрдирдХреЗ рдкрд╛рд╕ рд╕реВрдЪрдХрд╛рдВрдХ рд╣реИрдВ тИИ [1, n]ред C
i , ith рдкрд╛рд░рджрд░реНрд╢реА рдЕрдВрд╢ рдХрд╛ рд░рдВрдЧ рд╣реИ рдФрд░
╬▒ i рдЗрд╕рдХреА рдЕрдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рд╣реИред
рдлреЙрд░реНрдореВрд▓рд╛ (2) рдлреЙрд░реНрдореВрд▓рд╛ (1) рд╕реЗ рдереЛрдбрд╝рд╛ рдорд┐рд▓рддрд╛-рдЬреБрд▓рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдмрджрд▓реЗрдВ

C рдХреЗ
рдкрд╛рд╕ , C
0 рдХреЗ рд╕рд╛рде C
рджреВрд░ рдФрд░
╬▒ рдФрд░ рд╕реВрддреНрд░ (1) рдХреЗ рд╕рд╛рде рд╡рд╣реА рд╣реЛрдЧрд╛ рдЬреЛ рдЖрдкрдХреЛ рдорд┐рд▓реЗрдЧрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ,

рд╕рднреА рдкрд╛рд░рджрд░реНрд╢реА рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рд░рдВрдЧреЛрдВ рдХрд╛
рднрд╛рд░рд┐рдд рдЕрдВрдХрдЧрдгрд┐рдд рдорд╛рдзреНрдп рд╣реИ ("рджреНрд░рд╡реНрдпрдорд╛рди рдХреЗ рдХреЗрдВрджреНрд░" рдХреЗ рд▓рд┐рдП рдпрд╛рдВрддреНрд░рд┐рдХреА рдореЗрдВ рд╕рдорд╛рди рд╕реВрддреНрд░ рд╣реИ), рдФрд░ рдпрд╣ рдкрд╛рд╕ рдХреЗ рдЯреБрдХрдбрд╝реЗ C рдХреЗ рд░рдВрдЧ рдХреЗ рд▓рд┐рдП рдЬрд╛рдПрдЧрд╛ред рд╕реА
0 рдЙрди рд╕рднреА рдкрд╛рд░рджрд░реНрд╢реА рдЕрдВрд╢реЛрдВ рдХреЗ рдкреАрдЫреЗ рдЧреИрд░-рдкрд╛рд░рджрд░реНрд╢реА рдЯреБрдХрдбрд╝реЗ рдХрд╛ рд░рдВрдЧ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдо рднрд╛рд░рд┐рдд рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдорд╛рдзреНрдп рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╣рдо рд╕рднреА рдкрд╛рд░рджрд░реНрд╢реА рдЕрдВрд╢реЛрдВ рдХреЛ рдПрдХ "рднрд╛рд░рд┐рдд рдорд╛рдзреНрдп" рдЦрдВрдб рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдорд╛рдирдХ рд╕рдореНрдорд┐рд╢реНрд░рдг рдСрдкрд░реЗрдЯрд░ - рд╕реВрддреНрд░ (1) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЕрдм,
╬▒ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдкрд░рд┐рд╖реНрдХреГрдд рд╕реВрддреНрд░ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдЕрднреА рддрдХ рдЗрд╕рдХреЗ рдЕрд░реНрде рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реИред
рдпрд╣ n- рдЖрдпрд╛рдореА рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдПрдХ рдЕрджрд┐рд╢ рдХрд╛рд░реНрдп рд╣реИред рд╕рднреА
╬▒ i [0, 1] рдореЗрдВ рд╕рдорд╛рд╣рд┐рдд рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рднреА
╬▒ i рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЗрд╕рдХрд╛ рдЖрдВрд╢рд┐рдХ рд╡реНрдпреБрддреНрдкрдиреНрди рдХреБрдЫ рдЧреИрд░-рдирдХрд╛рд░рд╛рддреНрдордХ рд╕реНрдерд┐рд░рд╛рдВрдХ рд╣реИред рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рдХрд┐рд╕реА рднреА рдкрд╛рд░рджрд░реНрд╢реА рдЯреБрдХрдбрд╝реЗ рдХреА рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ, рддреЛ "рднрд╛рд░рд┐рдд рдорд╛рдзреНрдп" рдЯреБрдХрдбрд╝реЗ рдХреА рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдмрдврд╝ рдЬрд╛рддреА рд╣реИ, рдЬреЛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд░реИрдЦрд┐рдХ рд░реВрдк рд╕реЗ рдмрдврд╝рддрд╛ рд╣реИред
рдпрджрд┐ рдХреБрдЫ рдЯреБрдХрдбрд╝реЗ рдХреА рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ 0 рд╣реИ рддреЛ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрджреГрд╢реНрдп рд╣реИред рдпрд╣ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд░рдВрдЧ рдореЗрдВ рдпреЛрдЧрджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ 1 рдХреА рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рд╣реИ рддреЛ
╬▒ 1 рднреА рд╣реИред рдпрд╣реА рд╣реИ, рдЧреИрд░-рдкрд╛рд░рджрд░реНрд╢реА рдЯреБрдХрдбрд╝рд╛ рдЕрджреГрд╢реНрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЕрдЪреНрдЫрд╛ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдиреНрдп рдкрд╛рд░рджрд░реНрд╢реА рдЯреБрдХрдбрд╝реЗ (рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд╕рд╛рде рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдХреЗ рдкреАрдЫреЗ = 1) рдЕрднреА рднреА рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд░рдВрдЧ рдореЗрдВ рдпреЛрдЧрджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

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

рдСрд░реЗрдВрдЬ рдЯреНрд░рд╛рдЗрдПрдВрдЧрд▓ рдХреА рдЕрдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ 1 рд╣реИ, рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдХреЗ рд╕рд╛рде рд╣рд░реЗ рд░рдВрдЧ рдХрд╛ рддреНрд░рд┐рдХреЛрдг рдХреЗрд╡рд▓ рдЧреИрд░-рдкрд╛рд░рджрд░реНрд╢реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдСрд░реЗрдВрдЬ рд░рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╢реАрд░реНрд╖ рддреНрд░рд┐рдХреЛрдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╢рд┐рдлреНрдЯ рдХреЗ рдкреАрдЫреЗ рддреНрд░рд┐рдХреЛрдг рдХреЗ рд╣рд░реЗ рд░рдВрдЧ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред
рдЖрдкрдХреА рддрд╕реНрд╡реАрд░ рдХреЛ рджреЗрдЦрдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреА рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдЙрдЪреНрдЪ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рди рд░рдЦреЗрдВред рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЬрд╣рд╛рдВ рдореИрдВ рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдореИрдВ 0.5 рд╕реЗ рдЕрдзрд┐рдХ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реВрдВред рдпрд╣ 3D CAD рд╣реИ рдЬрд╣рд╛рдВ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдпреЛрдЬрдирд╛рдмрджреНрдз рддрд░реАрдХреЗ рд╕реЗ рдЦреАрдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдмрд╣реБрдд рдпрдерд╛рд░реНрдерд╡рд╛рджреА рджрд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкреНрд░рддрд┐рдмрдВрдз рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИред
рдХрдо opacities рдХреЗ рд╕рд╛рде рдмрд╛рдПрдБ рдФрд░ рджрд╛рдПрдБ рдЪрд┐рддреНрд░ рдмрд╣реБрдд рд╕рдорд╛рди рджрд┐рдЦрддреЗ рд╣реИрдВ:

рдФрд░ рд╡реЗ рдЙрдЪреНрдЪ рдЕрдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдХреЗ рд╕рд╛рде рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВ:

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


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

рд╕рдореНрдорд┐рд╢реНрд░рдг рдСрдкрд░реЗрдЯрд░ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рдЗрдВрдЬреЗрдХреНрд╖рди
рдЧрд╣рд░рд╛рдИ рдХреА рдЫрдВрдЯрд╛рдИ рдХреА рдХрдореА рдХреА рднрд░рдкрд╛рдИ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдкрд░реЛрдХреНрдд рдЬреЗрд╕реАрдЬреАрдЯреА рдкреЗрдкрд░ рдХреЗ рд▓реЗрдЦрдХ рд╕реВрддреНрд░ (2) рдореЗрдВ рдЧрд╣рд░рд╛рдИ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдП рдереЗред рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЬрдЯрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХрдо рдЕрдиреБрдорд╛рдирд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ 3 рдбреА рджреГрд╢реНрдп рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдореНрдорд┐рд╢реНрд░рдг рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдирд╣реАрдВ рдЖрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдЕрдзрд┐рдХ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХрд╛рдЧрдЬ рдкрдврд╝реЗрдВред
рд▓реЗрдЦрдХреЛрдВ рдХрд╛ рджрд╛рд╡рд╛ рд╣реИ рдХрд┐ рдХрднреА-рдХрднреА WBOIT рдХреБрдЫ рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрддрд╛ рд╣реИ рдЬреЛ CODB рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдзреБрдПрдВ рдХреЛ рджреЛ рдХрдгреЛрдВ рд╡рд╛рд▓реЗ рдХрдг рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рддреНрд░рд┐рдд рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: рдЧрд╣рд░рд╛ рдзреБрдЖрдВ рдФрд░ рд╣рд▓реНрдХрд╛ рдзреБрдЖрдВред рдЬрдм рдХрдг рдЧрддрд┐рдорд╛рди рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдХрдг рджреВрд╕рд░реЗ рд╕реЗ рд╣реЛрдХрд░ рдЧреБрдЬрд░рддрд╛ рд╣реИ, рддреЛ рдЙрдирдХрд╛ рдорд┐рд╢реНрд░рд┐рдд рд░рдВрдЧ рддреБрд░рдВрдд рдЕрдВрдзреЗрд░реЗ рд╕реЗ рдкреНрд░рдХрд╛рд╢ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рдЧрд╣рд░рд╛рдИ рдХреЗ рд╕рд╛рде WBOIT рдСрдкрд░реЗрдЯрд░ рд░рдВрдЧ рдХреЗ рд╕реБрдЪрд╛рд░реБ рд╕рдВрдХреНрд░рдордг рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рдмреЗрд╣рддрд░ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИред рдкрддрд▓реА рдЯреНрдпреВрдмреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдмрд╛рд▓реЛрдВ рдпрд╛ рдлрд░ рдореЗрдВ рд╕рдорд╛рди рд╕рдВрдкрддреНрддрд┐ рд╣реЛрддреА рд╣реИред
рдХреЛрдб
рдЕрдм рд╕реВрддреНрд░ рдХреЗ OpenGL рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП (2)ред рдЖрдк GitHub рдкрд░
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреЗрдЦ рд╕рдХрддреЗ
рд╣реИрдВ ред рдпрд╣ рдПрдХ рдХреНрдпреВрдЯреА-рдЖрдзрд╛рд░рд┐рдд рдРрдк рд╣реИ, рдФрд░ рдЖрдк рдЬреЛ рдЪрд┐рддреНрд░ рдпрд╣рд╛рдВ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ, рд╡рд╣ рдЬреНрдпрд╛рджрд╛рддрд░ рдЙрд╕реА рд╕реЗ рдЖрдпрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдкрд╛рд░рджрд░реНрд╢реА рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдирдП рд╣реИрдВ, рддреЛ рдпрд╣рд╛рдВ рдПрдХ рдЕрдЪреНрдЫреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐-рд╕реНрддрд░реАрдп рд╕рд╛рдордЧреНрд░реА рд╣реИ:
рдУрдкрдирдЬреАрдПрд▓ рдЬрд╛рдиреЗрдВред рд╕рдореНрдорд┐рд╢реНрд░рдгрдореИрдВ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред
рд╕реВрддреНрд░ (2) рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ 2 рдЕрддрд┐рд░рд┐рдХреНрдд рдлреНрд░реЗрдордмрдлрд╝рд░, 3 рдорд▓реНрдЯреАрд╕рдорд▓ рдмрдирд╛рд╡рдЯ рдФрд░ рдПрдХ рдЧрд╣рд░рд╛рдИ рд░реЗрдВрдбрд░рдмрдлрд╝рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЧреИрд░-рдкрд╛рд░рджрд░реНрд╢реА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкрд╣рд▓реЗ рдмрдирд╛рд╡рдЯ, colorTextureNT рдХреЛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХрд╛ рдкреНрд░рдХрд╛рд░ GL_RGB10_A2 рд╣реИред рджреВрд╕рд░реА рдмрдирд╛рд╡рдЯ (colorTexture) рдЯрд╛рдЗрдк GL_RGBA16F рдХреА рд╣реЛрдЧреАред ColorTexture рдХреЗ рдкрд╣рд▓реЗ рддреАрди рдШрдЯрдХреЛрдВ рдореЗрдВ рд╕реВрддреНрд░ рдХрд╛ рдпрд╣ рднрд╛рдЧ рд╣реЛрдЧрд╛ (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 framewok рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ 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 );
рджреВрд╕рд░реЗ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдкрд╛рд╕ рдХреЗ рджреМрд░рд╛рди, рдЯреБрдХрдбрд╝рд╛ shader рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рджреЛ рдмрдирд╛рд╡рдЯреЛрдВ рдореЗрдВ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕реЗ glDrawBuffers рдХреЗ рд╕рд╛рде рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕ рдХреЛрдб рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛ рдПрдХ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рд╣рд░ рдмрд╛рд░ рд╡рд┐рдВрдбреЛ рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рдкрд░ рдмрдирд╛рд╡рдЯ рдФрд░ рд░реЗрдВрдбрд░рдмрдлрд╝рд░ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рдХреЗ рд▓рд┐рдП рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдм рд╣рдо рдЙрд╕ рдХреЛрдб рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рд░ рдмрд╛рд░ рд╡рд┐рдВрдбреЛ рдХреА рд╕рд╛рдордЧреНрд░реА рдЕрдкрдбреЗрдЯ рд╣реЛрддреА рд╣реИред
f->glBindFramebuffer(GL_FRAMEBUFFER, framebufferNT);
рд╣рдордиреЗ рдЕрднреА-рдЕрднреА рд╕рднреА рдЧреИрд░-рдкрд╛рд░рджрд░реНрд╢реА рд╡рд╕реНрддреБрдУрдВ рдХреЛ colorTextureNT рдХреЛ рд░реЗрдВрдбрд░ рдХрд┐рдпрд╛ рдФрд░ рд░реЗрдВрдбрд░рдмрдлрд░ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд▓рд┐рдЦреАред рдЕрдЧрд▓реЗ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдкрд╛рд╕ рдкрд░ рдЙрд╕реА рд░реЗрдВрдбрд░рдмрдлрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдпрд╣ рдЖрд╢реНрд╡рд╕реНрдд рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдЧреИрд░-рдкрд╛рд░рджрд░реНрд╢реА рд╡рд╕реНрддреБрдУрдВ рд╕реЗ рдЧрд╣рд░рд╛рдИ рд░реЗрдВрдбрд░рдмрдлрд╝рд░ рдореЗрдВ рд╕рднреА рд▓реЗрдЦрди рдХрд╛рд░реНрдп рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдП рд╣реИрдВред рдЗрд╕реЗ GL_FRAMEBUFFER_BARRIER_BIT рдХреЗ рд╕рд╛рде рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкрд╛рд░рджрд░реНрд╢реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо ApplyTextures () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдЕрдВрддрд┐рдо рд░реЗрдВрдбрд░рд┐рдВрдЧ рдкрд╛рд╕ рдХрд░реЗрдЧрд╛, рдЬрд╣рд╛рдВ рдлрд╝рд╛рд░реНрдореЗрд╢рди 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(); {
defaultFBO рдПрдХ рдлреНрд░реЗрдо-рдмрдлрд╝рд░ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рд╕реНрдХреНрд░реАрди рдкрд░ рдЪрд┐рддреНрд░ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ 0 рд╣реИ, рд▓реЗрдХрд┐рди Qt рдореЗрдВ рдпрд╣ QOpenGLWidget :: defaultFramebufferObject () рд╣реИред
рдПрдХ рдЯреБрдХрдбрд╝рд╛ shader рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЖрд╣реНрд╡рд╛рди рдореЗрдВ рд╣рдо рд╡рд░реНрддрдорд╛рди рдЯреБрдХрдбрд╝реЗ рдХреЗ рд░рдВрдЧ рдФрд░ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред рд▓реЗрдХрд┐рди colorTexture рдореЗрдВ рдЙрди рд╕рдВрд╕реНрдерд╛рдУрдВ рдХрд╛ рдПрдХ рдпреЛрдЧ (рдФрд░ AlphaTexture рдПрдХ рдЙрддреНрдкрд╛рдж) рджрд┐рдЦрд╛рдИ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрд╕рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рдореНрдорд┐рд╢реНрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдкрд╣рд▓реА рдмрдирд╛рд╡рдЯ рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ рд░рд╛рд╢рд┐ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬрдмрдХрд┐ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ рдЙрддреНрдкрд╛рдж рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд▓рдЧреНрдирдХ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдореНрдорд┐рд╢реНрд░рдг рд╕реЗрдЯрд┐рдВрдЧреНрд╕ (glBlendFunc рдФрд░ glBlendEquation) рдкреНрд░рджрд╛рди рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред
рдпрд╣рд╛рдБ ReadyToTransparentRendering () рдлрд╝рдВрдХреНрд╢рди рдХреА рд╕рд╛рдордЧреНрд░реА рд╣реИ:
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);
рдореЗрд░реА рдЦрдВрдбрд┐рдд рдЫрд╛рдпрд╛ рдореЗрдВ, рдбрдмреНрд▓реНрдпреВ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рдЦрдбрд╝рд╛ рд╣реИред рд░рдВрдЧ рдФрд░ рдбрдмреНрд▓реНрдпреВ рдХреЗ рдЙрддреНрдкрд╛рдж - рдФрд░ рдЦреБрдж рд╣реА - рдкрд╣рд▓реЗ рдЖрдЙрдЯрдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░ рдЬрд╛рдПрдВрдЧреЗ, рдФрд░ 1 - рдбрдмреНрд▓реНрдпреВ рджреВрд╕рд░реЗ рдЖрдЙрдЯрдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░ рдЬрд╛рдПрдВрдЧреЗред рдПрдХ рд▓реЗрдЖрдЙрдЯ рдХреНрд╡рд╛рд▓рд┐рдлрд╛рдпрд░ рдХреЛ "рдЖрдЙрдЯрдкреБрдЯ = рдПрдХреНрд╕" рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЖрдЙрдЯрдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд╣рд╛рдВ рдПрдХреНрд╕ рдЕрдЯреИрдЪрдореЗрдВрдЯреНрд╕ рдПрд░реЗ рдореЗрдВ рдПрдХ рддрддреНрд╡ рдХрд╛ рдПрдХ рдЗрдВрдбреЗрдХреНрд╕ рд╣реИ - рдЬрд┐рд╕реЗ рд╣рдордиреЗ glDrawBuffers рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджрд┐рдпрд╛ рдерд╛ред рд╕рдЯреАрдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдерд╛рди = 0 рдХреЗ рд╕рд╛рде рдЖрдЙрдЯрдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ GL_COLOR_ATTACHMENT1 рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдмрдирд╛рд╡рдЯ рдкрд░ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕реНрдерд╛рди = 1 рдХреЗ рд╕рд╛рде рдкреИрд░рд╛рдореАрдЯрд░ GL_COLOR_ATTACHMENT1 рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдмрдирд╛рд╡рдЯ рдкрд░ рдЬрд╛рддрд╛ рд╣реИред рдЙрд╕реА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ glBlendFunci рдФрд░ glBlendEquationi рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╣рдо рдХрд┐рд╕ рд░рдВрдЧ рдХреЗ рдЕрдиреБрд▓рдЧреНрдирдХ рдХреЗ рд▓рд┐рдП рдмреНрд▓реЗрдВрдбрд┐рдВрдЧ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред
рдЯреБрдХрдбрд╝рд╛ shader:
#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 рдЖрд╣реНрд╡рд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛рддреА рд╣реИ (рдЬрдмрдХрд┐ рдЖрдо рддреМрд░ рдкрд░ рдЗрд╕реЗ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рдмрд╛рд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдкрдиреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд╕рднреА рдирдореВрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдЖрджрд┐рдо рдХреЗ рднреАрддрд░ рдЖрддреЗ рд╣реИрдВ)ред
рд╢реАрд░реНрд╖ 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); }
рдЯреБрдХрдбрд╝рд╛ shader:
#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);