Three.js - Do-it-yourself 3D рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдпрд╛ WebGL рдХрд░реАрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ

рдПрдХ рд╕рдордп рдореЗрдВ рдорд░реНрдбреЛрдмреВ рд╕реЗ рддреАрди . js рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╖рдп рд╣рдм рдкрд░ рдлрд┐рд╕рд▓ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдФрд░ (рд╕рдВрднрд╡рддрдГ) рдмрд╛рдж рдХреЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ, рдореИрдВ рдЗрд╕ рдЪреВрдХ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рддреАрди.js рдХреЛрдИ рднреА рд╕рдордЭрджрд╛рд░ рдкреНрд░рд▓реЗрдЦрди рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рдкрд░ рд╕рднреА рдЬреНрдЮрд╛рди рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЧрдП рдереЗ рдФрд░ рд╡реЗрдмрдЬреАрдПрд▓ рдЪрд╢реНрдорд╛ рдЙрдард╛рдХрд░, рдЕрд░реНрдерд╛рддред рд╡рд┐рд╖рдп рдХреЗ рд▓реЗрдЦрдХ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рднреА рдкрд░рд┐рд╡рд░реНрдзрди рд╕реНрд╡рд╛рдЧрдд рдпреЛрдЧреНрдп рд╣реИред

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

рдкрд╣рд▓рд╛ рдХрджрдо


рд╣рдорд╛рд░рд╛ HTML рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рд╕рд╡рд╛рд▓ рдирд╣реАрдВ рдЙрдард╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рджрд┐рдЦрддрд╛ рд╣реИ:

<!DOCTYPE html> <html> <head> <title>Three.js - dice</title> <meta charset="utf-8"> <style> body { margin: 0; padding: 0; overflow: hidden; } </style> <!-- libs --> <script type="text/javascript" src="js/Three.js"></script> <script type="text/javascript" src="js/RequestAnimationFrame.js"></script> <script type="text/javascript" src="js/jquery.js"></script> <!-- app --> <script type="text/javascript" src="js/demoapp.js"></script> </head> <body> </body> </html> 


рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо jQuery рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдРрд╕рд╛ рдХрд░рдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред RequestAnimationFrame.js, рдХреНрд░реЙрд╕-рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛рд░реНрдп (рдереЛрдбрд╝реЗ рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд) RequestAnimationFrame (рдЙрд╕ рдкрд░ рдиреАрдЪреЗ) рдХреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯреА рд╕реА рд╣реИрдХ рд╣реИред

рдЕрдм рд╣рдо рд╕реАрдзреЗ рд╣рдорд╛рд░реЗ Demoapp.js рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ
рд╣рдо рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреА рддреИрдпрд╛рд░ рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ рд╕рднреА рдХреЛрдб рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд▓рдЯрдХрд╛рддреЗ рд╣реИрдВ
  $(document).ready(function() { /** **/}); 

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

рдореБрдЦреНрдп рддрддреНрд╡


рдореБрдЦреНрдп рддрддреНрд╡ рдЬреЛ рд╣рдорд╛рд░реЗ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рднрд╛рдЧ рд▓реЗрдВрдЧреЗ (рдореБрдЦреНрдп рдзреНрдпрд╛рди рджреЗрдВ, рд▓реЗрдХрд┐рди рд╕рднреА рдирд╣реАрдВ, рддреАрди редjs рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕рдореГрджреНрдз рдЪрдпрди рд╣реИ):

1) рдХреИрдорд░рд╛ (THREE.Camera)
рдпреЗ рдШрдЯрдирд╛рдУрдВ рдХреЗ рдПрдХ рддрд╛рддреНрдХрд╛рд▓рд┐рдХ рджреГрд╢реНрдп рдкрд░ рд╣рдорд╛рд░реА "рдЖрдБрдЦреЗрдВ" рд╣реИрдВред
рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рджреВрд░реА рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдкрд╣рд▓реВ рдЕрдиреБрдкрд╛рдд рджрд┐рдЦрд╛рддрд╛ рд╣реИ (рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рднрд╛рдЧрдлрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЦрд┐рдбрд╝рдХреА рдХреА рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдКрдВрдЪрд╛рдИ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ), рддреАрд╕рд░рд╛ рдФрд░ рдЪреМрдерд╛ рд╢реЛ рд╡рд┐рдорд╛рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд / рджреВрд░ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдкрд╛рд╕ рдФрд░ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
 camera = new THREE.Camera(30, window.innerWidth/window.innerHeight,1, 3000); 

рдпрд╛ рдЖрдк рддреБрд░рдВрдд рдПрдХ рдХреИрдорд░рд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдмрд╛рдИрдВ рдорд╛рдЙрд╕ рдмрдЯрди рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рджреГрд╢реНрдп рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдШреБрдорд╛ рд╕рдХрддрд╛ рд╣реИ, рджрд╛рдИрдВ рдУрд░, рдКрдкрд░ рдФрд░ рдиреАрдЪреЗ, рдФрд░ рдмреАрдЪ рд╡рд╛рд▓реЗ рдХреЗ рд╕рд╛рде, рджреГрд╢реНрдп рдХреЛ рдЬрд╝реВрдо рдХрд░реЗрдВред рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдХреИрдорд░реЗ рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд╛рдо рд╕реЗ рдЦреБрдж рдХреЗ рд▓рд┐рдП рдмреЛрд▓рддреЗ рд╣реИрдВ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдореЗрдВ рджрд┐рдЦрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ):
 camera = new THREE.TrackballCamera({/**parameters**/}); 

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

2) рджреГрд╢реНрдп (THREE.Scene)
рдореБрдЦреНрдп рддрддреНрд╡ред рдпрд╣ рдЗрд╕ рдЪрд░рдг рдкрд░ рд╣реИ рдХрд┐ рд╣рдо рдЙрди рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдФрд░ рд╡рд┐рдорд╛рдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВрдЧреЗ рдЬреЛ рд╣рдордиреЗ рдмрдирд╛рдП рдереЗ (рдЙрдкрдпреЛрдЧ .addObject рдпрд╛ addChild)ред рджреГрд╢реНрдп рдЖрд░рдВрдн рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
 scene = new THREE.Scene(); 

3) рдореЛрдЯрд░! рдореИрд╢ (THREE.Mesh)
рдпрд╣ рдХреИрд╢ рдХреА рд╕рд╣рд╛рдпрддрд╛ рд╕реЗ рд╣реИ рдЬреЛ рдХрд┐ рддреАрди рдореЗрдВ рд▓рдЧрднрдЧ рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЬрд╛рд▓ рдХреА рдЬреНрдпрд╛рдорд┐рддрд┐ рдФрд░ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЬреНрдпрд╛рдорд┐рддрд┐ рд╡рд╣ рд╡рд╕реНрддреБ рд╣реИ рдЬреЛ рджреГрд╢реНрдп рдмрдирд╛рддреА рд╣реИ (рдХреНрдпреВрдмреНрд╕, рдЧреЛрд▓реЗ, рд╕рд┐рд▓рд┐рдВрдбрд░, рдкреНрд▓реЗрди, рдЖрджрд┐) рдпрд╣ рд╡рд┐рд╖рдп рдХрд╛рдлреА рдмрдбрд╝рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдм рд╣рдо рдЗрд╕ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдВрдЧреЗред рд╕рд╛рдордЧреНрд░реА, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреЛрдИ рдХрдо рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдПрдХ рдмрдбрд╝рд╛ рдореБрджреНрджрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рдЖрдк рдХреЗрд╡рд▓ рджреЛ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдЬреНрдпрд╛рдорд┐рддрд┐ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдореЗрд╢рдлреИрд╕реЗрдореЗрдЯреЗрд░рд┐рдпрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП, рдореЗрд╢рдмрд┐рд╕рд┐рд╕реЗрдЯреЗрд░рд┐рдпрдо рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
 mesh = new THREE.Mesh( geometry, material ); 

рддрдм рд╣рдо рдорди рдХреА рд╢рд╛рдВрддрд┐ рдХреЗ рд╕рд╛рде рджреГрд╢реНрдп рдореЗрдВ рдПрдХ рдореЗрд╖ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ
 scene.addObject( mesh );// .addChild 

рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдирд┐рдХрд╛рд▓рдирд╛ рднреА рдПрдХ рд╕реНрдиреИрдк рд╣реИ рдЬреЛ removeObject рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
 scene.removeObject(mesh); 


4) рд░реЗрдВрдбрд░рд░ (THREE.WebGLRenderer / CanvasRenderer)
рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реЗрдВрдбрд░рд░реНрд╕ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, - WebGLRenderer рдФрд░ CanvasRendererред рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд╛рдореЛрдВ рд╕реЗ рдЖрдк рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реИред рдпрд╣ рднреА рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐, рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ, WebGLRenderer рдХрдордЬреЛрд░ рдорд╢реАрдиреЛрдВ рдкрд░ рдПрдлрдкреАрдПрд╕ рдХреЛ рдХрд╛рдлреА рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИред рд░реЗрдВрдбрд░рд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреА рдмреЗрд╣рдж рд╕рд░рд▓ рд╣реИ:
 renderer = new THREE.WebGLRenderer( ); 

рдпрд╛
 renderer = new THREE.CanvasRenderer(); 


рд░реЗрдВрдбрд░рд░ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЗрд╕рдХрд╛ рдЖрдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реИ - рдпрд╣рд╛рдВ рд╣рдо рдЕрдкрдиреА рдЬрд░реВрд░рддреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рд╕реА рднреА рдЖрдХрд╛рд░ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВред
 renderer.setSize( window.innerWidth, window.innerHeight ); 

рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдореЗрдВ рдкреЗрдЬ рдкрд░ рдПрдХ рд░реЗрдВрдбрд░рд░ рддрддреНрд╡ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░ рд╕реЗ рдФрд░ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реЗрдВрдбрд░рд░реНрд╕ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
 container.appendChild( renderer.domElement ); 

рдпрд╛ jQuery рдХреЗ рд▓рд┐рдП
 container.append(renderer.domElement); 


5) рдкреНрд░рдХрд╛рд╢ред
рд╣рд╛рдВ, рджреГрд╢реНрдп рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ (рдФрд░ рдХрднреА-рдХрднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ), рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд╕реНрддреБрдУрдВ рд╕реЗ рдЫрд╛рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рд╡реЗ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╕рдорд╛рдирд╛рдВрддрд░ рдЪрд▓рддреА рд╡рд┐рдорд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдкрд╡рд╛рдж рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ)ред рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рддреАрди рдкреНрд░рдХрд╛рд░ рдХреА рд╣реЛрддреА рд╣реИ:
5.1) THREE.AmbientLight рдкреНрд░рдХрд╛рд╢ рд╣реИ рдЬреЛ рдкреВрд░реЗ рджреГрд╢реНрдп рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреА рдХреЛрдИ рджрд┐рд╢рд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╣рд░ рджреГрд╢реНрдп рд╡рд╕реНрддреБ рдХреЛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЪрд╛рд╣реЗ рд╡рд╕реНрддреБ рдХрд╛ рд╕реНрдерд╛рди рдХреБрдЫ рднреА рд╣реЛред рддрджрдиреБрд╕рд╛рд░, рдЗрд╕ рдкреНрд░рдХрд╛рд╢ рдХреА рд╕рдордиреНрд╡рдп рдЕрдХреНрд╖ рдкрд░ рдХреЛрдИ рд╕реНрдерд┐рддрд┐ рдирд╣реАрдВ рд╣реИ
5.2) THREE.PointLight - рд╕рднреА рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рдПрдХ рдмрд┐рдВрджреБ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкреНрд░рдХрд╛рд╢ рдмрд▓реНрдм рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд╛рдлреА рдЙрдкрдпреБрдХреНрдд рд╣реЛрдЧреАред
5.3) THREE.DirectionalLight - рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рджрд┐рд╢рд╛ рдореЗрдВ (рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдмрд┐рдВрджреБ рд╕реЗ рдФрд░ рдореВрд▓ рддрдХ) рдкреНрд░рдХрд╛рд╢ рдХреА рдЧрддрд┐ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реВрд░реНрдп рдХреЗ рдкреНрд░рдХрд╛рд╢ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рдХрд╛рд╢ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдард╣рд░рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдХреЗрд╡рд▓ DirectionalLight рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рдорд╛рди рдХреЗ рдКрдкрд░ рд░рдЦреА рдЧрдИ рд╡рд╕реНрддреБ рдХреА рдЫрд╛рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗред

рдЬреНрдЮрд╛рди рд▓рдЧрд╛рдУ


рдЕрдм рдЖрдк рд╕реАрдзреЗ рдЖрд╡реЗрджрди рдХреЛрдб рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ рд╣рдо рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рддрддреНрд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдВрдЧреЗред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдФрд░ рдПрдиреАрдореЗрд╢рди рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдЕрдкрдирд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдореЗрдВ рдЙрди рд╡реИрд╢реНрд╡рд┐рдХ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреА рднреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рд╣реИред
 //  var container, camera, scene, renderer, floormesh, cubeMesh, phi = 0; init(); animate(); 

рдЖрд░рдВрднреАрдХрд░рдг рд╕рдорд╛рд░реЛрд╣ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
 function init() { //        container = $( 'div' ).attr('id','cardfield'); $('body').append( container ); //  camera = new THREE.TrackballCamera({ fov: 45, aspect: window.innerWidth / window.innerHeight, near: 1, far: 10000, rotateSpeed: 1.0, zoomSpeed: 1.2, panSpeed: 0.8, noZoom: false, noPan: false }); //  ,   ,       camera.position.z = 250; camera.position.y = 175; camera.target.position.y = -75; //  scene = new THREE.Scene(); //  "".       600600   5 var floorgeo = new THREE.CubeGeometry(600,600,5); //          floormesh = new THREE.Mesh(floorgeo, new THREE.MeshBasicMaterial({color: 0x248C0F, opacity:0.9})); //    floormesh.position.y = -200; //      ,     . floormesh.rotation.x = 90 * Math.PI / 180; //   scene.addChild(floormesh); //   var materials = [ //     new THREE.MeshBasicMaterial( { color: 0xE01B4C }), //   new THREE.MeshBasicMaterial( { color: 0x34609E }), //   new THREE.MeshBasicMaterial( { color: 0x7CAD18 }), // new THREE.MeshBasicMaterial( { color: 0x00EDB2 }), //  new THREE.MeshBasicMaterial( { color: 0xED7700 }), //   new THREE.MeshBasicMaterial( { color: 0xB5B1AE }) //   ]; //    50    1,      var cube = new THREE.CubeGeometry( 50, 50, 50, 1, 1, 1, materials ); //   ,     //  ,     cubeMesh = new THREE.Mesh( cube, new THREE.MeshFaceMaterial() ); //    y cubeMesh.position.y = -10; //   scene.addChild( cubeMesh ); //   new THREE.ShadowVolume( cubeMesh ); //   light = new THREE.DirectionalLight( 0xffffff ); //,     light.castShadow = true; //     -150,  .   ( 1  y  0  x  z),            //,          light.position.set( 0, 1, 0 ); //  scene.addChild( light ); // renderer = new THREE.WebGLRenderer(); //    renderer.setSize( window.innerWidth, window.innerHeight ); //      container.append( renderer.domElement ); } 

рдПрдиреАрдореЗрд╢рди рдирд┐рд╖реНрдкрд╛рджрди:
 function animate() { requestAnimationFrame( animate ); render(); } 

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

рдкреНрд░рддрд┐рдкрд╛рджрди
рдпрд╣ рдпрд╣рд╛рдВ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХреИрдорд░реЗ рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЖрдВрджреЛрд▓рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдкрдХреЛ рдЪрд░ рдХреЗ рджрд╛рдпрд░реЗ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡реЗ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВ)
 function render() { //      (    ) cubeMesh.rotation.x += 0.5 * Math.PI / 90; cubeMesh.rotation.y += 1.0 * Math.PI / 90; cubeMesh.rotation.z += 1.5 * Math.PI / 90; //   ,       x  y cubeMesh.position.x = Math.sin( phi ) * 50; cubeMesh.position.y = Math.cos( phi ) * 50; //   phi+= 0.05; // renderer.render(scene, camera); } 


рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдиреЗ рдЬреАрдердм рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдереНрд░реАред рдЬреЗрдПрд╕ рдХреЗ рдмрд┐рд▓реНрдб рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ (рдирд┐рдпрдорд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рдЖрдВрдХрдбрд╝реЗ рдХреА рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп THREE.xxx THREE.xxxGemometry, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП THREE.CubeGeometry, рддреАрди.js рдХрд╛ рдкреБрд░рд╛рдирд╛ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди THREE.Cube рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг THREE.TrackBallCamera) рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рд╣реИред

рдкрд░рд┐рдгрд╛рдо:


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

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


All Articles