GLSL: рдХреЗрдВрджреНрд░ рдпрд╛ Centroid? рдпрд╛ рдЬрдм рд╢реЗрдбреНрд╕ рд╣рдорд▓рд╛ рдХрд░рддреЗ рд╣реИрдВ

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

рдЫрд╡рд┐

рдореИрдВ рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдореЗрдВ рдПрдХ рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд▓рд╛рддрд╛ рд╣реВрдВ рдЬреЛ рдЗрд╕ рдШрдЯрдирд╛ рдХреЗ рдХрд╛рд░рдг рдФрд░ рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рддрд╛ рд╣реИред

рдЫрд╡рд┐

рдЪрд┐рддреНрд░ 1 - рд╕рд╣реА (рдмрд╛рдПрдВ) рдФрд░ рдЧрд▓рдд (рджрд╛рдПрдВ) рдЪрд┐рддреНрд░ред "рдЧрд▓рдд" рдЫрд╡рд┐ рдХреЗ рдмрд╛рдПрдВ рдХрд┐рдирд╛рд░реЗ рдкрд░ рдкреАрд▓реЗ рдкрдЯреНрдЯреА рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдпрджреНрдпрдкрд┐ рдЪрд░ myMixer 0 рд╕реЗ 1 рддрдХ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдХрд┐рд╕реА рддрд░рд╣ рдпрд╣ "рдЧрд▓рдд" рдЫрд╡рд┐ рдореЗрдВ рдЗрд╕ рд╕реАрдорд╛ рд╕реЗ рдкрд░реЗ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЧреИрд░-рд░реЗрдЦреАрдп рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЯреБрдХрдбрд╝рд╛ shader рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

smooth in float myMixer; //      . //  sqrt    . void main( void ) { const vec3 blue = vec3( 0.0, 0.0, 1.0 ); const vec3 yellow = vec3( 1.0, 1.0, 0.0 ); float a = sqrt( myMixer ); //    myMixer < 0.0 vec3 color = mix( blue, yellow, a ); //   gl_FragColor = vec4( color, 1.0 ); } 

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

рдЫрд╡рд┐

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

рдЫрд╡рд┐

рдКрдкрд░ рдХреА рддрд╕реНрд╡реАрд░ рдореЗрдВ, рд╕реЗрдХреНрдпреБрд▓рд░ рд▓рд╛рдЗрди рдЖрджрд┐рдо рдХреЗ рдЖрдзреЗ рд╕реНрдерд╛рди рдХреЛ рдЕрд▓рдЧ рдХрд░рддреА рд╣реИред рдЗрд╕ рдкрдВрдХреНрддрд┐ рдХреЗ рдКрдкрд░ рдФрд░ рдмрд╛рдИрдВ рдУрд░, рдЪрд░ myMixer рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╣реИ, рдФрд░ рдиреАрдЪреЗ рдФрд░ рджрд╛рдИрдВ рдУрд░ рдирдХрд╛рд░рд╛рддреНрдордХ рд╣реИред

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

рдЫрд╡рд┐

рдЧреНрд░реАрди рдЙрди рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рди рдкрд░ рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рдПрдЧреАред рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рдХреЗрдВрджреНрд░ рдХреЗ рд▓рд┐рдП myMixer рдХреЗ рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рдПрдЧреАред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рд░реЗ рд░рдВрдЧ рдХреЗ рдбреЙрдЯреНрд╕ рд░реЗрдЦрд╛ рдХреЗ рдКрдкрд░ рдФрд░ рдмрд╛рдИрдВ рдУрд░ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдирдореЗрдВ myMixer рдорд╛рди рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╣реЛрдЧрд╛ред рдЗрди рдмрд┐рдВрджреБрдУрдВ рдкрд░ рд╡рд░реНрдЯрд┐рдХрд▓ (рдЕрд▓рдЧ-рдЕрд▓рдЧ рдпрд╛ рдЗрди / рдЖрдЙрдЯ рдЪрд░) рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рднреА рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЛ рднреА рдЗрдВрдЯрд░рдкреЛрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

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

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

рддреЛ, рд╕рдм рдХреБрдЫ рдПрдХ рдЪрдпрди рдХреЗ рд╕рд╛рде рд░реЗрдЦрд╛рдВрдХрди рдкрд░ (рд▓рдЧрднрдЧ) рдЙрддреНрдХреГрд╖реНрдЯ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рдорд▓реНрдЯреАрд╕рдорд▓рд┐рдВрдЧ рдХреЛ рдЪрд╛рд▓реВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

рдЫрд╡рд┐

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

рдЫрд╡рд┐

рд▓рд╛рдЗрди рдЕрднреА рднреА рдЖрджрд┐рдо рдХреЗ рдЖрдзреЗ рд╕реНрдерд╛рди рдХреЛ рдЕрд▓рдЧ рдХрд░рддреА рд╣реИред рдЗрд╕рдХреЗ рдКрдкрд░ рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рдИрдВ рдУрд░, myMixer рдХрд╛ рдорд╛рди рдзрдирд╛рддреНрдордХ рд╣реИред рдирд┐рдЪрд▓рд╛ рдФрд░ рджрд╛рдИрдВ рдУрд░ - рдирдХрд╛рд░рд╛рддреНрдордХред

рдорд▓реНрдЯреАрд╕рдореНрдкрд▓рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд░реИрд╕реНрдЯрд░рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╕рдордп, рдкрд┐рдХреНрд╕реЗрд▓ рдХреНрд▓рд╛рд╕рд┐рдлрд╝рд╛рдпрд░ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ рдпрджрд┐ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдирдореВрдирд╛ рдЖрджрд┐рдо рдХреЗ рдЕрдВрджрд░ рдЧрд┐рд░рддрд╛ рд╣реИред

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, 10 рдЯреБрдХрдбрд╝реЗ рдЙрддреНрдкрдиреНрди рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ, рдЬрд┐рдиреНрд╣реЗрдВ рдКрдкрд░реА рдмрд╛рдПрдВ рдЖрдзреЗ рддрд▓ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЪреЗрд╣рд░реЗ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝реЗ рдЧрдП рдЪрд╛рд░ рдЯреБрдХрдбрд╝реЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдирдореВрдирд╛ рдЖрджрд┐рдо рдХреЗ рдЕрдВрджрд░ рдЧрд┐рд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреЗрдВрджреНрд░ рдмрд╛рд╣рд░ рд╣реИред рдЖрджрд┐рдо рдХреЗ рдмрд╛рд╣рд░ рдкрд┐рдХреНрд╕реЗрд▓ рдЕрднреА рднреА рдордВрдж рдЪрд┐рд╣реНрдирд┐рдд рд╣реИрдВред

рдЫрд╡рд┐

рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рдХреЗрдВрджреНрд░ рдореЗрдВ рдЧрдгрдирд╛ рдХрд░рддреЗ рд╕рдордп рдХреНрдпрд╛ рд╣реЛрдЧрд╛?

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

рд╣рдорд╛рд░реЗ shader рдореЗрдВ, sqrt (myMixer) рдорд╛рди рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ myMixer рдХреЗ рд╕рд╛рде рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИрдВред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЬрдм myMixer рдХрд╛ рдорд╛рди рд╡рд░реНрдЯрд┐рдХрд▓ рд╢реЗрдбрд░ рджреНрд╡рд╛рд░рд╛ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рд╢реВрдиреНрдп рд╕реЗ рдПрдХ рддрдХ рд╣реЛрддрд╛ рд╣реИ, рдЦрдВрдб shader рдореЗрдВ myMixer рдПрдХреНрд╕рдЯреНрд░рдкрд▓реЗрд╢рди рдХреЗ рдХрд╛рд░рдг рдЗрд╕ рдЕрдВрддрд░рд╛рд▓ рд╕реЗ рдЖрдЧреЗ рдирд┐рдХрд▓ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ myMixer рдХреЗ рд╕рд╛рде, рдЯреБрдХрдбрд╝рд╛ shader рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдЫрд╡рд┐

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

рдЫрд╡рд┐

рдкрд┐рдХреНрд╕рд▓ рдХреЗ рдХреЗрдВрджреНрд░реЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдЧрдгрдирд╛ рдХрд░рддреЗ рд╕рдордп рдХреНрдпрд╛ рд╣реЛрдЧрд╛?

рд╣рд░реЗ рдмрд┐рдВрджреБ рд╡реЗ рдмрд┐рдВрджреБ рд╣реИрдВ рдЬрд┐рди рдкрд░ рд╢реЗрдбрд░ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рдПрдЧреАред MyMixer рдХреЗ рд╕рдВрдмрджреНрдз рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рдХреЗрдВрджреНрд░рдХ рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИред

рдПрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХрд╛ рдХреЗрдиреНрджреНрд░рдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд╡рд░реНрдЧ рдХреЗ рдЪреМрд░рд╛рд╣реЗ рдФрд░ рдЖрджрд┐рдо рдХреЗ рдЖрдВрддрд░рд┐рдХ рднрд╛рдЧ рдХреЗ рдЧреБрд░реБрддреНрд╡рд╛рдХрд░реНрд╖рдг рдХрд╛ рдХреЗрдВрджреНрд░ рд╣реИред рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╡рд░ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП, рдХреЗрдиреНрджреНрд░рдХ рдХреЗрдВрджреНрд░ рд╣реИред рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдХрд╡рд░ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП, рдХреЗрдиреНрджреНрд░рдХ рдЖрдорддреМрд░ рдкрд░ рдХреЗрдВрджреНрд░ рд╕реЗ рдЕрд▓рдЧ рд╣реЛрддрд╛ рд╣реИред

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

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

рд╣рдореЗрд╢рд╛ рд╕реЗрдВрдЯреНрд░реЛ рд╢реЗрдбрд░ рдХреА рдЧрдгрдирд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ? рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рдХреЗрдВрджреНрд░ рдореЗрдВ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдорд╣рдВрдЧрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдореБрдЦреНрдп рдХрд╛рд░рдХ рдирд╣реАрдВ рд╣реИред

рдпрд╣ рд╕рдм рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдбреЗрд░рд┐рд╡реЗрдЯрд┐рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рд╣рд░реЗ рдбреЙрдЯреНрд╕ рдХреЗ рдмреАрдЪ рддреАрд░ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рд╡рд┐рднрд┐рдиреНрди рдпреБрдЧреНрдореЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, y dFdx рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реИ, рдФрд░ x dFdy рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реИред рд╕реЗрдВрдЯреАрд░реЛрдЗрдб рдореЗрдВ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдкрд░ рдбреЗрд░рд┐рд╡реЗрдЯрд┐рд╡ рдХрдо рд╕рдЯреАрдХ рд╣реЛрддреЗ рд╣реИрдВ ред

рдпрд╣ рдПрдХ рд╕рдордЭреМрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП OpenGL, GLSL 1.20 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░, shader рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдХреЗрдВрджреНрд░ рдФрд░ рдХреЗрдиреНрджреНрд░рдХ рдХреЗ рдмреАрдЪ рдХреЗрдиреНрджреНрд░рдХ рдЧреБрдгрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:

 centroid in float myMixer; //  centroid  smooth //      . //  sqrt    . void main( void ) { const vec3 blue = vec3( 0.0, 0.0, 1.0 ); const vec3 yellow = vec3( 1.0, 1.0, 0.0 ); float a = sqrt( myMixer ); //    myMixer < 0.0 vec3 color = mix( blue, yellow, a ); //   gl_FragColor = vec4( color, 1.0 ); } 

рдЖрдкрдХреЛ рд╕реЗрдВрдЯреНрд░реЛрдЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдм рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

  1. рдЬрдм рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдореВрд▓реНрдп рдореЗрдВ рдЕрд╕реНрдкрд╖реНрдЯ рдкрд░рд┐рдгрд╛рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди рджреЗрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╡рд░реНрдгрди "рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЕрдЧрд░ ..."
  2. рдЬрдм рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЧреИрд░-рд░реЗрдЦреАрдп рдпрд╛ рдмрдВрдж рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрдирдореЗрдВ рдЪрд░рдг рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рднрдбрд╝рдХрдирд╛ рдЧрдгрдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рдШрд╛рддрд╛рдВрдХ рдХрд╛рдлреА рдмрдбрд╝рд╛ рд╣реИред

рдЖрдкрдХреЛ рд╕реЗрдВрдЯреНрд░реЛрдЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдм рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

  1. рдпрджрд┐ рдЖрдкрдХреЛ рд╕рдЯреАрдХ рдбреЗрд░рд┐рд╡реЗрдЯрд┐рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдпрд╛ рддреЛ рд╕реНрдкрд╖реНрдЯ (dFdx рдХреЙрд▓) рдпрд╛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдордЖрдИрдкреА рд╕реНрддрд░реЛрдВ рдХреЗ рд╕рд╛рде рдмрдирд╛рд╡рдЯ рд╕реЗ рдпрд╛ рдЕрдиреАрд╕реЛрдЯреНрд░реЛрдкрд┐рдХ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдирдореВрдиреЗред рдЬреАрдПрд▓рдПрд╕рдПрд▓ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ, рд╕реЗрдВрдЯреНрд░реЛрдЗрдбреНрд╕ рдореЗрдВ рдбреЗрд░рд┐рд╡реЗрдЯрд┐рд╡ рдЗрддрдиреЗ рдмреЗрдХрд╛рд░ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:

     centroid in float myMixer; //  ! smooth in float myCenterMixer; //     . 

  2. рдпрджрд┐ рдПрдХ рдЧреНрд░рд┐рдб рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреА рд╕реАрдорд╛рдПрдВ рдЖрдВрддрд░рд┐рдХ рд╣реЛрддреА рд╣реИрдВ рдФрд░ рд╣рдореЗрд╢рд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрддреА рд╣реИрдВред рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг 100 рддреНрд░рд┐рдХреЛрдг (TRIANGLE_STRIP) рдХреА рдПрдХ рдкрдЯреНрдЯреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдФрд░ рдЕрдВрддрд┐рдо рддреНрд░рд┐рдХреЛрдг рд╣реА рдПрдХреНрд╕рдЯреНрд░рдкрд▓реЗрд╢рди рдХреЗ рдЕрдзреАрди рд╣реИрдВред рд╕реЗрдВрдЯреНрд░реЛрдЗрдб рдХреНрд╡рд╛рд▓рд┐рдлрд╛рдпрд░ рд╕рдЯреАрдХрддрд╛ рдФрд░ рд╕рдЯреАрдХрддрд╛ рдХреЗ рдиреБрдХрд╕рд╛рди рдХреА рдХреАрдордд рдкрд░ рдЗрди рджреЛ рддреНрд░рд┐рдХреЛрдгреЛрдВ рдкрд░ рдкреНрд░рдХреНрд╖реЗрдк рдХрд░реЗрдЧрд╛ рдФрд░ рд╢реЗрд╖ 98 рддреНрд░рд┐рдХреЛрдгреЛрдВ рдкрд░ рдирд┐рд░рдВрддрд░рддрд╛ рд╣реЛрдЧреАред
  3. рдпрджрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХрд▓рд╛рдХреГрддрд┐рдпрд╛рдБ рдПрдХ рдЕрдирд┐рд╢реНрдЪрд┐рдд, рдЕрд╢реБрдн рдпрд╛ рдЕрд╕рдВрддреЛрд╖рдЬрдирдХ рдХрд╛рд░реНрдп рд╕реЗ рдкреНрд░рдХрдЯ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдпреЗ рдХрд▓рд╛рдХреГрддрд┐рдпрд╛рдБ рд▓рдЧрднрдЧ рдЕрджреГрд╢реНрдп рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред рдпрджрд┐ рд╢реЗрдбрд░ рд╣рдорд▓рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рддреЛ рдЗрд╕реЗ рдареАрдХ рди рдХрд░реЗрдВ!

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


All Articles