рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ 3 рдбреА рдПрдХ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рд╣реБрдЖ рдХрд░рддреА рдереАред рдЙрдиреНрд╣реЛрдВрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рддреНрд░рд┐-рдЖрдпрд╛рдореА рдЧрддрд┐рд╢реАрд▓ рддреАрди-рдЖрдпрд╛рдореА рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛: SVG рдореЗрдВ рдЫрджреНрдо-3D рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдХреИрдирд╡рд╛рд╕ рдореЗрдВ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛, рдлреНрд▓реИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ ... рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкреНрд░рдЧрддрд┐ рдмрдВрдж рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ: рдЖрдЦрд┐рд░рдХрд╛рд░, рд╕рднреА рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ OpenGL (OpenGL ES) рдХреЗ рд╣рд▓реНрдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд▓рдЧреЗ 2.0) - рд╡реЗрдмрдЬреАрдПрд▓ред рдпрд╣ рдПрдХ рдпреБрд╡рд╛ рддрдХрдиреАрдХ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╡рд░реНрд╖ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдм рдЖрдк рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЧреЗрдо рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдЗрд╕рдХреА рд╢рдХреНрддрд┐ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рддрдХрдиреАрдХ рдХреЗ рддреБрд▓рдирд╛рддреНрдордХ рдпреБрд╡рд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг, рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрддрдиреЗ рд╕рд╛рд░реЗ рдореИрдиреБрдЕрд▓ рдирд╣реАрдВ рд╣реИрдВред рдЖрдк
рдпрд╣рд╛рдВ рдЙрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ (
рдпрд╣рд╛рдВ - рд░реВрд╕реА рдореЗрдВ рдЕрдиреБрд╡рд╛рдж)ред
рдпрд╣рд╛рдВ рдЖрдк рд╡реЗрдмрдЬреАрдПрд▓ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╕реАрдЦ рд╕рдХрддреЗ рд╣реИрдВред
WebGL рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдХрдИ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрднреА рднреА рдХрд╛рдлреА рдХрдЪреНрдЪреЗ рд╣реИрдВ)ред рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЖрд╡реЗрджрди -
рд╡реЗрдмрдЧреНрд▓реВ - рдПрдХ рдПрдХрд▓ рд╕реНрд░реЛрдд-рдЯреЙрд░реНрдЪ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдПрдХ рд╕рд╛рдзрд╛рд░рдг рджреГрд╢реНрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдпрд╣ рд▓реЗрдЦ рд╕рдорд░реНрдкрд┐рдд рд╣реИред
рдпрд╣рд╛рдВ рдЖрдк рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░
рдпрд╣рд╛рдВ рд╕реЗ рдЗрд╕реЗ рдЕрдкрдиреЗ рдорд╢реАрди рдкрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рд╕рдВрдЧреНрд░рд╣ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдУрдкрдирдЬреАрдПрд▓ рдФрд░ рд╡реЗрдмрдЬреАрдПрд▓ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд╛ рдереЛрдбрд╝рд╛ рдЕрдиреБрд╕реНрдорд╛рд░рдХред рдЪреВрдВрдХрд┐ WebGL GLES рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рддрдХрдиреАрдХ OpenGL рд╕реЗ рдХрд╛рдлреА рдиреАрдЪ рд╣реИ: рдЗрд╕рдореЗрдВ рдХрдИ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди (ARB, рдЖрджрд┐) рдирд╣реАрдВ рд╣реИрдВ, рдХреЛрдИ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рдХрд╛рд╢ рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ GL_QUADS рднреА рдЗрд╕рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ ... рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдк рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдХреЛрдИ рдФрд░ рдЕрдзрд┐рдХ рддрдХрдиреАрдХ рдирд╣реАрдВ, рдРрд╕рд╛ рдХреЛрдИ рднреА рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдерд░реНрдб-рдкрд╛рд░реНрдЯреА рдкреНрд▓рдЧ рдЗрди рдХреЗ рдмрд┐рдирд╛ рд╡реЗрдм рдкрд░ 3 рдбреА рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЕрдВрддрд┐рдо рдЫрд╡рд┐ рдореЗрдВ рдХреЛрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рдЙрдирдХреЗ рд░рдВрдЧ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддреНрд░рд┐-рдЖрдпрд╛рдореА рджреГрд╢реНрдпреЛрдВ рдХреЗ рд╕рд░рд▓ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде, рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЯреЗрдХреНрд╕ рдХреЗ рд▓рд┐рдП рд╢реЗрдбреНрд╕ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╡реЗ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рджреГрд╢реНрдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡реЗ рдмрдирд╛рд╡рдЯ рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рд╢реЗрдбреНрд╕ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрддреЗ рд╣реИрдВ, рдЬреЛ рдЕрдВрддрд┐рдо рджреГрд╢реНрдп рдмрдирд╛рддрд╛ рд╣реИ (рдПрдХ рдЙрджрд╛рд╣рд░рдг
рдпрд╣рд╛рдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред рд╢рд╛рдпрдж рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рддреАрди рдЖрдпрд╛рдореА рджреГрд╢реНрдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рдЗрд╕ рддрд░реАрдХреЗ рдкрд░ рд╕реНрдкрд░реНрд╢ рдХрд░реВрдВрдЧрд╛ред
WebGLU рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╕реНрдХреИрди рдХрд┐рдП рдЧрдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдФрд░ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рднреА рдкрдврд╝рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛рдлреА рдХрдЪреНрдЪрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдХреЛрдб рдореЗрдВ рдЦреБрджрд╛рдИ рдХрд░рдиреА рд╣реЛрдЧреАред
рдЗрд╕рд▓рд┐рдП, WebGLU рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ webglu.js рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдЗрд╕реЗ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
<script type="text/javascript" src="./src/webglu.js"></script> тАж $W.initialize();
$ W WebGLU рдирд╛рдорд╕реНрдерд╛рди рдХрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп рд╣реИред рд╣рдо рдЙрд╕рдХреЗ рд╕рд╛рде рдЬреНрдпрд╛рджрд╛рддрд░ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рд╡рд╕реНрддреБ $ G (GameGLU рдирд╛рдо рд╕реНрдерд╛рди) рд╣реИ, рдЬреЛ рдорд╛рдЙрд╕ рдФрд░ рдХреАрдмреЛрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреГрд╢реНрдп рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред WebGLU рдореЗрдВ рдХреБрдЫ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рднреА рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, CrazyGLU - рдкрд╕рдВрдж рдФрд░ рдХреБрдЫ рднреМрддрд┐рдХреА рдХреЗ рдЫрджреНрдо рдмрдлрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)ред рдЬрдм рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝рдВрдХреНрд╢рди рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╕рднреА рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЗрдВ WebGLU рджреНрд╡рд╛рд░рд╛ рд▓реЛрдб рдХреА рдЬрд╛рддреА рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
useControlProfiles();
рдлрд╝рдВрдХреНрд╢рди
useControlProfiles();
ControlProfiles.js рдлрд╝рд╛рдЗрд▓ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ), рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рд╡реЗрдмрдЧреНрд▓реВ .js рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
WebGLU рдХреЛ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рджреГрд╢реНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, WebGLU рдЗрдВрдЯрд░рдлрд╝реЗрд╕
$W.Object(type, flags)
рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ рдкреНрд░рдХрд╛рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдкреНрд░рдХрд╛рд░ (OpenGL рдХреЗ рд░реВрдк рдореЗрдВ) рд╣реИ:
- $ W.GL.POINTS - рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдмрд┐рдВрджреБ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ,
- $ W.GL.LINES - рдкреНрд░рддреНрдпреЗрдХ рдЬреЛрдбрд╝реА рдХрд╛ рдЬреЛрдбрд╝ 2n-1 рдФрд░ 2n рдПрдХ рд▓рд╛рдЗрди рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ,
- $ W.GL.LINE_LOOP - рд╕рднреА рдХреЛрдиреЗ рдкрд╣рд▓реЗ рд╢реАрд░реНрд╖ рдкрд░ рдмрдВрдж рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде рдЦрдВрдбреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХреНрд░рдо рдореЗрдВ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ,
- $ W.GL.LINE_STRIP - рд╕рднреА рдХреЛрдиреЗ рдмрд┐рдирд╛ рдмрдВрдж рдХрд┐рдП рдЦрдВрдбреЛрдВ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реИрдВ,
- $ W.GL.TRIANGLES - рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рддреНрд░рд┐рднреБрдЬ (рдХреНрд░рдо рдореЗрдВ) рдПрдХ рддреНрд░рд┐рднреБрдЬ рдмрдирд╛рддрд╛ рд╣реИ,
- $ W.GL.TRIANGLE_STRIP - рдХреЛрдиреЗ рддреНрд░рд┐рдХреЛрдг рдХреЗ рдХреНрд░рдо рдореЗрдВ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ,
- $ W.GL.TRIANGLE_FAN - рдХреЛрдиреЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп - рдкреНрд░рдердо - рд╢реАрд░реНрд╖ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рддреНрд░рд┐рдХреЛрдг рджреНрд╡рд╛рд░рд╛ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ;
рдЭрдВрдбреЗ - рд╡реИрдХрд▓реНрдкрд┐рдХ рдЭрдВрдбреЗ: рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╡реЗ
$W.RENDERABLE | $W.PICKABLE
$W.RENDERABLE | $W.PICKABLE
, рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рд╣рдо рдПрдХ рдРрд╕реА рд╡рд╕реНрддреБ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдХрд┐ рдПрдХ рдмрдЪреНрдЪрд╛ рд╣реИ, рддреЛ
$W.PICKABLE
рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ
$W.PICKABLE
рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рдмрд╕реЗ рд╕рд░рд▓ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рдВрдЧ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╢реЗрдбрд░ (рдЬреЛ рд╣рдо рдЖрдЧреЗ рдХрд░реЗрдВрдЧреЗ) рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВ, рдЬреЛ рд╣рдореЗрдВ рд╕рдВрдкреВрд░реНрдг рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд░рдВрдЧ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рдВрдЧ рд╕рдордиреНрд╡рдп рдЕрдХреНрд╖ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдпрд╣ рдХрд░реЗрдВрдЧреЗ:
var originLines = new $W.Object($W.GL.LINES); originLines.vertexCount = 6; originLines.fillArray("vertex", [[0,0,0], [3,0,0], [0,0,0], [0,3,0], [0,0,0], [0,0,3]]); with ($W.constants.colors){ originLines.fillArray("color", [ RED, RED, GREEN, GREEN, BLUE, BLUE]); }
рд╢реЗрдбрд░, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
- "рд╡рд░реНрдЯреЗрдХреНрд╕" - рдХреЛрдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ,
- "рд░рдВрдЧ" - рдХреЛрдиреЗ рдХреЗ рд░рдВрдЧ,
- "рд╕рд╛рдорд╛рдиреНрдп" - рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рдХреЗ рдорд╛рдирджрдВрдб,
- "рдЯреЗрдХреНрд╕рдХреЛрд░реНрдб" - рдЗрд╕ рд╢реАрд░реНрд╖ рдкрд░ рдмрдирд╛рд╡рдЯ рдХрд╛ рд╕рдордиреНрд╡рдп рд╣реИ,
- "Wglu_elements" - рд╢реАрд░реНрд╖ рд╕рдордиреНрд╡рдп рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ (рдЬрдЯрд┐рд▓ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП)ред
рдЕрдиреБрд░реВрдк (рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░), рд╢реЗрдбреНрд╕ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдЪрд░ рдирд╛рдо рджрд┐рдП рдЧрдП рд╣реИрдВ (рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдЫрд╛рдпрд╛ рдореЗрдВ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╢реАрд░реНрд╖ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд╛рд▓реЗ рдЪрд░ рд╡рд┐рд╢реЗрд╖рддрд╛
attribute
)ред
WebGL рд╕реЗ рдХрдиреЗрдХреНрдЯрд┐рдВрдЧ
Material
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реНрдХ JSON shader рд╡рд┐рд╡рд░рдг рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрде рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЗ рддрд╛рд░ рдЗрд╕ рддрд░рд╣ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ:
var lights = new $W.Material({path:$W.paths.materials + "light.json"});
Light.json рдлрд╝рд╛рдЗрд▓ рд╕реНрд╡рдпрдВ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:
{ name: "light", program: { name: "light", shaders: [ {name:"light_vs", path:$W.paths.shaders+"light.vert"}, {name:"light_fs", path:$W.paths.shaders+"light.frag"} ] } }
рдпрд╣рд╛рдБ рдирд╛рдо "рд╕рд╛рдордЧреНрд░реА" рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рдирд╛рдо рд╣реИ; рдХрд╛рд░реНрдпрдХреНрд░рдо тЖТ рдирд╛рдо - рдЬрд╛рд╣рд┐рд░ рддреМрд░ рдкрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдирд╛рдо рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ (рд╢рд╛рдпрдж WebGL рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдерд╛ рдХрд┐ рдХрдИ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рднреВрдорд┐рдХрд╛ рдирд╣реАрдВ рдирд┐рднрд╛рддрд╛ рд╣реИ); shaders - рдЙрдирдХреЗ рд▓рд┐рдП рдкрде рдХреЗ рд╕рдВрдХреЗрдд рдХреЗ рд╕рд╛рде shaders рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
рдЪрд░ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБ рдпрд╛ рд╕рдВрдкреВрд░реНрдг рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд▓рд┐рдП
uniform
(
uniform
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде
setUniformAction(n, f)
,
setUniformAction(n, f)
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ
setUniformAction(n, f)
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд░ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВред рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рддрд░реНрдХреЛрдВ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрд░реНрде рд╣реИрдВ: n - рдЫрд╛рдпрд╛ рдореЗрдВ рдЪрд░ рдХрд╛ рдирд╛рдо (рдпрд╣ рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ); f рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛
function(u, o, m)
, рдЬрд╣рд╛рдБ u рдПрдХрд░реВрдк () рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ, o рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реА рд╣реИ, m is the рдордЯреАрд░рд┐рдпрд▓ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд╕реНрддреБ рдХреЗ рд░рдВрдЧ рдХреЗ рд▓рд┐рдП "рд░рдВрдЧ" рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдмрдВрдзрди рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
lights.setUniformAction('color', function(uniform, object, material){ $W.GL.uniform4fv(uniform.location, object.color); });
рдЧреИрд░-рдорд╛рдирдХ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
setMaterial(mat)
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХрд╛
setMaterial(mat)
, рдЬрд╣рд╛рдВ рдореИрдЯ рд╡рд╣ рд╕рд╛рдордЧреНрд░реА рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЪреВрдВрдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдкрдХреЛ рдордХреНрдЦреА рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдЧреБрдг рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдмрджрд▓рд╛рд╡ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рд╣рдорд╛рд░реЗ рд╢реЗрдбреНрд╕ рдХреЗ рд╕рд╛рде рд╕рдордиреНрд╡рдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
WebGLU рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдЗрдП рдЗрд╕ рджреГрд╢реНрдп рдХреЛ рдмрдирд╛рдПрдВ:
рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣рд╛рдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдореБрдЦреНрдп рдКрд░реНрдзреНрд╡рд╛рдзрд░ рд╕рд┐рд▓реЗрдВрдбрд░ рджреВрд╕рд░реЗ рд╕рд┐рд▓реЗрдВрдбрд░ рдФрд░ рдКрдкрд░реА рд╕рд░реНрдХрд▓ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред рдмрджрд▓реЗ рдореЗрдВ, рджреЛ рд╕рд░реНрдХрд▓ рдХреЗ рдмреАрдЪ рд╡рд┐рдорд╛рди рдореЗрдВ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рд░рдЦреЗ рдЧрдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрдХрд╛рд░реЛрдВ рдХреЗ рдирд┐рдЪрд▓реЗ рд╕рд░реНрдХрд▓ рдФрд░ рдмрд╣реБ-рд░рдВрдЧреАрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ред рдкреВрд░реЗ рджреГрд╢реНрдп рдХреЛ рдПрдХ рджрд┐рд╢рд╛рддреНрдордХ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд (рдирд╛рд░рдВрдЧреА "рдЯреЙрд░реНрдЪ") рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдЫреЛрдЯреЗ рдирд╛рд░рдВрдЧреА рдХреНрд╖реЗрддреНрд░ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрди рд╕рднреА рд▓рдВрдмреЛрдВ рдХреЗ рдорд╛рдирджрдВрдбреЛрдВ рдХреА рд╕рд╣реА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ "рдЗрд▓реНрдпреВрдорд┐рдиреЗрдЯрд░" рд╢реЗрдб рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рд╣рдо
genSphere(n1,n2,rad)
рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ
genSphere(n1,n2,rad)
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЧреЛрд▓реЗ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рд╕реНрд╡рдпрдВ рд╕рд┐рд▓реЗрдВрдбрд░ рдЦреАрдВрдЪрдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╕рд┐рд▓реЗрдВрдбрд░ рдХреА рд╕рд╛рдЗрдб рд╕рддрд╣ рдХреЛ рдЬреБрдбрд╝реЗ рд╣реБрдП рддреНрд░рд┐рдХреЛрдгреЛрдВ рд╕реЗ рднрд░рдирд╛ рд╣реИ:
function drawCylinder(R, H, n, flags){ var v = [], norm = []; var C = new $W.Object($W.GL.TRIANGLE_STRIP, flags); C.vertexCount = n * 2+2; for(var i = -1; i < n; i++){ var a = _2PI/n*i; var cc = Math.cos(a), ss = Math.sin(a); v = v.concat([R*cc, R*ss,0.]); v = v.concat([R*cc, R*ss,H]); norm = norm.concat([-cc, -ss, 0.]); norm = norm.concat([-cc, -ss, 0.]); } C.fillArray("vertex", v); C.fillArray("normal", norm); return C; }
рдпрд╣ рд╡рд┐рдзрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдмрд╛рдж рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗ, рдмрд▓реНрдХрд┐ рдЖрджрд┐рдо рд╣реИ: рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рд╣рдо рд╕рд┐рд▓реЗрдВрдбрд░ рдХреА рд╕рддрд╣ рдкрд░ рдЗрд╕рдХреЗ рд╕рд┐рд░реЛрдВ рдХреЗ рдмреАрдЪ рдореЗрдВ рд╡рд░реНрдЯрд┐рдХрд▓ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд╢ рдХреА рдЧрдгрдирд╛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИ: рдпрджрд┐ "рджреАрдкрдХ" рд╕рд┐рд▓реЗрдВрдбрд░ рдХреА рд╕рддрд╣ рдХреЗ рдмреАрдЪ рдореЗрдВ рдХреЗрд╡рд▓ рд░реЛрд╢рдиреА рдбрд╛рд▓рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рд╕рд┐рд░реЛрдВ рдХреЛ рдкрдХрдбрд╝реЗ рдмрд┐рдирд╛ред рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рд╕рд┐рд▓реЗрдВрдбрд░ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдордзреНрдпрд╡рд░реНрддреА рдХреЛрдиреЗ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рддреНрд░рд┐рдХреЛрдг рдХреЗ рд╕рд╣реА рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдореЗрдВ рднрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдХрдИ рдЖрдпрддреЛрдВ рд╕реЗ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрдВрдкрд╛рдЙрдВрдб (рдмрдЪреНрдЪреЗ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде) рдЦреАрдВрдЪрдирд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рддреНрд░рд┐рдХреЛрдг рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИред
рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдордВрдбрд▓рд┐рдпрд╛рдВ рдмрдирд╛рдПрдВрдЧреЗ
function drawCircle(R, n, w, flags){ var v = []; var C = new $W.Object($W.GL.LINE_LOOP, flags); C.vertexCount = n; for(var i = 0; i < n; i++){ var a = _2PI/n*i; v = v.concat([R*Math.cos(a), R*Math.sin(a),0.]); } C.fillArray("vertex", v); if(typeof(w) != "undefined") C.WD = w; else C.WD = 1.; C.draw = function(){ // var oldw = $W.GL.getParameter($W.GL.LINE_WIDTH); $W.GL.lineWidth(this.WD); this.drawAt( this.animatedPosition().elements, this.animatedRotation().matrix(), this.animatedScale().elements ); $W.GL.lineWidth(oldw); }; return C; }
рд▓рд╛рдЗрдиреЛрдВ рдХреА рдореЛрдЯрд╛рдИ рдХреЛ рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рд▓рдХреЛрдВ рдХреЛ рдЦреАрдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдореЗрдВ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ
draw()
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА (рдЪреВрдВрдХрд┐ рдлрд╝рдВрдХреНрд╢рди
$W.GL.lineWidth(w)
рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рд▓рд╛рдЗрди рдХреА рдореЛрдЯрд╛рдИ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ - рдЬрдм рддрдХ рдХрд┐ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдЕрдЧрд▓реА рдХреЙрд▓ рдирд╣реАрдВ рд╣реЛрддреА)ред рдпрджрд┐ рдЖрдк
$W.GL.LINE_LOOP
рдХреЛ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП
$W.GL.POINTS
, рддреЛ рдордВрдбрд▓рд┐рдпреЛрдВ рдХреЛ рдбреЙрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдЦреАрдВрдЪ рд▓рд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЕрдВрдХ рдХрд╛ рдЖрдХрд╛рд░ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА
WD
рд╕рдВрдкрддреНрддрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧрд╛ рдХрд┐ рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП "рд╕рд╛рдордЧреНрд░реА" рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ
gl_PointSize = WD;
рдпрд╣рд╛рдВ рдЖрдк рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрдХрд╛рд░реЛрдВ рдХреЗ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреБрдХрдбрд╝рд╛ shader рдХреЛрдб рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░
рдпрд╣рд╛рдВ - рд╢реАрд░реНрд╖ shaderред
рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ред рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реЗрдб рдмрдирд╛рдиреЗ рдХреА рдмрд╛рд░реА рдереАред рдХрдИ рд╕реНрд░реЛрддреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдХрд┐рд╕реА рд╢реАрд░реНрд╖ рдХреЗ рдЕрдВрддрд┐рдо рд░рдВрдЧ рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА OpenGL рд╣реИрдВрдбрдмреБрдХ рдореЗрдВ, рдЖрдк рдирд┐рдореНрди рд╕реВрддреНрд░ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
result_Color = mat_emission + lmodel_ambient * mat_ambient Sum_i(D * S * [l_ambient * mat_ambient + max{dot(L,n),0}*l_diffuse*mat_diffuse + max{dot(s,n),0}^mat_shininess * l_specular * mat_specular )
рдпрд╣рд╛рдВ
- result_Color - рд╢реАрд░реНрд╖ рд░рдВрдЧ рдХрд╛ рдЕрдВрддрд┐рдо рд░рдВрдЧ,
- рдореИрдЯ_рдПрдХреНрд╕ - рд╕рд╛рдордЧреНрд░реА рдЧреБрдг,
- l_X - i-th рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЗ рдЧреБрдг
- рдПрдХреНрд╕:
- рдЙрддреНрд╕рд░реНрдЬрди - рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдкреНрд░рдХрд╛рд╢ (рдпрд╛рдиреА рд╕рд╛рдордЧреНрд░реА рдПрдХ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рд╣реИ),
- lmodel_ambient - рдкреНрд░рдХрд╛рд╢ рдореЙрдбрд▓ рдХрд╛ рдХреБрд▓ рдкрд░рд┐рд╡реЗрд╢реАрдп рдкреНрд░рдХрд╛рд╢ (рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░, рдпрд╛рдиреА рдпрд╣ рдкреГрд╖реНрдарднреВрдорд┐ рдкреНрд░рдХрд╛рд╢ рд╣реИ)
- рдкрд░рд┐рд╡реЗрд╢ - рдкреГрд╖реНрдарднреВрдорд┐ рдкреНрд░рдХрд╛рд╢ (рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рдмрд╛рд╣рд░ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рд░рдВрдЧ, рдЗрде рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЗ рд╡рд┐рд╕рд░рд┐рдд рдкреНрд░рдХрд╛рд╢ рдШрдЯрдХ)
- рдбреА - рдкреНрд░рдХрд╛рд╢ рдХреНрд╖реАрдгрди рдЧреБрдгрд╛рдВрдХ, рдбреА = 1 / (kc + kl * d + kq * d ^ 2),)
- d рд╕реНрд░реЛрдд рд╕реЗ рд╢рд┐рдЦрд░ рддрдХ рдХреА рджреВрд░реА рд╣реИ,
- рдХреЗрд╕реА - рдирд┐рд░рдВрддрд░ рдХреНрд╖реАрдгрди рдЧреБрдгрд╛рдВрдХ ("рдЧреНрд░реЗ рдлрд┐рд▓реНрдЯрд░"),
- kl рд░реИрдЦрд┐рдХ рдХреНрд╖реАрдгрди рдЧреБрдгрд╛рдВрдХ рд╣реИ,
- kq рджреНрд╡рд┐рдШрд╛рдд рдХреНрд╖реАрдгрди рдЧреБрдгрд╛рдВрдХ рд╣реИ,
- рдПрд╕ - рд╕реНрдкреЙрдЯрд▓рд╛рдЗрдЯ рдкреНрд░рднрд╛рд╡, рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдЧрдгрдирд╛:
= 1, рдЕрдЧрд░ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдПрдХ рд╕реНрдкреЙрдЯрд▓рд╛рдЗрдЯ рдирд╣реАрдВ рд╣реИ (рдЕрд╕реАрдо рд░реВрдк рд╕реЗ рджреВрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рдмреАрдо),
= 0, рдпрджрд┐ рд╕реНрд░реЛрдд рдПрдХ рд╕рд░реНрдЪрд▓рд╛рдЗрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рд╢реАрд░реНрд╖ рд╡рд┐рдХрд┐рд░рдг рд╡рд┐рдХрд┐рд░рдг рд╢рдВрдХреБ рдХреЗ рдмрд╛рд╣рд░ рд╣реИ,
= max {dot (v, dd), 0} ^ GL_SPOT_EXPONENT рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣рд╛рдБ v рд╕реНрдкреЙрдЯрд▓рд╛рдЗрдЯ (GL_POSITION) рд╕реЗ рд╡рд░реНрдЯреЗрдХреНрд╕ рддрдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╡реЗрдХреНрдЯрд░ рд╣реИ, dd (GL_SPOT_DIRECTION) рд╕реНрдкреЙрдЯрд▓рд╛рдЗрдЯ рдХрд╛ рдУрд░рд┐рдПрдВрдЯреЗрд╢рди рд╣реИред - L = -v (рд╢реАрд░реНрд╖ рд╕реЗ рд╕реНрд░реЛрдд рддрдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╡реЗрдХреНрдЯрд░),
- n рд╢реАрд░реНрд╖ рдкрд░ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ,
- рдлреИрд▓рд╛рдирд╛ - рд╡рд┐рд╕рд░рд┐рдд рдкреНрд░рдХрд╛рд╢, рдШрдЯрдирд╛ / рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рдХреЛрдг рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ,
- s рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╡реЗрдХреНрдЯрд░ рд╣реИ рдЬреЛ L рдХреЗ рдпреЛрдЧ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ рдФрд░ рд╡реЗрдХреНрдЯрд░ рд╢реАрд░реНрд╖ рд╕реЗ рдЖрдВрдЦ рддрдХ,
- рдЪрдордХ - рдЪрдордХ рдХреА рдбрд┐рдЧреНрд░реА (0 рд╕реЗ 128 рддрдХ, рдФрд░ рдЕрдзрд┐рдХ, "рдЪрдордХрджрд╛рд░" рд╕рддрд╣ рд╣реИ)
- рд╕реНрдкреЗрдХреНрдпреБрд▓рд░ - рджрд░реНрдкрдг рдШрдЯрдХ рдХрд╛ рд░рдВрдЧред
рд╣рдо рдЗрд╕ рд╕реВрддреНрд░ рдХреЛ рд╕рд░рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рд╣рдо рдЗрд╕ рддрдереНрдп рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдорддреМрд░ рдкрд░ рд╕рд╛рдордЧреНрд░реА рдореИрдЪ рдХреЗ рдлреИрд▓рд╛рдирд╛ рдФрд░ рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рд░рдВрдЧ, рд╕реНрдкреЙрдЯрд▓рд╛рдЗрдЯ рдХрд╛ рдкреГрд╖реНрдарднреВрдорд┐ рд░рдВрдЧ рд╕рд╛рдорд╛рдиреНрдп рдкреГрд╖реНрдарднреВрдорд┐ рдкреНрд░рдХрд╛рд╢ рдХреЗ рдлреИрд▓рдиреЗ рд╡рд╛рд▓реЗ рд░рдВрдЧ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рдФрд░ рдирд┐рд░рдВрддрд░ рдФрд░ рд░реИрдЦрд┐рдХ рдХреНрд╖реАрдгрди рдЧреБрдгрд╛рдВрдХ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдирддреАрдЬрддрди, рд╣рдо рдЗрд╕
рддрд░рд╣ рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ shader рдорд┐рд▓рддрд╛ рд╣реИред рд╡рд░реНрдЯреЗрдХреНрд╕ рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд░реНрдЯреЗрдХреНрд╕
рд╢реЗрдбрд░ рдХреЛ рдкреБрдирд░реНрдЧрдгрдирд╛ рднреА рдХрд░рдиреА рд╣реЛрдЧреА, рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЙрдбрд▓-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕реНрдкреЗрд╕ рдореЗрдВ рд╡рд░реНрдЯреЗрдХреНрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рдЙрд╕рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдХреЗ рдЕрднрд┐рд╡рд┐рдиреНрдпрд╛рд╕ (рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд, рд╕реНрдХреЗрд▓ рдФрд░ рдШреБрдорд╛ рд╕рдХрддреЗ рд╣реИрдВ)ред
рдЕрдм рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ "рдЯреЙрд░реНрдЪ" рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ:
light = { position: [0.,2.,1.5], target: [0.,0.,-2.], color: [1.,.5,0.,1.], fieldAngle: 60., exponent: 5., distanceFalloffRatio: .02 };
setUniformAction(тАж)
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ
setUniformAction(тАж)
"рд▓рд╛рд▓рдЯреЗрди" рдЧреБрдгреЛрдВ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдЧреБрдгреЛрдВ рдХреЛ shader рдЪрд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдмрджреНрдз рдХрд░реЗрдВ рдФрд░ рдЗрд╕ "рд╕рд╛рдордЧреНрд░реА" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЧреБрдг рд╕реЗрдЯ рдХрд░реЗрдВред
рд╣рдо рдпрд╣ рд╕рдм рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж,
$W.start(T);
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреГрд╢реНрдп рдХреЛ рдЪреЗрддрди рдХрд░рддреЗ рд╣реИрдВ
$W.start(T);
рдЬрд╣рд╛рдВ T рджреГрд╢реНрдп рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рдмреАрдЪ рдиреНрдпреВрдирддрдо рдЕрдВрддрд░рд╛рд▓ рд╣реИред рдпрджрд┐ рд╣рдорд╛рд░рд╛ рджреГрд╢реНрдп рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИ, рддреЛ рд╣рдореЗрдВ
$W.util.defaultUpdate();
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдЦреАрдВрдЪрдирд╛ рд╣реЛрдЧрд╛
$W.util.defaultUpdate();
рдФрд░
$W.util.defaultDraw();
ред рдпреЗ рдлрд╝рдВрдХреНрд╢рди рд╢реЗрдбреНрд╕ рдХреЗ рд╕рдВрдХрд▓рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ (рдЬреЛ рдХрд┐ рдЦреБрдж рд╣реА рд╢реЗрдбреНрд╕ рдореЗрдВ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдмрджрд▓рд╛рд╡ рдХрд░рддреЗ рд╣реБрдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП), рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рджреГрд╢реНрдп рдХреЗрд╡рд▓ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рд╕рдордп (рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рджреМрд░рд╛рди) "рдлреНрд░реАрдЬ" рдХрд░реЗрдЧрд╛, рдФрд░ рдЦрд┐рдбрд╝рдХреА рдХреЗ рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рдкрд░ рдереЛрдбрд╝рд╛ рдзреАрдорд╛ рднреА рд╣реЛрдЧрд╛ред
рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рд╡реЗрдмрдЧреНрд▓реВ рд╕реЗ рджреГрд╢реНрдп рдХреЛ рдШреБрдорд╛рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп (рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдХреИрдорд░реЗ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдШреВрдордирд╛) рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣рд╛рдВ (рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╕рдВрдХреЗрддрд┐рдд рдЙрджрд╛рд╣рд░рдг рдкрддреЗ рдкрд░ рднреА) рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдВрддрд┐рдо рдПрдЪрдЯреАрдПрдордПрд▓-рдлрд╛рдЗрд▓ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред
рдпрд╣ рд▓реЗрдЦ рдХрд╛рдлреА рдмрдбрд╝рд╛ рдирд┐рдХрд▓рд╛, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдореИрдВрдиреЗ рдЪрдпрди рдмрдлрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ (рдпрджрд┐ рд╣рдореЗрдВ рдорд╛рдЙрд╕ рдХреНрд▓рд┐рдХ рдХреЗ рд╕рд╛рде рд╡рд╕реНрддреБрдУрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ), рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдорд┐рд▓рд╛рддреЗ рд╕рдордп рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ (рдЬреЛ рд╡рд╕реНрддреБ рдХреЗ рд░рдВрдЧ рдореЗрдВ рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ), рдФрд░ "рдмреИрдХ" рдХреЛ рдХреНрд▓рд┐рдк рдХрд░рдирд╛ред рд╕рддрд╣ рдХреЗ рдЖрдХрд╛рд░ рдФрд░ рдмрд╣реБрдд рдХреБрдЫред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ WebGL рдкрд░ рдореЗрд░рд╛ рдпрд╣ рд▓реЗрдЦ рдЕрдВрддрд┐рдо рдирд╣реАрдВ рд╣реИ (рдпрд╛ рд╢рд╛рдпрдж рдХреЛрдИ рдФрд░ рдореЗрд░рд╛ рдЙрдкрдХреНрд░рдо рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛)ред
UPD: рдПрдХ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ getObjectIDAt рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдкрд╛рдЧрд▓реЛрдВ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпреЗ рдкреНрд░рдпрд╛рд╕ рдЕрд╕рдлрд▓ рд░рд╣реЗ: рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирдо рд╣реИред рдЗрд╕рд▓рд┐рдП, рдлрд╝рдВрдХреНрд╢рди рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред
рддреЛ, рдЪрдпрди рдмрдлрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо
$W.start(p)
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ рд╣рдо рдЪрдпрди рдмрдлрд░ рдкрд░ рд▓рд┐рдЦрддреЗ рд╕рдордп рдПрдХ рдЯрд╛рдЗрдорд░ рдЫрд╡рд┐ рдЕрдкрдбреЗрдЯ рдХреЗ "рд░рдирд┐рдВрдЧ рдЗрди" рдХрд╛ рдЬреЛрдЦрд┐рдо рдЪрд▓рд╛рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рд╕реНрд╡рдпрдВ рдЗрд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рдж рджреГрд╢реНрдп рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред
рджреВрд╕рд░реЗ, рд╣рдореЗрдВ рдЪрдпрди рдмрдлрд░ рдХреЗ рд▓рд┐рдП "рд╡реИрд╢реНрд╡рд┐рдХ рд╕рд╛рдордЧреНрд░реА" (
MatPick
) рдмрдирд╛рдиреЗ рдФрд░ рдЗрд╕реЗ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдмрдлрд░ рдХреЛ рднреА рдЖрд░рдВрдн рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
// "" MatPick = new $W.Material({path:$W.paths.materials + "pick.json"}); MatPick.setUniformAction('pickColor', function(uniform, object, material){ var colr = [0.,0.,0.,0.]; var id = object.id; for(var i = 0; i < 4; i++){ colr[i] = (id & 0xff)/256.; id >>= 8; } $W.GL.uniform4fv(uniform.location, colr); } ); // try{ $W.pickBuffer = new $W.Framebuffer(); $W.pickBuffer.attachTexture($W.GL.RGBA, $W.canvas.width, $W.canvas.height, $W.GL.COLOR_ATTACHMENT0); $W.pickBuffer.attachRenderbuffer($W.GL.DEPTH_COMPONENT16, $W.canvas.width, $W.canvas.height, $W.GL.DEPTH_ATTACHMENT); }catch (e) { console.error(e); }
рд╣рдо рдорд╛рдирдХ рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡рд┐рдХрд▓реНрдк рдмрдирд╛рддреЗ рд╣реИрдВ: рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдЗрдбреЗрдВрдЯрд┐рдлрд╝рд╛рдпрд░ (рдПрдХ 32-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ, рдЕрдзрд┐рдорд╛рдирддрдГ рд╕рдХрд╛рд░рд╛рддреНрдордХ, рдирдХрд╛рд░рд╛рддреНрдордХ, рд▓реЗрдХрд┐рди -1 рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ) рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдирдВрдмрд░ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреЗ рд╣реИрдВ - рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд░рдВрдЧ рдШрдЯрдХред рдлреНрд▓реЛрдЯ рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ рдХрд┐ рд░рд╛рдЙрдВрдбрд┐рдВрдЧ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ (рдЬрдм рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ ┬▒ 1 рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛ред рдЪрдпрди рдмрдлрд╝рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реЗрдбреНрд╕ рдЗрддрдиреЗ рд╕рд░рд▓ рд╣реИрдВ рдХрд┐ рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдпрд╣рд╛рдВ рднреА рдирд╣реАрдВ рджрд┐рдпрд╛ред
рддреАрд╕рд░рд╛, рдЖрдкрдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдХреЛрдб (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП), рд╕рд╛рде рд╣реА Util.js (рд╕реНрдХреНрд░реАрди рдкрд░ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдбреНрд░рд╛рдЗрдВрдЧ рдмрдлрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдиреНрдпрдерд╛ рд╡рд┐рдХрд▓реНрдк рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛) рдХреЗ рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ рдЪрдпрди рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдЪрдпрди рдмрдлрд░ рдореЗрдВ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдЧрд╛ рдФрд░ рдХрд░реНрд╕рд░ рдХреЗ рдиреАрдЪреЗ рд░рдВрдЧ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЙрдирдХреА "рд╕рд╛рдордЧреНрд░реА" рдХреЛ
oldmat
рд╕рд░рдгреА рдореЗрдВ
oldmat
, рдФрд░ рдЬрдм рдЪрдпрди рдмрдлрд░ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рддреЛ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд╕рднреА "рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ" рдХреЛ рд╣рдорд╛рд░реЗ
MatPick
рдмрджрд▓
MatPick
, рдмрдлрд░ рднрд░реЗрдВ рдФрд░ рд╕рд╣реА рдмрд┐рдВрджреБ рдкрд░ рд░рдВрдЧ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд░рдВрдЧ рдореВрд▓реНрдп рд╕реЗ, рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ (рдпрд╛ рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐, рдЕрдЧрд░ рдЖрдИрдбреА == - 1) рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
function pick(X,Y){ // var ccolr = $W.GL.getParameter($W.GL.COLOR_CLEAR_VALUE); var blend = $W.GL.getParameter($W.GL.BLEND); if(blend) $W.GL.disable($W.GL.BLEND); $W.GL.clearColor(1., 1., 1., 1.); // "-1" $W.pickBuffer.bind(); // "" $W.util.defaultUpdate(); $W.util.clear(); $W.util.setupMatrices(); for (var i = 0; i < $W.objects.length; i++) { $W.objects[i].material = MatPick; // "" } $W.util.defaultDraw(); // for (var i = 0; i < $W.objects.length; i++) { $W.objects[i].material = oldmat[i]; // "" } var pix = new Uint8Array(4); $W.GL.readPixels(X,$W.canvas.height-Y,1,1,$W.GL.RGBA, $W.GL.UNSIGNED_BYTE, pix); $W.pickBuffer.unbind(); // if(blend) $W.GL.enable($W.GL.BLEND); $W.GL.clearColor(ccolr[0],ccolr[1],ccolr[2],ccolr[3]); var id = pix[0]+(pix[1]<<8)+(pix[2]<<16)+(pix[3]<<24); delete pix; var str = "X=" + X + ", Y=" + Y+ ", ID="+id; alert(str); } </code> <br><br> : . <br><br> : google-chrome ( ).