рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдкрддрд╛ рдерд╛ рдХрд┐ рд╕реНрдХреНрд░реАрди рдХреЗ (x, y) рдкрд░ рдПрдХ рдмрд┐рдВрджреБ рдХреЛ '3 рдбреА' рдХреЗ рдмрд┐рдВрджреБ рдкрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддрд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдХрд┐рд╕реА рднреА рд╕реБрд░рд╛рдЧ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рд╕рдВрднрд╡рддрдГ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди MrDoob рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирддрд╛ рд╣реИ :)
рдЙрд╣, рд╢рд╛рдпрдж рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ object3d.screen
рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ Vector2
рдФрд░ рд╣рд░ рд░реЗрдВрдбрд░ рдкрд░ рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛?
рдпрджрд┐ рд╡рд╣ object3D.screen рд╡реЗрдХреНрдЯрд░ рдХреЗрд╡рд▓ object3D.position рдХреЛ рд╣рд░ object3D рдХреЛ 2 рдбреА рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рд▓реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ object3D.screen рдмрд╣реБрдд рдХрдо рдореВрд▓реНрдп рдХрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛? рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ: рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рдмрд┐рдВрджреБ x, y, рд╕реНрдерд┐рддрд┐ x рдкрд░ рдХрд┐рд╕реА рднреА рдЬрд╛рд▓ рдХреЗ z, 2D рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдореЗрдВ z, рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред
рдмрджрд▓реЗ рдореЗрдВ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рд░ рд╡рд╕реНрддреБ рдХреА рд╣рд░ 3 рдбреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди THREE.3dto2d()
рдЬреЛ рдпрд╛ рддреЛ рдПрдХ рд╡реЗрдХреНрдЯрд░ 3 (рджреГрд╢реНрдп рдореЗрдВ рдПрдХ рдмрд┐рдВрджреБ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ) рдпрд╛ рдПрдХ рд╡реЗрдХреНрдЯрд░ 3 рдФрд░ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ (рдЬрд╣рд╛рдВ рд╡реЗрдХреНрдЯрд░ 3 рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдПрдХ рдмрд┐рдВрджреБ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ) рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред
рдлрд╝рдВрдХреНрд╢рди рддрдм рджреГрд╢реНрдп рдореЗрдВ 3 рдбреА рд╕реНрдерд┐рддрд┐ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред
рдЕрдВрдд рдореЗрдВ, рдпрд╣ рдХреИрдорд░рд╛, рдЗрд╕рдХреА рд╕реНрдерд┐рддрд┐, рд░реЛрдЯреЗрд╢рди, рдкреНрд░реЛрдЬреЗрдХреНрд╢рдирдореИрдЯрд┐рдХреНрд╕ рдЖрджрд┐ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдмрд┐рдВрджреБ рдХреЛ 2 рдбреА рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреИрдорд░рд╛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ...
рдЦреИрд░ ... Projector.projectScene
рдереЛрдбрд╝реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИ;)
рджреЗрдЦреЗрдВ, рдореБрдЭреЗ рдкрддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ рдерд╛ ... ;-)
рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рд╣реИ?
рд╣рдореНрдо ... рдЕрднреА рддрдХ рдирд╣реАрдВ ... рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд░реЗрдВрдбрд░рд░ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ... рд╡реЗ рдореВрд▓ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдВрдмрдВрдз рдирд╣реАрдВ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рд╢рд╛рдпрдж рдореБрдЭреЗ рдореВрд▓ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд▓рд┐рдВрдХ рдбрд╛рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╡рд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ ... рд╣рдореНрдо, рдереЛрдбрд╝рд╛ рдФрд░ рд╕реЛрдЪрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред
рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЫреБрдЯреНрдЯрд┐рдпреЛрдВ рдкрд░ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЬреИрд╕реЗ рд╣реА рдореИрдВ рд╡рд╛рдкрд╕ (рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣) рдПрдХ рд▓реЗрдВрд╕ рднрдбрд╝рдХрдирд╛ рдбреЗрдореЛ (рдпрд╛ рдХреБрдЫ) рдХрд░реВрдВрдЧрд╛ред
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЕрдкрдиреА рдЫреБрдЯреНрдЯрд┐рдпреЛрдВ рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВ рдФрд░ рдореИрдВ рдирдП рдбреЗрдореЛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ! :-)
рд╣рдореНрдо, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП (r32) рдХрд╛рдо рдХрд░рддрд╛ рдерд╛, рдЕрдм r35 рдореЗрдВ рдирд╣реАрдВ рд╣реИред
toScreenXY: function(position, camera, jqdiv) {
// converts 3D position to screen coords
var pos = position.clone();
projScreenMat = new THREE.Matrix4();
projScreenMat.multiply( camera.projectionMatrix, camera.matrix);
projScreenMat.multiplyVector3(pos);
return { x: (pos.x+1)*jqdiv.width()/2 + jqdiv.offset().left,
y:(-pos.y+1)*jqdiv.height()/2 +jqdiv.offset().top };
},
projScreenMat.multiplyVector3(pos);
рдмрд╛рдж -1 рдФрд░ 1 (0,0) рджреГрд╢реНрдп рдХреЗ рдХреЗрдВрджреНрд░ рдореЗрдВ рдЫрд╛рдпрд╛ рд╣реБрдЖ рдХрд░рддрд╛ рдерд╛ред), рд▓реЗрдХрд┐рди рдЕрдм рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИред
рд╣рд╛рдБ, camera.matrix
рдХреЛ рдЕрдм camera.matrixWorldInverse
рдмрджрд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
toScreenXY: function ( position, camera, jqdiv ) {
var pos = position.clone();
projScreenMat = new THREE.Matrix4();
projScreenMat.multiply( camera.projectionMatrix, camera.matrixWorldInverse );
projScreenMat.multiplyVector3( pos );
return { x: ( pos.x + 1 ) * jqdiv.width() / 2 + jqdiv.offset().left,
y: ( - pos.y + 1) * jqdiv.height() / 2 + jqdiv.offset().top };
}
рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╣рд╛рдБ, рдкрд░рд┐рд╡рд░реНрддрди matrices рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рдерд╛ред рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкреНрд░рдХреНрд╖реЗрдкрдг рд╕рдорд╛рд░реЛрд╣ рдиреЗ alivedise рдХреЗ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджрд┐рдпрд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 3 рдбреА рдХреНрдпреВрдм рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░рд╛ рд╕рд╡рд╛рд▓ рдкреВрдЫрдирд╛ рд╕рд╣реА рдзрд╛рдЧрд╛ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЪреЗрд╣рд░реЗ рдХреЗ рд╕рд╛рде рдХреИрдирд╡рд╛рд╕ рдкрд░ рдПрдХ рдХреНрдпреВрдм рдЦреАрдВрдЪрд╛ рдЧрдпрд╛ рд╣реИред рдХреНрдпреВ рдПрдХреНрд╕ рдПрдХреНрд╕ рдФрд░ рд╡рд╛рдИ рдЕрдХреНрд╖ рдкрд░ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдШреВрдо рд░рд╣рд╛ рд╣реИред рдЬрдм рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╕рдмрд╕реЗ рд╕рд╛рдордиреЗ рд╡рд╛рд▓рд╛ рдЪреЗрд╣рд░рд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛ, рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдорд╛рдЙрд╕ рдХреЛ рдЫреЛрдбрд╝ рджреЗ рдФрд░ рдЗрд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдШреБрдорд╛рдХрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗред рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХреЛрдИ рдорджрдж рдЕрддреНрдпрдзрд┐рдХ рдкреНрд░рд╢рдВрд╕рдиреАрдп рд╣реЛрдЧреАред
рдзрдиреНрдпрд╡рд╛рджред
@ imrantariq2011 : рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпрд╛ рдЖрдкрдХреЛ рдПрдХ рдирдпрд╛ рдЦреЛрд▓рдиреЗ рдХрд╛ рдорди рд╣реИ? рдзрдиреНрдпрд╡рд╛рджред
рдмрдирд╛рд╡рдЯ рдорд╛рдирдЪрд┐рддреНрд░рдг рдкреНрд░рдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдореИрдВ x рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, y рд╕реНрдХреНрд░реАрди рдПрдХ рджрд┐рдП рдЧрдП рдЪреЗрд╣рд░реЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдХреЛрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд░рддрд╛ рд╣реИред
рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд (toScreenXY: function) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рджрд┐рдП рдЧрдП рдЪреЗрд╣рд░реЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реНрд╡ рд░реВрдкрд╛рдВрддрд░рд┐рдд (рд╕реНрдХреЗрд▓реНрдб, рдЕрдиреБрд╡рд╛рджрд┐рдд рдФрд░ рдШреБрдорд╛рдП рдЧрдП) рдХреЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдореИрдВрдиреЗ Projector.projectScene рдХреЛ рджреЗрдЦрдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рдордп рдмрд┐рддрд╛рдпрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЙрдкрд░реЛрдХреНрдд рд▓рдХреНрд╖реНрдп рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рддрд░реАрдХрд╛ рд╣реИ рдФрд░ рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ редmatrixWorld.getPosition () рдЪреЗрд╣рд░реЗ рдХреЗ рдХреЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдХреЗрдВрджреНрд░рдХ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рд╣рд╛рдБ, рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдХрд┐рд╕реА рдПрдХ рдХреЗ рд▓рд┐рдП рдерд╛ред рдпрджрд┐ рдЖрдкрдХреЛ .projectScene()
рд╕реЗ рдХреЛрдб рдХреЗ рдмрд┐рдЯреНрд╕ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ рддреЛ рдХрдИ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпрд╣рд╛рдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
рдлрдВрдХреНрд╢рди toScreenXY (рдкреЙрд╕ 3 рдбреА)
{{
var рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ = рдирдпрд╛ THREE.Projector ();
var v = рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░.projectVector (рдкреЙрд╕ 3 рдбреА, рдХреИрдорд░рд╛);
var percX = (vx + 1) / 2;
var percY = (-vy + 1) / 2;
var left = percX * window.innerWidth;
var top = percY * window.innerHeight;
рдирдпрд╛ THREE.Vector2 (рдмрд╛рдПрдВ, рдКрдкрд░) рд▓реМрдЯреЗрдВ;
}
рд╢реБрдХреНрд░рд╡рд╛рд░, 1 рдЕрдЧрд╕реНрдд, 2014 11:24 рдкреВрд░реНрд╡рд╛рд╣реНрди, рдЖрд░реНрдЯреЗрдо рдлрд┐рдЯрд┐рд╕реНрдХрд┐рди рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:
рдЬрдм рдореИрдВ toScreenXY рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдмрд╣реБрдд рдмрдбрд╝реЗ рдореВрд▓реНрдп рдорд┐рд▓рддреЗ рд╣реИрдВред
рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ (рдкреЙрдЬрд╝): // x: -1474.1436403989792, y: -730.829023361206, z: 3.0004000663757324
рдФрд░ рдЗрд╕реЗ jqdiv рдХреЗ рд╕рд╛рде рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдлрд╝рдВрдХреНрд╢рди рдмрд╣реБрдд рдмрдбрд╝рд╛ x рдФрд░ y рджреЗрддрд╛ рд╣реИред
рдореИрдВ рдХреНрдпрд╛ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБ?
-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВред
@ рдпрд╛рд░реАрд▓рдЬреЗрдХ
рдХреЗ рд░реВрдк рдореЗрдВ рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рджрд┐рд╢рд╛ рдирд┐рд░реНрджреЗрд╢реЛрдВ , рдорджрдж рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП stackoverflow ред рдпрд╣ рдмреЛрд░реНрдб рдмрдЧ рдФрд░ рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИред
рдареАрдХ рд╣реИ ... рдЕрднреА рддрдХ рд╢реНрд░реА doob рдЦреБрдж рдХреЛрдб рдбрд╛рд▓ рджрд┐рдпрд╛, рддреЛ рдХреНрдпрд╛ рджреЗрддрд╛ рд╣реИ?
@ рд╕рд╛рд▓рд▓рдЬреЗрдХ # 1979
рдЙрдиреНрдирдпрди рдХреЗ рдмрд╛рдж рднреА рдХрд┐рд╕реА рдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ...
function screenXY(obj){
var vector = obj.clone();
var windowWidth = window.innerWidth;
var minWidth = 1280;
if(windowWidth < minWidth) {
windowWidth = minWidth;
}
var widthHalf = (windowWidth/2);
var heightHalf = (window.innerHeight/2);
vector.project(camera);
vector.x = ( vector.x * widthHalf ) + widthHalf;
vector.y = - ( vector.y * heightHalf ) + heightHalf;
vector.z = 0;
return vector;
};
рдареАрдХ рд╣реИ, рдмрд╣реБрдд рдкреБрд░рд╛рдирд╛ рдореБрджреНрджрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдиреЗрд╕реНрдЯреЗрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдерд╛, рдЬреЛ рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛ред
рдореЗрд░рд╛ рдорд╛рдорд▓рд╛ рдерд╛: рдореИрдВ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рдмрд╛рдж рдПрдХ рдиреЗрд╕реНрдЯреЗрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ x-and-y (рдФрд░ z) рд╕реНрдерд┐рддрд┐ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ред
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ:
scene.updateMatrixWorld();
рддрдерд╛
parent.updateMatrixWorld();
`` `рдЬреЗ.рдПрд╕.
рдлрд╝рдВрдХреНрд╢рди nestedObjecttoScreenXYZ (obj, рдХреИрдорд░рд╛, рдЪреМрдбрд╝рд╛рдИ, рдКрдВрдЪрд╛рдИ)
{{
var рд╡реЗрдХреНрдЯрд░ = рдирдпрд╛ THREE.Vector3 ();
рд╡реЗрдХреНрдЯрд░.рд╕реЗрдЯрдлреНрд░реЙрдордореИрдЯреНрд░рд┐рдХреНрд╕ рдореИрдЯреНрд░рд┐рдХреНрд╕ (obj.matrixWorld);
var widthHalf = (рдЪреМрдбрд╝рд╛рдИ / 2);
var heightHalf = (рдКрдВрдЪрд╛рдИ / 2);
рд╡реЗрдХреНрдЯрд░.рдкреНрд░реЛрдЬреЗрдХреНрдЯ (рдХреИрдорд░рд╛);
рд╡реЗрдХреНрдЯрд░.x = (рд╡реЗрдХреНрдЯрд░.x * рдЪреМрдбрд╝рд╛рдИрд╣рд▓реНрдлрд╝) + рдЪреМрдбрд╝рд╛рдИрд╣рд▓реНрдлрд╝;
рд╡реЗрдХреНрдЯрд░.рдп = - (рд╡реЗрдХреНрдЯрд░.рдп * рдКрдВрдЪрд╛рдИрд╣рд▓реНрдлрд╝) + рдКрдВрдЪрд╛рдИрд╣рд▓реНрдлрд╝;
рд╡рд╛рдкрд╕реА рд╡реЗрдХреНрдЯрд░;
};
typical call:
```js
var screenpos=NestedObjecttoScreenXY(object,camera,renderer.domElement.width,renderer.domElement.height,true);
рдмрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд┐рд╕реА рдХреЛ рднреА рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдЪрд▓рд╛рддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЙрдиреНрдирдпрди рдХреЗ рдмрд╛рдж рднреА рдХрд┐рд╕реА рдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ...