GLSL рдореЗрдВ рдЦреЗрд▓ "рдЬреАрд╡рди" рдХреЗ рдПрдореБрд▓реЗрдЯрд░

рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЫреЛрдЯрд╛ рд╢реИрдХреНрд╖рд┐рдХ рдХрд╛рд░реНрдпрдХреНрд░рдо: рдПрдХ , рджреЛ , рддреАрди ред



рд╢рд╛рдпрдж, рдореЗрд░реЗ рдЬреАрд╡рди рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдмрд╛рд░ рдЦреЗрд▓ "рдЬреАрд╡рди" рдХрд╛ рдПрдХ рдПрдореБрд▓реЗрдЯрд░ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред

рд╢рд╛рдпрдж рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╢рд╛рдпрдж рдордЬрд╝реЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ...

рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрдИ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рднрд╛рд╖рд╛ рдХреЛ рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдЕрднреНрдпрд╛рд╕ рд╣реИред



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

рд╣рдо рдХреНрд░рдорд╢рдГ рдУрдкрди, рд╢реЗрдб рдХреА рднрд╛рд╖рд╛ - рдЬреАрдПрд▓рдПрд╕рдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо C ++ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛



рдкрд░рд┐рдЪрдп



рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдпрд╛рдж рдХрд░реЗрдВ рдХрд┐ рдЗрд╕ рдЦреЗрд▓ рдореЗрдВ "рдкреАрдврд╝реАрдЧрдд рдкрд░рд┐рд╡рд░реНрддрди" рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИред

рдкреНрд░рддреНрдпреЗрдХ рдХреЛрд╢рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕рдХреЗ рдЬреАрд╡рд┐рдд рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред рдпрджрд┐ рдпрд╣ 3 рд╣реИ рдФрд░ рдореВрд▓ рд╕реЗрд▓ рдЦрд╛рд▓реА рд╣реИ, рддреЛ рд╕реЗрд▓ рдЬреАрд╡рди рдореЗрдВ рдЖрддрд╛ рд╣реИред рдпрджрд┐ рдореВрд▓ рдХреЛрд╢рд┐рдХрд╛ рдЬреАрд╡рд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ 2 рдпрд╛ 3 рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдорд░ рдЬрд╛рддрд╛ рд╣реИред

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



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

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

рдЗрд╕рд▓рд┐рдП, рд╣рдо рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рдФрд░ рд╣рдо рдПрдХ рд╕рд░рд▓ рд╡рд┐рдХрд▓реНрдк рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдЕрднреА рдмрд╣реБрдд рд╕рд╛рд░реА рд╡реАрдбрд┐рдпреЛ рдореЗрдореЛрд░реА рд╣реИ :)



рдкреНрд░рд╛рд░рдВрдн



рдлрд╝реНрд░реЗрдордмрдлрд╝рд░ рдФрд░ рдмрдирд╛рд╡рдЯ рдирд┐рд░реНрдорд╛рдг


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рджреЛ рдлреНрд░реЗрдордмрдлрд╝рд░ рдмрдирд╛рдПрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдмрдирд╛рд╡рдЯ рдЬреЛрдбрд╝реЗрдВред

рдПрдХрд▓ рдмрдлрд╝рд░ рдЖрд░рдВрднреАрдХрд░рдг рдХреЛрдб:



glGenFramebuffersEXT(1,&FrameBufferID);

glGenTextures(1,?ColorBufferID);

glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, FrameBufferID );

glBindTexture(GL_TEXTURE_2D,ColorBufferID);

glTexImage2D(GL_TEXTURE_2D,0,4,SizeX,SizeY,0,RGBA,GL_UNSIGNED_BYTE,0);

glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT,GL_COLOR_ATTACHMENT0_EXT,GL_TEXTURE_2D,ColorBufferID,0);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

glBindTexture(GL_TEXTURE_2D,0);

glDisable(GL_DEPTH_TEST);

glEnable(GL_TEXTURE_2D);

glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);









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

рдирд┐рдореНрди glFramebufferTexture2DEXT рдлрд╝рдВрдХреНрд╢рди рдлрд╝реНрд░реЗрдордмрдлрд╝рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдирд╛рд╡рдЯ рджреЗрддрд╛ рд╣реИред

рдЕрдЧрд▓рд╛, рд╣рдо рдмрдирд╛рд╡рдЯ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ - рдкрдбрд╝реЛрд╕реА рдмрдирд╛рд╡рдЯ рдХреЗ рдкрд┐рдХреНрд╕рд▓ рд╕реЗ рдкрдврд╝рддреЗ рд╕рдордп рд╢реЗрдбрд░ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдХрдЯрддрдо рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧред



рд╕реАрдорд┐рдд рдХреНрд╖реЗрддреНрд░


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

рдпрд╣рд╛рдВ, GL_REPEAT рд╣рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХреА рдРрд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛ рджреЗрддрд╛ рд╣реИ - рдЬрдм рдЖрдк рдХрд┐рд╕реА рдмрдирд╛рд╡рдЯ рд╕реЗ рдкрдврд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХреЗ рдХрд┐рдирд╛рд░реЗ рдХреЗ рдмрд╛рд╣рд░ рдХрд╛ рдореВрд▓реНрдп рджреВрд╕рд░реЗ рд╣рд╛рде рдкрд░ рдПрдХ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ - рдЕрд░реНрдерд╛рдд рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдПред



рдХреНрд╖реЗрддреНрд░ рдХреА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХрд╛ рд╕рдВрдкрд╛рджрди


GlTexSubImage2D рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рдмрдирд╛рд╡рдЯ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╕реЗрд▓ "рдЬреАрд╡рд┐рдд" рд╣реИ, рддреЛ рд╕рднреА RGBA рдШрдЯрдХ 255 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдВрдЧреЗ, рдЕрдиреНрдпрдерд╛ рд╡реЗ рд╕рднреА 0 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИрдВред

рдлрд┐рд░ рдХреЛрдб рдПрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдмрдирд╛рд╡рдЯ рдмрджрд▓рддрд╛ рд╣реИ:



unsigned char buf[4]={val,val,val,val}; // val is 0 or 255

glBindTexture(GL_TEXTURE_2D,ColorBufferID);

glTexSubImage2D(GL_TEXTURE_2D,0,x,y,1,1,GL_RGBA,GL_UNSIGNED_BYTE,buf);

glBindTexture(GL_TEXTURE_2D,0);









рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ shaders


рдореИрдВ рдпрд╣рд╛рдБ shader рд▓реЛрдбрд┐рдВрдЧ рдХреЛрдб рдирд╣реАрдВ рджреВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рднрд░реА рд╣реБрдИ рд╣реИрдВред

рдЖрдк рдпрд╣рд╛рдВ рд╢реЗрдбреНрд╕ рдФрд░ рдлреНрд░реЗрдордмрдлрд░реНрд╕ тАЛтАЛрдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ ред



рдореБрдЦреНрдп рд╢рд░реАрд░



рдЕрд╕рд▓ рдореЗрдВ, рдЬреЛ рдХреБрдЫ рднреА рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдЙрд╕рдХреЗ рд▓рд┐рдПред

рдпрд╣рд╛рдВ, рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рдПрдХ рдмрдирд╛рд╡рдЯ рдХреЛ рдПрдХ рдПрдХрд▓ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдкрд╛рд╕ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рддрджрдиреБрд╕рд╛рд░, рдЖрдкрдХреЛ рдмрд╛рд░реА-рдмрд╛рд░реА рд╕реЗ рджреЛ рдмрдлрд╝рд░реНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рд╣рдо рдПрдХ рд╕реЗ рдкрдврд╝рддреЗ рд╣реИрдВ, рд╣рдо рджреВрд╕рд░реЗ рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВред



glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, FrameBufferID );

glUseProgram ( ProgramObject );

float szx=sizex;

float szy=sizey;

glUniform1f( glGetUniformLocation (ProgramObject, "SizeX" ) , szx);

glUniform1f( glGetUniformLocation (ProgramObject, "SizeY" ) , szy);



glBindTexture(GL_TEXTURE_2D,ColorTextureID_2); //

glUniform1i( glGetUniformLocation (ProgramObject, "SourceTexture" ) , 0);



glViewport(0, 0, szx,szy);



glMatrixMode ( GL_PROJECTION );

glLoadIdentity ();

glOrtho ( 0, width, 0, height, -1, 1 );

glMatrixMode ( GL_MODELVIEW );

glLoadIdentity ();

DrawQuad(0,0,szx,szy,-1.0);



glBindTexture(GL_TEXTURE_2D,0);



glUseProgram ( 0 );

glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0 );









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



void DrawQuad (float x,float y, float w, float h ,float z)

{

glBegin ( GL_QUADS );

glTexCoord2f ( 0, 0 );

glVertex3f ( x, y ,z);



glTexCoord2f ( 1, 0 );

glVertex3f ( x+w, y ,z);



glTexCoord2f ( 1, 1 );

glVertex3f ( x+w, y+h ,z);



glTexCoord2f ( 0, 1 );

glVertex3f ( x, y+h ,z);

glEnd ();

}









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



рдФрд░ рд╣рд╛рдВ, shader рдХреЛрдб!





рд╣рдо рд╢реАрд░реНрд╖ рдХреЗ рд╢реЗрдбрд░ рдореЗрдВ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рд╢реАрд░реНрд╖ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

void main(void)

{

gl_Position=ftransform(); //

gl_TexCoord[0] = gl_MultiTexCoord0; //

}









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

uniform sampler2D SourceTexture;



uniform float SizeX;

uniform float SizeY;



void main(void)

{

float deltax = 1.0/SizeX;

float deltay = 1.0/SizeY;

float Sum = texture2D(SourceTexture,gl_TexCoord[0].st+vec2( deltax, deltay)).r +

texture2D(SourceTexture,gl_TexCoord[0].st+vec2(-deltax, deltay)).r +

texture2D(SourceTexture,gl_TexCoord[0].st+vec2(-deltax,-deltay)).r +

texture2D(SourceTexture,gl_TexCoord[0].st+vec2( deltax,-deltay)).r +

texture2D(SourceTexture,gl_TexCoord[0].st+vec2( 0, deltay)).r +

texture2D(SourceTexture,gl_TexCoord[0].st+vec2( 0,-deltay)).r +

texture2D(SourceTexture,gl_TexCoord[0].st+vec2(-deltax, 0)).r +

texture2D(SourceTexture,gl_TexCoord[0].st+vec2( deltax, 0)).r ;

float center =texture2D(SourceTexture,gl_TexCoord[0].st).r;

float koef=0.0;



if(center>0.5) // - , ,

{

if(Sum>3.5 || Sum<1.5)koef=0.0;else koef=1.0; // ,

}

else

{

if(Sum>2.5 && Sum<3.5)koef=1.0; // Sum==3,

}

gl_FragColor=vec4(1.0,1.0,1.0,1.0)*koef;

}









рд╕реНрд░реЛрдд рдХреЛрдб



рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗрд╡рд▓ рд▓рд┐рдирдХреНрд╕ (рдЙрдмрдВрдЯреВ 10.10) рдХреЗ рддрд╣рдд рд▓рд┐рдЦрд╛ рдФрд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

SDL рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ OpenGL рд╕рдВрджрд░реНрдн рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рддреЛ, рдЖрдк рд╢рд╛рдпрдж рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рд╕рдВрдХрд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдЧрд░ рдХреЛрдИ рдЗрдХрдЯреНрдард╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ рдХрд╣реАрдВ рдмрд╛рд╣рд░ рд░рдЦрддрд╛ рд╣реИ - рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред

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



narod.ru/disk/2930622001/LifeSim.zip.html



All Articles