
2 рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ рдореИрдВрдиреЗ GitHub рдкрд░
WebQuake рдХрд╛ рдкрд╣рд▓рд╛ рдмреАрдЯрд╛ рдмрд┐рд▓реНрдб рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдерд╛ - WebGL рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдкрд╣рд▓реЗ Quake рдХрд╛ рдкреЛрд░реНрдЯред
рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдЗрдВрдЬрди рдХреЗ рд╡рд┐рдХрд╛рд╕ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛: рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреИрд╕реЗ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдзреНрд╡рдирд┐ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рдЗрддреНрдпрд╛рджрд┐ред
рдпрд╣ рд╕рдм рдХреИрд╕реЗ рд╢реБрд░реВ рд╣реБрдЖ
рдореИрдВрдиреЗ рд╕рд┐рддрдВрдмрд░ 2012 рдореЗрдВ рдЕрдкрдиреЗ рд╡рд░реНрддрдорд╛рди рд╕реНрд╡рд░реВрдк рдореЗрдВ WebQuake рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рд╡рд┐рдЪрд╛рд░ рдореБрдЭреЗ рдЙрд╕рд╕реЗ рдмрд╣реБрдд рдкрд╣рд▓реЗ рдЖрдпрд╛ рдерд╛ред
рдкрд╣рд▓реА рдмрд╛рд░ рдореИрдВрдиреЗ 2011 рдХреА рдЧрд░реНрдорд┐рдпреЛрдВ рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рд╣реА рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬрдм рдореИрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ред рдлрд┐рд░ рдореИрдВрдиреЗ рдХреНрд╡реЗрдХ рдХреЛрдб рдХреЛ рджреЗрдЦреЗ рдмрд┐рдирд╛ рдкреЛрд░реНрдЯ рдХреЛ "рдЖрдВрдЦ рд╕реЗ" рдмрдирд╛рдпрд╛, рдФрд░ рдЦреЗрд▓ рдореЗрдиреВ рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рдЫреЛрдЯрд╛ рдЯреБрдХрдбрд╝рд╛ рдмрдирд╛рдпрд╛ред рдЙрд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдореИрдВрдиреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ (рдФрд░ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдирдВрдмрд░реЛрдВ рдХреЗ рдкрд╛рд░реНрд╕рд░ рдореЗрдВ рдореИрдВрдиреЗ рдЖрдорддреМрд░ рдкрд░ Math.pow рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдФрд░ рдмрд┐рдЯреНрд╕ рдХреЛ 0 рдФрд░ 1 рдХреЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рд╣реИ)ред рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рд╡реЗрдмрдЬреАрдПрд▓ рдореЗрдВ рдмрдлрд╝рд░реНрд╕ рдФрд░ рд╢реЗрдбреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреГрддрд┐ рдХреА рд╕рдордЭ рдХреА рдХрдореА рдиреЗ рджреБрдирд┐рдпрд╛ рдХреЛ рдЗрд╕ рддрд░рд╣ рдХреА рдЙрд▓реНрдЯреА рд╕реЗ рдмрдЪрд╛рдпрд╛ред
рдлрд┐рд░, рдлрд╝рд╛рдЗрд▓реЛрдВ рддрдХ рд╕реАрдзреА рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╡реЗрдмрдХреЗрдХ рдХреЛ рдПрдХ рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдЙрдиреНрд╣реЛрдВрдиреЗ HTA рдФрд░ XUL рдХреЗ рдмреАрдЪ рдЪрдпрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рднреА WebGL рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рднреА рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ред
рдореИрдВрдиреЗ рд╢реБрджреНрдз HTML5 рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ред
рдбрд┐рдЬрд╝рд╛рдЗрди
рд╢реБрд░реБрдЖрдд рд╕реЗ рдкрд╣рд▓реЗ рдмреАрдЯрд╛ рддрдХ 6 рдорд╣реАрдиреЗ рдмреАрдд рдЪреБрдХреЗ рд╣реИрдВред рдпрджрд┐ рдореЗрд░реА рдореЗрдореЛрд░реА рдореБрдЭреЗ рд╕рд╣реА рд╕реЗрд╡рд╛ рджреЗрддреА рд╣реИ, рддреЛ
GWT Quake 2 рдХреЛ рдмрдирд╛рдиреЗ рдореЗрдВ Google рдХреЛ 2 рдорд╣реАрдиреЗ рд▓рдЧреЗ, рд▓реЗрдХрд┐рди Google рдиреЗ рдЙрди рддреАрдиреЛрдВ рдХреЛ рдХрд┐рдпрд╛ рдФрд░ Jake2 рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдирдХрд╛ рдПрдХ рдЖрдзрд╛рд░ рдерд╛, рдФрд░ рдореИрдВрдиреЗ рд╕рднреА рдХреЛрдб рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреЙрдкреА рдХрд┐рдПред
рдореИрдиреБрдЕрд▓ рд░реАрд░рд╛рдЗрдЯрд┐рдВрдЧ рдХреЛ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдореЗрд░реЗ рд▓рд┐рдП рдЗрдВрдЬрди рдХреЛ рдкреВрд░реЗ рдЗрдВрдЬрди рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЗрдВрдЬрди рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХреБрдЫ рдХреНрд╖реЗрддреНрд░ (рдЬреИрд╕реЗ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕) рдореВрд▓ рдХреНрд╡реИрдХ рдХреА рддрд░рд╣ рдХрд╛рдо рди рдХрд░реЗрдВред
рд▓реЗрдХрд┐рди рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдиреБрдХрд╕рд╛рди рднреА рд╣реИрдВред рдХрднреА-рдХрднреА рдореБрдЭреЗ рдЯрд╛рдЗрдкреЛ рдорд┐рд▓рддрд╛ рдерд╛, рдФрд░ рдЧрд▓рдд рдСрдкрд░реЗрдЯрд░ рдХреЗ рдХрд╛рд░рдг рдореИрдВ рдЗрд╕реЗ рджреЛ рдмрд╛рд░ рдорд┐рд▓рд╛ (рдкрд╣рд▓реА рдмрд╛рд░ рдЬрдм рдореИрдВ рджреАрд╡рд╛рд░реЛрдВ рдХреА рддрд░рдл рдПрдХ рдЙрдиреНрдорддреНрдд рдЧрддрд┐ рд╕реЗ рдлрд┐рд╕рд▓ рд░рд╣рд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ & # рдХреЗ рдмрдЬрд╛рдп, рдФрд░ рджреВрд╕рд░рд╛, рдиреЗрдЯрд╡рд░реНрдХ рдЧреЗрдо рдореЗрдВ рднрдпрд╛рдирдХ рдЯреНрд╡рд┐рдЪреЗрдЬ рдереЗ! = = рдХреЗ рдмрдЬрд╛рдп !!) , рдореБрдЭреЗ рдкреВрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЦреЛрджрддреЗ рд╣реБрдП 3 рд╕рдкреНрддрд╛рд╣ рдмрд┐рддрд╛рдиреЗ рдкрдбрд╝реЗред
рдЯрд╛рдЗрдкреЛрд╕ рдХреЗ рдХрд╛рд░рдг, рдмреАрдЯрд╛ рд░рд┐рд▓реАрдЬрд╝ рдмреЗрд╣рдж рдЫреЛрдЯреА рд╣реЛ рдЧрдИ рдереА, рдФрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдерд╛ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдмрд╣реБрдд рдЬрд▓реНрджреА рд░рд┐рд▓реАрдЬрд╝ рдХрд┐рдпрд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВрдиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдорд╛рд░реНрдЪ-рдЕрдкреНрд░реИрд▓ рдореЗрдВ рд░рд┐рд▓реАрдЬрд╝ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдереА, рд▓реЗрдХрд┐рди рдЬрдм рд╕реЗ рд╡рд╛рдкрд╕ рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд╕рдВрднрд╡ рдерд╛, рдореИрдВрдиреЗ рдлрд░рд╡рд░реА рдореЗрдВ рдмрдВрджрд░рдЧрд╛рд╣ рдХреЛ рдмрд┐рдЫрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рдЙрдк
рдЕрдм рд╣рдо рдЗрдВрдЬрди рдХреЗ рд╡рд┐рд╡рд░рдг рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред
рдЧреНрд░рд╛рдлрд┐рдХреНрд╕
рдмреЗрд╢рдХ, рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдкреНрд░рддрд┐рдкрд╛рджрди рд╡реЗрдмрд▓реЙрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди WebQuake рдХреЛ GLQuake рдкреЛрд░реНрдЯ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓рдЧрднрдЧ рдкреВрд░реЗ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рд╕рдмрд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред
WebQuake рдФрд░ GLQuake рдХреЗ рдмреАрдЪ рдореБрдЦреНрдп рдЕрдВрддрд░ OpenGL рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реЗрдЯ рдХреЗ рдмрдЬрд╛рдп рд╢реЗрдбрд░реНрд╕ рдФрд░ рдмрдлрд╝рд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИред WebQuake рдореЗрдВ, shaders рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рд░ рдЬрдЧрд╣, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: BSP рдореЙрдбрд▓, рдмрд╣реБрднреБрдЬ рдореЙрдбрд▓, рдЦрд┐рд▓рд╛рдбрд╝реА, рд╕реНрдкреНрд░рд╛рдЗрдЯ, рдХрдг, рдЖрдХрд╛рд╢ - рдЖрдкрдХрд╛ рдЕрдкрдирд╛ shader рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╢реЗрдбрд░реНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдкреНрд░рднрд╛рд╡ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛рдП рдЧрдП рдереЗ рдЬреЛ рдбреЙрд╕ рдХреНрд╡реЗрдХ / рд╡рд┐рдирдХреНрд╡рд╛рдХ рдореЗрдВ рдореМрдЬреВрдж рдереЗ, рд▓реЗрдХрд┐рди рдУрдкрди рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рд╕реАрдорд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг GLQuake рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░реЛрд╢рдиреА рд╡рд╛рд▓реЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдФрд░ рдЙрдЬреНрдЬреНрд╡рд▓ рдкреНрд░рдХрд╛рд╢ рдХреЗ рд╕рд╛рде рдмрдирд╛рд╡рдЯред
E1M1 рдХреЛ GLQuake рдореЗрдВ рд╢реБрд░реВ рдХрд░реЗрдВред рд▓рд╛рдЗрдЯ рдмрдВрдж рд╣реИрдВред
WebQuake рдореЗрдВ рдПрдХ рд╣реА рдЬрдЧрд╣ рд╣реИредрдХреНрд╡реЗрдХ рдЗрдВрдЬрди рдХреА рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдиреЗ рдореБрдЭреЗ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪреВрдВрдХрд┐ рдмрд╣реБрднреБрдЬ рдХреЛ рдХреЗрд╡рд▓ 4 рдЧрддрд┐рд╢реАрд▓ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрддреЛрдВ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЬрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рдХрд╛рд╢ рдирдХреНрд╢реЗ рдХрд╛рд▓реЗ рдФрд░ рд╕рдлреЗрдж рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдПрдХ рдмрдирд╛рд╡рдЯ рдХреЗ рд░рдВрдЧ рдЪреИрдирд▓реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреБрдирд┐рдпрд╛ рдХреЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЛ рд╡реЗрдХреНрдЯрд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛ред рдкреЛрд░реНрдЯ рдореЗрдВ рджреБрдирд┐рдпрд╛ рдХрд╛ рдкрд┐рдХреНрд╕реЗрд▓ shader рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
precision mediump float; uniform float uGamma; uniform sampler2D tTexture; uniform sampler2D tLightmap; uniform sampler2D tDlight; uniform sampler2D tLightStyle; varying vec4 vTexCoord; varying vec4 vLightStyle; void main(void) { vec4 texture = texture2D(tTexture, vTexCoord.xy); gl_FragColor = vec4(texture.rgb * mix(1.0, dot(texture2D(tLightmap, vTexCoord.zw), vec4( texture2D(tLightStyle, vec2(vLightStyle.x, 0.0)).a, texture2D(tLightStyle, vec2(vLightStyle.y, 0.0)).a, texture2D(tLightStyle, vec2(vLightStyle.z, 0.0)).a, texture2D(tLightStyle, vec2(vLightStyle.w, 0.0)).a) * 43.828125) + texture2D(tDlight, vTexCoord.zw).a, texture.a), 1.0); gl_FragColor.r = pow(gl_FragColor.r, uGamma); gl_FragColor.g = pow(gl_FragColor.g, uGamma); gl_FragColor.b = pow(gl_FragColor.b, uGamma); }
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдбреЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдЕрд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЗ рд▓рд┐рдП рдЙрдирдХреА рд╡рд░реНрддрдорд╛рди рдЪрдордХ рджреНрд╡рд╛рд░рд╛ 4 рд▓рд╛рдЗрдЯрдореИрдк рдХреЛ рдЧреБрдгрд╛ рдХрд░рдирд╛, рдЬреЛ рдХрд┐ 64x1 рдмрдирд╛рд╡рдЯ рдореЗрдВ 0 рд╕реЗ 25 рддрдХ рдпрд╛ 0.0 рд╕реЗ 0.0980392 рдХреЗ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИред
рдЖрдХрд╛рд╢, GLQuake рдореЗрдВ рдмреБрд░реА рддрд░рд╣ рд╕реЗ рдЯреВрдЯрд╛ рд╣реБрдЖ рд╣реИ, рдпрд╣рд╛рдБ GLATake рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЧрд╣рд░рд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рд╛рде рд╣реИрдХреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреВрд░реЗ рд╕реНрддрд░ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЦреАрдВрдЪреЗ рдЧрдП рдЪрдкрдЯреЗ рдЧреЛрд▓реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдХрдИ рдЫреЛрдЯреЗ рд▓реЛрдЧреЛрдВ рдореЗрдВ рдЖрдХрд╛рд╢ рдХреА рдмрдирд╛рд╡рдЯ рдХреЗ рд╕рд╛рде рдмрд╣реБрднреБрдЬ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдЬреАрдм рддрд░реАрдХреЗ рд╕реЗ рд╡рд┐рдХреГрдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдмреБрд░рд╛ рдкреНрд░рднрд╛рд╡ рд╣реЛрддрд╛ рд╣реИред рдФрд░ рд▓рд╣рд░реЛрдВ рдЬрдм рдЪрд▓рддреА рд╣реИред
GLQuake рдореЗрдВ рд╕реНрдХрд╛рдИредWebGL рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреНрд╡рд┐-рдЖрдпрд╛рдореА рдЪрд┐рддреНрд░ рднреА рдЦреАрдВрдЪреЗ рдЬрд╛рддреЗ рд╣реИрдВ (1 рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рд╕рд╛рде рдХреНрд╡рд╛рдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рд╡рд░реНрдЯреЗрдбрд░ рд╢реЗрдбрд░ рдореЗрдВ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП 2 рдбреА рдХреИрдирд╡рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рдереА, рд▓реЗрдХрд┐рди рдЙрдЪреНрдЪ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдкрд░ рдПрдлрдкреАрдПрд╕ 15 рддрдХ рдЧрд┐рд░ рдЧрдпрд╛ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореВрд▓ рдХреНрд╡реЗрдХ (рдФрд░ GWT рдХреНрд╡реЗрдХ 2) рдХреЗ рд╡рд┐рдкрд░реАрдд, WebQuake рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рдХреЗ рдЖрдХрд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП, рддрдерд╛рдХрдерд┐рдд рд╣реЛрд░ + рд▓рдВрдм + FOV рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ
рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣рдмреНрд░рд╣рд╛рдм рдкрд░
рд▓рд┐рдЦрд╛ рдерд╛ред
рдзреНрд╡рдирд┐
рдзреНрд╡рдирд┐ рдХреЛ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рджреЛ рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╡реЗрдм рдСрдбрд┐рдпреЛ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕реНрдЯреАрд░рд┐рдпреЛ рд╕рд╛рдЙрдВрдб рдФрд░ рд╕реБрдЧрдо рдзреНрд╡рдирд┐ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡реЗрдм рдСрдбрд┐рдпреЛ рдПрдкреАрдЖрдИ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдПрдЪрдЯреАрдПрдордПрд▓ 5 рдСрдбрд┐рдпреЛ рд╕рдХреНрд╖рдо рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдзреНрд╡рдирд┐ рдПрдХрд▓-рдЪреИрдирд▓ рд╣реИ рдФрд░ рдХреБрдЫ рджреЗрд░реА рд╕реЗ рджреЛрд╣рд░рд╛рддрд╛ рд╣реИред
рд╢реБрд░реБрдЖрддреА рдмреАрдЯрд╛ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ, рдХреЗрд╡рд▓ HTML5 рдСрдбрд┐рдпреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рд╡рдЬрд╣ рд╕реЗ, рдХреНрд░реЛрдо рдкрд╣рд▓реЗ рдПрдВрдбреНрд░реЙрдЗрдб, рд▓рд┐рдирдХреНрд╕ рдФрд░ рдореИрдХ рдФрд░ рдлрд┐рд░ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдХреНрд░реИрд╢ рд╣реЛ рдЧрдпрд╛, рдЗрд╕рд▓рд┐рдП рд╡реЗрдм рдСрдбрд┐рдпреЛ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред
рд╕рдВрдЧреАрдд рднреА рдореМрдЬреВрдж рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдбрд┐рд╕реНрдХ рд╕реЗ рдирд╣реАрдВ рдЦреЗрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди HTML5 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдУрдЬреАрдЬреА рдлрд╛рдЗрд▓реЛрдВ рд╕реЗред
рдиреЗрдЯрд╡рд░реНрдХ рдЧреЗрдо
рдЪреВрдБрдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХ WebSocket рд╕рд░реНрд╡рд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓рд┐рд╣рд╛рдЬрд╝рд╛ рд╕рд░реНрд╡рд░ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛ред
рдПрдХ рд╕рдорд░реНрдкрд┐рдд рд╕рд░реНрд╡рд░ Node.js рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ рдФрд░ WebQuake рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рд╕рдорд░реНрдкрд┐рдд рд╕рд░реНрд╡рд░ WebSockets рдФрд░ UDP рджреЛрдиреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП WebQuake рд╕рд░реНрд╡рд░ рдХреЛ рдПрдХ рдирд┐рдпрдорд┐рдд рдХреНрд╡реЗрдХ рдХреНрд▓рд╛рдЗрдВрдЯ (Quakeforld) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦреЗрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╢рд╛рдпрдж рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдореИрдВ рдореМрдЬреВрджрд╛ рдХреНрд╡реЗрдХ рдирд┐рдпрдорд┐рдд рд╕рд░реНрд╡рд░ рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рд▓рд┐рдЦреВрдВрдЧрд╛ред
рд╕рд░реНрд╡рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЙрд╕реА рдкрддреЗ рдФрд░ рдкреЛрд░реНрдЯ рдкрд░ HTTP рдЕрдиреБрд░реЛрдз рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдВрдЧреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╕рд░реНрд╡рд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ (рдбреЗрдЯрд╛ JSON рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реИ), рдпрд╛ рдпреВрдбреАрдкреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореМрдЬреВрджрд╛ рддрд░реАрдХреЛрдВ рд╕реЗред
рдкреНрд░рдмрдВрдз
рдорд╛рдЙрд╕ рд╕рдорд░реНрдерди рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЗрд╡рд▓ рдХреНрд░реЛрдо рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд▓реЙрдХ рднреА рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреИрдирд╡рд╛рд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрдг-рд╕реНрдХреНрд░реАрди рдореЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рд▓рд┐рдП рдФрд░ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрд╕реБрд╡рд┐рдзрд╛ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред
рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо
рдлрд╝рд╛рдЗрд▓реЛрдВ рддрдХ рдкрд╣реБрдБрдЪ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ XMLHttpRequest рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИред
рд╣рд╛рдВ, рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ XHR рд╢рд╛рдпрдж "рдлреИрд╢рдиреЗрдмрд▓ рдирд╣реАрдВ" рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХреЙрд▓рдмреИрдХ рдирд░рдХ рдХреЗ рд▓рд┐рдП рдЕрдЧреНрд░рдгреА рдХреЗ рдмрд┐рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╢рд╛рдпрдж рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдФрд░ рднреА рдЕрдзрд┐рдХ рд╕реБрдЦрдж рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдЬреАрдбрдмреНрд▓реНрдпреВрдЯреА рдХреНрд╡реЗрдХ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЕрд╕реНрдерд╛рдпреА рдмрдирд╛рд╡рдЯ рдХреЛ рджреЗрдЦрдирд╛ред 2ред
рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди, (рдХрдо рд╕реЗ рдХрдо рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ) рдПрдХ "рд▓реЛрдбрд┐рдВрдЧ" рддрд╕реНрд╡реАрд░ рд╕реНрдХреНрд░реАрди рдХреЗ рдмреАрдЪ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЦрд┐рд▓рд╛рдбрд╝реА рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ рдбрд╛рдЙрдирд▓реЛрдб рдкреНрд░рдЧрддрд┐ рдкрд░ рд╣реИред
рд╕реЗрд╡, рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдФрд░ рдбреЗрдореЛ рд▓реЛрдХрд▓ рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд▓реЛрдХрд▓ рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рд╕реНрдерд┐рдд рд╕реЗрд╡реНрд╕ рдХреЛ рдмреВрдЯ / рд╕реЗрд╡ рдореЗрдиреНрдпреВ рдореЗрдВ рдбрд┐рд▓реАрдЯ рдмрдЯрди рд╕реЗ рдбрд┐рд▓реАрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
GWT Quake 2 рдХреЗ рд╡рд┐рдкрд░реАрдд, WebQuake рдХреЛ рдлрд╝рд╛рдЗрд▓ рд░реВрдкрд╛рдВрддрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдФрд░ рд╕реАрдзреЗ .pak's (HTTP 1.1 рд░реЗрдВрдЬ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рд╕реЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдкреВрд░реНрдг рдореЙрдб рд╕рдорд░реНрдерди рд╣реИред
рдЙрддреНрдкрд╛рджрдХрддрд╛
рдореИрдВрдиреЗ рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдХрд░рдгреЛрдВ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдкрд░ WebQuake рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ред
рдЬреЛ рдХреБрдЫ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдерд╛, рд╡рд╣ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдкреНрд░рджрд░реНрд╢рди рдерд╛ (рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХрд┐рддрдиреЗ рдПрдлрдкреАрдПрд╕, рд▓реЗрдХрд┐рди 30 рд╕реЗ рдХрдо рдирд╣реАрдВ) рдХреНрд░реЛрдо рдХреЗ рдмреАрдЯрд╛ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлреЛрди (рдПрд▓рдЬреА рдСрдкреНрдЯрд┐рдорд╕ рдПрд▓ 9) рдкрд░ рднреА рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рджреАрд╡рд╛рд░реЗрдВ рдХрд╛рд▓реА рд╣реЛрдВ (рдореБрдЭреЗ рд╕рд╣реА рдХрд╛рд░рдг рдирд╣реАрдВ рдкрддрд╛ рд╣реЛрдЧрд╛ред рдпрд╣, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЧрддрд┐рд╢реАрд▓ рдкреНрд░рдХрд╛рд╢ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ)ред
рдореЗрд░реЗ рдкрд┐рдЫрд▓реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░, WebQuake рдиреЗ GWT Quake 2 рдореЗрдВ 5-10 FPS рдХреЗ рд╡рд┐рдкрд░реАрдд рдЕрдзрд┐рдХрддрдо 60 FPS рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ред рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди, рдореИрдВрдиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ
GWT Quake 2 рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ ArrayBuffer / Typer Arrays / DataView рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╣рд╛рдВ рдореИрдВ рдХрд░ рд╕рдХрддрд╛ рдерд╛, рдФрд░ рд╢рд╛рдпрдж рдЗрд╕рдиреЗ рдЗрд╕реЗ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХреАред рдЙрдЪреНрдЪ рдЧрддрд┐ред
NVIDIA GeForce 5200 рдФрд░ рдПрдХ рд╕реИрдорд╕рдВрдЧ N130 рдиреЗрдЯрдмреБрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдкреБрд░рд╛рдиреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдХрд┐рддрдиреЗ рдмрдбрд╝реЗ рдмреНрд░реЗрдХ рдереЗред ASUS рдЯреНрд░рд╛рдВрд╕рдлрд╛рд░реНрдорд░ рдкреИрдб рдкрд░, TF300T рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рдЪрд▓рддрд╛ рд╣реИред