рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░! рдореИрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рдмреНрд░реЗрдЯ рдХреИрдорд░рди рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рд▓реЗрдЦ "рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрди 3 рдбреА: рдП рдЗрдВрдЯреНрд░реЛрдбрдХреНрд╢рди рдЯреВ рдереНрд░реАредрдЬреЗрдПрд╕" рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВредрдкрд░рд┐рдЪрдп
рддреАрди.рдЬреЗрдПрд╕ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рд╣реИред рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ 3 рдбреА рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдЖрд░рдВрдн рдХрд░рдирд╛ рдереНрд░реА .js рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдкрдиреЗ 3 рдбреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдкрд╣рд▓реЗ рдХрднреА рдирд╣реАрдВ рдбреВрдмреЗ рд╣реИрдВред
рдореБрдЭреЗ рдПрдХрддрд╛ рдФрд░ рд╕реА # рдЧреЗрдо рдЗрдВрдЬрди рдХреЗ рд╕рд╛рде рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рдЕрдиреБрднрд╡ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдХрдИ рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдВ рдореЗрд░реЗ рд▓рд┐рдП рдирдИ рд╣реИрдВред рдореИрдВ рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рдХрд┐ рдЕрдм рд╢реБрд░реБрдЖрддреА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдо рд╕рдВрд╕рд╛рдзрди рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЗрд╕рдореЗрдВ, рд╣рдо рдмрд╣реБрднреБрдЬ рдЬрд╛рд▓ рдФрд░ рд╕рд╛рдордЧреНрд░реА рд╕реЗ рдЬреНрдпрд╛рдорд┐рддрд┐, рд▓реЛрдбрд░ рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рдХреЗ рддреАрди.js рджреГрд╢реНрдпреЛрдВ рдХреЗ рдореВрд▓ рддрддреНрд╡реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред
рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рднрд╡рд┐рд╖реНрдп рдХреА рд╡реЗрдм рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрдпрд╛рдо рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдмреБрдирд┐рдпрд╛рджреА рдкрд╣рд▓реБрдУрдВ рдХреА рдареЛрд╕ рд╕рдордЭ рд╣реЛрдЧреАред
рдмреЗрди рд╣реНрдпреВрд╕реНрдЯрди ,
рдереЙрдорд╕ рдбреАрд╡рд╛рд▓реНрдб рдФрд░
рд╕реНрдЯреНрд░рд╛рдЗрдХрд░рдбреЛрдЬрд╝рдПрдиреАрдореЗрд╢рди рдХреЗ рддреАрди рдЙрджрд╛рд╣рд░рдг ред
рд╡реИрдХреНрдЯрд░ рдФрд░ рдХрдВрдЯреЗрдирд░ - рдмреБрдирд┐рдпрд╛рджреА рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХ
рдЕрдХреНрд╕рд░
рдереНрд░реА.рдЬреЗрдПрд╕ рдореЗрдВ рджреЛ рдореБрдЦреНрдп рд╡рд░реНрдЧ рд╣реЛрддреЗ рд╣реИрдВ -
рд╡реЗрдХреНрдЯрд░ 3 рдФрд░
рдмреЙрдХреНрд╕ 3 ред рдпрджрд┐ рдЖрдк 3 рдбреА рдореЗрдВ рдирдП рд╣реИрдВ, рддреЛ рдпрд╣ рдереЛрдбрд╝рд╛ рд╕рд╛рд░ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЙрдирд╕реЗ рдХрдИ рдмрд╛рд░ рдорд┐рд▓реЗрдВрдЧреЗред
Vector3
рд╕рдмрд╕реЗ рдмреБрдирд┐рдпрд╛рджреА 3 рдбреА рд╡рд░реНрдЧ рдЬрд┐рд╕рдореЗрдВ рддреАрди рдирдВрдмрд░ рд╣реЛрддреЗ рд╣реИрдВ:
x, y рдФрд░ z ред рдирдВрдмрд░ 3 рдбреА рдЕрдВрддрд░рд┐рдХреНрд╖ рдпрд╛ рджрд┐рд╢рд╛ рдФрд░ рд▓рдВрдмрд╛рдИ рдореЗрдВ рдПрдХ рдмрд┐рдВрджреБ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
const vect = new THREE.Vector3(1, 1, 1);
рддреАрди рдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдмреЙрдХреНрд╕ рдЯрд╛рдЗрдк рдХреЗ рд▓рд┐рдП
рд╡реЗрдХреНрдЯрд░ 3 рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЗрдирдкреБрдЯ рддрд░реНрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
рдмреЙрдХреНрд╕ 3Box3
рдпрд╣ рд╡рд░реНрдЧ рдХреНрдпреВрдмреЙрдЗрдб (3 рдбреА рдХрдВрдЯреЗрдирд░) рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдЕрдиреНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдПрдХ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдирд╛ рд╣реИ - рдФрд░ рдпрд╣ рд╕рдм, рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рдХреНрдпреВрдмреЙрдЗрдб рдЬрд┐рд╕рдореЗрдВ рдПрдХ 3 рдбреА рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд┐рдЯ рд╣реЛрдЧрд╛ред рдкреНрд░рддреНрдпреЗрдХ
Box3 рдХреЛ x, y рдФрд░ z axes рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд┐рдпрд╛
рдЬрд╛рддрд╛ рд╣реИ ред рд╡реЗрдХреНрдЯрд░ 3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
const vect = new THREE.Vector3(1, 1, 1); const box = new THREE.Box3(vect);
рдореМрдЬреВрджрд╛ 3D рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
const box = new THREE.Box3(); box.setFromObject(object);
рдЖрдк рдЗрд╕ рдЧрд╣рди рдЬреНрдЮрд╛рди рдХреЗ рдмрд┐рдирд╛ рдЧреНрд░рд┐рдб рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬреИрд╕реЗ рд╣реА рдЖрдк рдЕрдкрдиреЗ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдЖрдирд╛ рдпрд╛ рдмрджрд▓рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдпреЗ рдХрдХреНрд╖рд╛рдПрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдореЗрдВ рдЖрдПрдВрдЧреАред рдЕрдм рд╣рдо рдЕрдореВрд░реНрддрддрд╛ рд╕реЗ рджреВрд░ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реА рдЪреАрдЬреЛрдВ рдХреА рдУрд░ рдмрдврд╝реЗрдВрдЧреЗред
рдмрд╣реБрднреБрдЬ рдЬрд╛рд▓
рдереНрд░реА.рдЬреЗрдПрд╕ рдореЗрдВ, рдордВрдЪ рдкрд░ рдореБрдЦреНрдп рджреГрд╢реНрдп рддрддреНрд╡
рдореЗрд╖ рд╣реИ ред рдпрд╣ рдПрдХ 3 рдбреА рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдЬреЛ рддреНрд░рд┐рдХреЛрдгреАрдп рдЖрдпрддреЛрдВ (рдмрд╣реБрднреБрдЬ рдЬрд╛рд▓) рд╕реЗ рдмрдирд╛ рд╣реИред рдпрд╣ рджреЛ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рдЬреНрдпрд╛рдорд┐рддрд┐ - рдЗрд╕рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ,
рд╕рд╛рдордЧреНрд░реА - рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИред
рдЙрдирдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рдереЛрдбрд╝реА рднреНрд░рд╛рдордХ рд▓рдЧ рд╕рдХрддреА рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдЬреНрдпрд╛рдорд┐рддрд┐ рд╡рд░реНрдЧ рдореЗрдВ рд░рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛ рд╕рдХрддреА рд╣реИ), рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рдЕрдВрддрд░ рдмрд┐рд▓реНрдХреБрд▓ рдпрд╣реА рд╣реИред
рдЬреНрдпрд╛рдорд┐рддрд┐
рдЬрд┐рд╕ рдХрд╛рд░реНрдп рдХреЛ рдЖрдк рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЖрдк рддреАрди рдХреЗ рдЕрдВрджрд░ рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рджреВрд╕рд░реЗ рдХреЛ рдЖрдпрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
THREE.TorusKnotGeometry рдЬреИрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдХреЛрдб рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдЬрдЯрд┐рд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕реЗ рдЬрд▓реНрдж рд╣реА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕рд░рд▓ рд░реВрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рд╕рдмрд╕реЗ рд╕рд░рд▓ 3 рдбреА рдлрд┐рдЧрд░, рдХреНрдпреВрдмреЙрдЗрдб рдпрд╛ рдХрдВрдЯреЗрдирд░,
рдЪреМрдбрд╝рд╛рдИ ,
рдКрдВрдЪрд╛рдИ рдФрд░
рдЧрд╣рд░рд╛рдИ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
const geometry = new THREE.BoxGeometry( 20, 20, 20 );
рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП,
рддреНрд░рд┐рдЬреНрдпрд╛ ,
рдЪреМрдбрд╝рд╛рдИ, рдФрд░
рдКрдВрдЪрд╛рдИ рдорд╛рдирдХреЛрдВ рдХрд╛
рдорд╛рди рдиреНрдпреВрдирддрдо рд╣реИ ред рдЕрдВрддрд┐рдо рджреЛ рдЪрд░ рдпрд╣ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ рдХрд┐ рдореЙрдбрд▓ рдХреЛ рддреНрд░рд┐рднреБрдЬ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдиреЗ рддреНрд░рд┐рднреБрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП: рдЬрд┐рддрдиреА рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рд╣реЛрдЧреА, рдЙрддрдиреА рд╣реА рдЪрд┐рдХрдиреА рд╣реЛрдЧреАред
const geometry = new THREE.SphereGeometry( 20, 64, 64 );
рдпрджрд┐ рд╣рдо рддреЗрдЬ рдпрд╛ рддреНрд░рд┐рдХреЛрдгреАрдп рдЖрдХрд╛рд░ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдПрдХ рд╢рдВрдХреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдирдХреЗ рддрд░реНрдХ рджреЛ рдкрд┐рдЫрд▓реЗ рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рддрд░реНрдХреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдпреЛрдЬрди рд╣реИрдВред рдиреАрдЪреЗ, рд╣рдо
рддреНрд░рд┐рдЬреНрдпрд╛ ,
рдЪреМрдбрд╝рд╛рдИ рдФрд░
рд░реЗрдбрд┐рдпрд▓рд╕реЗрдЧрдореЗрдВрдЯ рд▓рд┐рдЦрддреЗ рд╣реИрдВ ред
const geometry = new THREE.ConeBufferGeometry( 5, 20, 32 );
рдпрд╣ рд╕рдмрд╕реЗ рдЖрдо рдЖрдВрдХрдбрд╝реЛрдВ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рддреАрди.js рдмреЙрдХреНрд╕ рдХреЗ рдЕрдВрджрд░ рдмрд╣реБрдд рд╕реА рдЖрдХреГрддрд┐рдпрд╛рдБ рд╣реИрдВ, рдЬреЛ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо
TorusKnotGeometry рд╡рд┐рдзрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд┐рд░реНрдорд┐рдд рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд░реВрдкреЛрдВ рдХреЛ
рджреЗрдЦреЗрдВрдЧреЗ ред
рдпреЗ рдЖрдХреГрддрд┐рдпрд╛рдБ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдХреНрдпреЛрдВ рджрд┐рдЦрддреА рд╣реИрдВ рдЬреИрд╕реА рд╡реЗ рджрд┐рдЦрддреА рд╣реИрдВ? рдпрд╣ рдкреНрд░рд╢реНрди рдЗрд╕ рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЖрдкрд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЖрдЧреНрд░рд╣ рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╣реА рд░реЛрдЪрдХ рдЖрдХреГрддрд┐рдпрд╛рдБ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ!
const geometry = new THREE.TorusKnotGeometry(10, 1.3, 500, 6, 6, 20);
https://codepen.io/BretCameron/pen/gOYqORgрд╕рд╛рдордЧреНрд░реА
рдЬреНрдпрд╛рдорд┐рддрд┐ рд╣рдорд╛рд░реА 3 рдбреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдирд╣реАрдВред рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рддреАрди.js рдмреЙрдХреНрд╕ рд╕реЗ 10 рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдЕрдкрдиреЗ рдлрд╛рдпрджреЗ рдФрд░ рдЕрдиреБрдХреВрд▓рди рдпреЛрдЧреНрдп рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВред рд╣рдо рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рднрд╛рдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред

MeshNormalMaterial
рддреНрд╡рд░рд┐рдд рд╢реБрд░реБрдЖрдд рдФрд░ рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреАредрд╣рдо
MeshNormalMaterial рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ, рдмрд╣реБрд░рдВрдЧрд╛ рд╕рд╛рдордЧреНрд░реА рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдордиреЗ рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рдЖрд░рдЬреАрдмреА рдкреИрдирд▓ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд╡реИрдХреНрдЯрд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, 3 рдбреА рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рд╡реЗрдХреНрдЯрд░ рдХреА рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рдВрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
const material = new THREE.MeshNormalMaterial();
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ рдЖрдк рд╕рд╛рдордЧреНрд░реА рдХрд╛ рд░рдВрдЧ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк CSS рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрддреГрдкреНрддрд┐ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ:
filter: hue-rotate(90deg) .
рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ, рдпрд╣ рд╕рд╛рдордЧреНрд░реА рддреНрд╡рд░рд┐рдд рд╕реНрдЯреНрд░реИрдЯрдо рдФрд░ рд▓реЙрдиреНрдЪ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╣реИред рдЕрдкрдиреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЕрдзрд┐рдХ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рдФрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред
MeshBasicMaterial
рдХреЗрд╡рд▓ рдХрдВрдХрд╛рд▓ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧреА рд╣реИредрдпрджрд┐ рдЖрдк рдЖрдХреГрддрд┐ рдХреЛ рдПрдХ рд╣реА рд░рдВрдЧ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХреЗрд╡рд▓ рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░
MeshBasicMaterial рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рдореЙрдбрд▓ рдХреЗ рдХрдВрдХрд╛рд▓ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдореЗрдВ рдЙрд╕ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧреА рд▓рдЧрд╛ред рдХреЗрд╡рд▓ рдХрдВрдХрд╛рд▓ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ
{рд╡рд╛рдпрд░рдлреНрд░реЗрдо: рдЯреНрд░реВ} рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
const material = new THREE.MeshBasicMaterial({ wireframe: true, color: 0xdaa520 });
рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдореБрдЦреНрдп рдиреБрдХрд╕рд╛рди рдпрд╣ рд╣реИ рдХрд┐ рд╕рд╛рдордЧреНрд░реА рдХреА рдЧрд╣рд░рд╛рдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦреЛ рдЬрд╛рддреА рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рдХреЗрд╡рд▓ рдХрдВрдХрд╛рд▓ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдХ рд╕рд╛рдордЧреНрд░реА рдЧрд╣рд░рд╛рдИ рдХреА рдХрдореА рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддреА рд╣реИ -
MeshDepthMaterialMeshLambertMaterial
рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди рд▓реЗрдХрд┐рди рдХрдо рд╕рдЯреАрдХрддрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИредрдпрд╣ рдкрд╣рд▓реА рд╕рд╛рдордЧреНрд░реА рд╣реИ рдЬреЛ рдкреНрд░рдХрд╛рд╢ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рд╣рдорд╛рд░реЗ рджреГрд╢реНрдп рдореЗрдВ рдХреБрдЫ рдкреНрд░рдХрд╛рд╢ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ, рд╣рдо рдПрдХ рдЧрд░реНрдо рдкреНрд░рднрд╛рд╡ рдХреЗ рд╕рд╛рде рдПрдХ рдкреАрд▓реЗ рд░рдВрдЧ рдХреА рдЯрд┐рдВрдЯ рдХреЗ рд╕рд╛рде рд╕реНрдкреЙрдЯрд▓рд╛рдЗрдЯ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
const scene = new THREE.Scene(); const frontSpot = new THREE.SpotLight(0xeeeece); frontSpot.position.set(1000, 1000, 1000); scene.add(frontSpot); const frontSpot2 = new THREE.SpotLight(0xddddce); frontSpot2.position.set(-500, -500, -500); scene.add(frontSpot2);
рдЕрдм рд╣рдорд╛рд░реЗ рдЖрдВрдХрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА рдЬреЛрдбрд╝реЗрдВред рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░рд╛ рдЖрдВрдХрдбрд╝рд╛ рд╕рдЬрд╛рд╡рдЯ рдХреА рддрд░рд╣ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдПрдХ рдФрд░ рд╕реБрдирд╣рд░рд╛ рд░рдВрдЧ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВред рдПрдХ рдЕрдиреНрдп рдкреИрд░рд╛рдореАрдЯрд░,
рдЗрдорд┐рд╕рд┐рд╡ , рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╕реНрд╡рдпрдВ (рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЗ рдмрд┐рдирд╛) рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓рд╛ рд░рдВрдЧ рд╣реИред рдЕрдХреНрд╕рд░ рдпрд╣ рдПрдХ рдЧрд╣рд░реЗ рд░рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдмреЗрд╣рддрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧреНрд░реЗ рдХреЗ рдЕрдВрдзреЗрд░реЗ рд░рдВрдЧреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ, рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ
const material = new THREE.MeshLambertMaterial({ color: 0xdaa520, emissive: 0x111111, });
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд░рдВрдЧ рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рд╕рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдпрд╣ рдкреНрд░рдХрд╛рд╢ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ рдпрдерд╛рд░реНрдерд╡рд╛рдж рдХреЛ рдирд╣реАрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ
MeshPhongMaterial рдпрд╛
MeshStandardMaterial рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
редMeshPhongMaterial
рдордзреНрдпрдо рдкреНрд░рджрд░реНрд╢рди рдФрд░ рдордзреНрдпрдо рд╕рдЯреАрдХрддрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИредрдпрд╣ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд░реНрд╢рди рдФрд░ рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╕рдЯреАрдХрддрд╛ рдХреЗ рдмреАрдЪ рдПрдХ рдЯреНрд░реЗрдбрдСрдлрд╝ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рд╛рдордЧреНрд░реА рдПрдХ рдРрд╕реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдЬрд┐рд╕реЗ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд╕рд╛рде-рд╕рд╛рде
MeshLambertMaterial рдХреЗ рд╕рд╛рде рдЙрддреНрдкрд╛рджрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
редрдЕрдм рд╣рдо рдЙрди
рд╕реНрдкреЗрдХреНрдпреБрд▓рд░ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕рддрд╣ рдкрд░рд╛рд╡рд░реНрддрди рдХреА рдЪрдордХ рдФрд░ рд░рдВрдЧ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИрдВред рдпрджрд┐ рдПрдорд┐рд╕рд┐рд╡ рдкреНрд░реЙрдкрд░реНрдЯреА рдЖрдорддреМрд░ рдкрд░ рдбрд╛рд░реНрдХ рд╣реЛрддреА рд╣реИ, рддреЛ рд╣рд▓реНрдХреЗ рд░рдВрдЧ рдХреЗ рд▓рд┐рдП
рд╕реНрдкреЗрдХреНрдпреБрд▓рд░ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдиреАрдЪреЗ рд╣рдо рд╣рд▓реНрдХреЗ рднреВрд░реЗ рд░рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
const material = new THREE.MeshPhongMaterial({ color: 0xdaa520, emissive: 0x000000, specular: 0xbcbcbc, });
рдиреЗрддреНрд░рд╣реАрди, рдКрдкрд░ рд╕реЗ рдЫрд╡рд┐ рдкреНрд░рдХрд╛рд╢ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рджреГрдврд╝рддрд╛ рд╕реЗ рджрд░реНрд╢рд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рд╕рд╣реА рдирд╣реАрдВ рд╣реИред рд╕рдлреЗрдж рд░реЛрд╢рдиреА рдмрд╣реБрдд рдЙрдЬреНрдЬреНрд╡рд▓ рд╣реИ рдФрд░ рд╕рд╛рдордЧреНрд░реА рдзрд╛рддреБрдИ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд░рд┐рдмреНрдб рджрд┐рдЦрддреА рд╣реИ (рдФрд░ рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ)ред рд╣рдо
MeshStandardMaterial рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреЗрд╣рддрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
редMeshStandartMaterial
рдЙрдЪреНрдЪ рд╕рдЯреАрдХрддрд╛ рд▓реЗрдХрд┐рди рдХрдо рдЙрддреНрдкрд╛рджрдХрддрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИредрдпрд╣ рд╕рднреА рдХреА рд╕рдмрд╕реЗ рд╕рдЯреАрдХ рд╕рд╛рдордЧреНрд░реА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд▓рд╛рдЧрддреЛрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдЧрд╛ред
MeshStandartMaterial рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрддрд┐рд░рд┐рдХреНрдд
рдзрд╛рддреБ рдФрд░
рдЦреБрд░рджрд░рд╛рдкрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ 0 рдФрд░ 1 рдХреЗ рдмреАрдЪ рдХрд╛ рдорд╛рди рд▓реЗрддрд╛ рд╣реИред
рдзрд╛рддреБрддрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡рд╕реНрддреБ рдХреИрд╕реЗ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рд╣реЛрддреА рд╣реИ, рдзрд╛рддреБ рдХреА рдкреНрд░рдХреГрддрд┐ рдХреЗ рдХрд░реАрдм рд╣реЛ рдЬрд╛рддреА рд╣реИред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдзрд╛рддреБрдУрдВ рдЬреИрд╕реЗ рдкреНрд░рд╡рд╛рд╣рдХреАрдп рдкрджрд╛рд░реНрдереЛрдВ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд╛рд╡рд░реНрддрдХ рдЧреБрдг рд╣реЛрддреЗ рд╣реИрдВ, рдорд┐рдЯреНрдЯреА рдХреЗ рдкрд╛рддреНрд░ рдЬреИрд╕реЗ рдбрд╛рдЗрд▓реЗрдХреНрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд╡рд┐рдкрд░реАрддред
рдЦреБрд░рджрд░рд╛рдкрди рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░рдд рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ рдЪрдордХ рдХреЗ рд╡рд┐рдкрд░реАрдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: 0 - рдмрд╣реБрдд рдЪрдордХрджрд╛рд░, 1 - рдмрд╣реБрдд рдореИрдЯред
const material = new THREE.MeshStandardMaterial({ color: 0xfcc742, emissive: 0x111111, specular: 0xffffff, metalness: 1, roughness: 0.55, });
рдпрд╣ рддреАрди.js рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рд╕рднреА рдХреА рд╕рдмрд╕реЗ рдпрдерд╛рд░реНрдерд╡рд╛рджреА рд╕рд╛рдордЧреНрд░реА рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрд╕рд╛рдзрди-рдЦрдкрдд рднреА рд╣реИ
рдЬрд┐рди рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдордиреЗ рдиреАрдЪреЗ рдЪрд░реНрдЪрд╛ рдХреА рд╣реИ, рд╡реЗ рдРрд╕реА рд╣реИрдВ рдЬреЛ рдореБрдЭреЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдорд┐рд▓реАрдВ рдФрд░ рдЖрдк рдбреЙрдХ рдореЗрдВ рд╕рднреА рд╡рд┐рдХрд▓реНрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рд▓реЛрдбрд░
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рд╣реИ, рдЖрдк рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЬреНрдпрд╛рдорд┐рддрд┐ рдФрд░ рдмрд╣реБрднреБрдЬ рдореЗрд╖реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рд▓реЛрдЧ рдЕрдХреНрд╕рд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдЕрдкрдиреЗ рдЬреНрдпрд╛рдорд┐рддреАрдп рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдереНрд░реАред рдЬреЗрдПрд╕ рдХреЗ рдкрд╛рд╕ рдХреБрдЫ рд╕рдорд░реНрдерд┐рдд рдбрд╛рдЙрдирд▓реЛрдбрд░реНрд╕ рд╣реИрдВ рдЬреЛ рдХрдИ 3 рдбреА рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред
рдореБрдЦреНрдп
ObjectLoader JSON рдСрдмреНрдЬреЗрдХреНрдЯ / рд╕реАрди рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ JSON рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓реЛрдб
рдХрд░рддрд╛ рд╣реИ ред рдЕрдзрд┐рдХрд╛рдВрд╢ рдмреВрдЯрд▓реЛрдбрд░реНрд╕ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЖрдк рдпрд╣рд╛рдВ рд╕рдорд░реНрдерд┐рдд рдмреВрдЯрд▓реЛрдбрд░реНрд╕ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЖрдпрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдиреАрдЪреЗ рдПрдХ рдЫреЛрдЯреА рд╕реВрдЪреА рд╣реИ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдЖрдпрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдСрдирд▓рд╛рдЗрди рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рдкреНрд░рд╛рд░реВрдк GLTF рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рд╛рд░реВрдк "рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рдкрд╣реБрдВрдЪрд╛рдиреЗ, рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдХреЙрдореНрдкреИрдХреНрдЯ рдФрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХреЗ рд▓рд┐рдП рддреЗрдЬрд╝" рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рд╣реИред
рдмреЗрд╢рдХ, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдиреЗ рдХреЗ рдХрдИ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЧреБрдгрд╡рддреНрддрд╛ рдПрдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИ рдпрд╛ 3 рдбреА рдкреНрд░рд┐рдВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рдЯреАрдХрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред GLTF рдЖрдпрд╛рдд рдХрд░рддреЗ рд╕рдордп рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдСрдирд▓рд╛рдЗрди рдкреНрд░рджрд░реНрд╢рди рд╣реЛрдЧрд╛ред
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js'; import model from '../models/sample.gltf'; let loader = new GLTFLoader(); loader.load(model, function (geometry) {
рдпрд╣ рд╕рдм рдПрдХ рд╕рд╛рде рд░рдЦрдирд╛
рддреАрди рд╡рдЬрд╣реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдбрд░рд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХреЛрдб рдХреА рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдХреБрдЫ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдкрд░реЛрдХреНрдд рдкреНрд░рддреНрдпреЗрдХ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ рджреГрд╢реНрдп рдФрд░ рдПрдХ рдХреИрдорд░рд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЗрд╕ рдХреЛрдб рдХреЛ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрд╛, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдПрдХ рд╕рд╛рде рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛ред
рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЖрдкрдХреЗ рдКрдкрд░ рд╣реИред рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдЬреИрд╕реЗ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдпрд╣ рд╕рднреА рдХреЛрдб рдХреЛ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдХреЛрдб рдЖрдзрд╛рд░ рдФрд░ рдЙрд╕рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рддрддреНрд╡реЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИред
рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрди рддрддреНрд╡реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдПрдХ рд╣реА рд╡рд╕реНрддреБ рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рднреА рдХреЛрдб рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбрд╛рд▓ рджреЗрдВрдЧреЗред
рдХреНрдпрд╛ рдореБрдЭреЗ рдПрдХ рд░реВрдкрд░реЗрдЦрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
рдЕрдВрдд рдореЗрдВ, рдпрд╣ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рде рдереНрд░реА.рдЬреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ? рдлрд┐рд▓рд╣рд╛рд▓,
рд░рд┐рдПрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рддреАрди-рдлрд╛рдЗрдмрд░ рдкреИрдХреЗрдЬ рд╣реИред рд░рд┐рдПрдХреНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕реНрдкрд╖реНрдЯ рд▓рд╛рдн рд╣реИрдВ - рдЖрдк рдЙрди рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдХреЛрдб рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрдкрдХреЛ рд╕рд╛рдорд╛рдиреНрдп
рд╡реЗрдирд┐рд▓рд╛ рдЬреЗрдПрд╕ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рддреАрди.js рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдЕрдзрд┐рдХрд╛рдВрд╢ рдСрдирд▓рд╛рдЗрди рд╕рд╛рдордЧреНрд░реА рд╡реЗрдирд┐рд▓рд╛ JS рдкрд░ рддреАрди.js рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред рдореЗрд░реЗ рд╕реАрдЦрдиреЗ рдХреЗ рдЕрдиреБрднрд╡ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдпрд╣ рдПрдХ рдкреИрдХреЗрдЬ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рднреНрд░рд╛рдордХ рдФрд░ рдХрдард┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рддреАрди.js рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдШрдЯрдХреЛрдВ рдФрд░ рдкреНрд░реЙрдкреНрд╕ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред (рдЬреИрд╕реЗ рд╣реА рдЖрдк рдереНрд░реАред рдЬреЗрдПрд╕ рд╕реАрдЦрддреЗ рд╣реИрдВ рдЖрдк рдХрд┐рд╕реА рднреА рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдереНрд░реАрдЬреЗрдЬ рдХреИрд╕реЗ рдЬреЛрдбрд╝реЗрдВ
рддреАрди.js рдПрдХ HTML рдСрдмреНрдЬреЗрдХреНрдЯ (рдЬрд┐рд╕реЗ рдЕрдХреНрд╕рд░
рд░реЗрдВрдбрд░рд░.рдбреЛрдореЗрдореЗрдВрдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХрд┐рд╕реА рднреА HTML рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕
рдЖрдИрдбреА = "рдереНрд░реАрдЬ" рдХреЗ рд╕рд╛рде рдПрдХ
рдбрд┐рд╡ рд╣реИ , рддреЛ рдЖрдк рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдереНрд░реАред рдЬреЗрдПрд╕ рдХреЛрдб рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
document.getElementById('threejs').appendChild(renderer.domElement);
рдХреБрдЫ рдЪреМрдЦрдЯреЛрдВ рдиреЗ рдкреЗрдбрд╝ рдХреЗ DOM рдиреЛрдбреНрд╕ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╕рдВрджреАрджрд╛ рд░рд╛рд╕реНрддреЗ рдмрдирд╛рдП рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ
рд░реЗрдлрд░реА , Vue рдореЗрдВ
$ рд░реЗрдл рдпрд╛ рдХреЛрдгреАрдп рдореЗрдВ
ngRef рдФрд░ рдпрд╣ рдбреЛрдо рддрддреНрд╡реЛрдВ рддрдХ рд╕реАрдзреА рдкрд╣реБрдВрдЪ рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рдЦрд┐рд▓рд╛рдл рдПрдХ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдЗрдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рддреНрд╡рд░рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреЗрдЦреЗрдВред
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рд░рдгрдиреАрддрд┐
рдпрджрд┐ рдЖрдк React рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЗ рдШрдЯрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рддреАрди.js рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред рдлрд╝рд╛рдЗрд▓ рдореЗрдВ
рддреАрдиEntryPoint.js рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд▓рд┐рдЦреЗрдВрдЧреЗ:
export default function ThreeEntryPoint(sceneRef) { let renderer = new THREE.WebGLRenderer();
рд╣рдо рдЗрд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ: рд╣рдорд╛рд░реЗ рдШрдЯрдХ рдореЗрдВ рдПрдХ рддрддреНрд╡ рдХрд╛ рд╕рдВрджрд░реНрднред рдЕрдм рд╣рдо рдЕрдкрдирд╛ рдХрдВрдкреЛрдиреЗрдВрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ
import React, { Component } from 'react'; import ThreeEntryPoint from './threejs/ThreeEntryPoint'; export default class ThreeContainer extends Component { componentDidMount() { ThreeEntryPoint(this.scene); } render() { return ( <> <div ref={element => this.scene = element} /> </> ); } }
рдЖрдпрд╛рддрд┐рдд
ThreeEntryPoint рдлрд╝рдВрдХреНрд╢рди
рдХреЛ ComponentsDidMount рд╡рд┐рдзрд┐ рдореЗрдВ рдмреБрд▓рд╛рдпрд╛
рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕рдВрджрд░реНрднреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдирдИ
div рдкрд╛рд╕
рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдк рднрдВрдбрд╛рд░ рдХреЛ рдХреНрд▓реЛрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВ:
https://github.com/BretCameron/three-js-sample ред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЕрднреА рднреА рдмрд╣реБрдд рдХреБрдЫ рд╣реИ рдЬреЛ рдореИрдВ рдереНрд░реА.рдЬреЗрдПрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдиреЗ рдЖрдкрдХреЛ рдЗрд╕ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рджреА рд╣реИред рдЬрдм рдореИрдВрдиреЗ рдереНрд░реАрдЬ рд╕реАрдЦрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рддреЛ рдореБрдЭреЗ рдЗрд╕ рд▓реЗрдЦ рдЬреИрд╕рд╛ рдПрдХ рднреА рд╕рдВрд╕рд╛рдзрди рдирд╣реАрдВ рдорд┐рд▓рд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрдХрдиреАрдХ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд▓рдн рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХреАред