ΠΡΠΈΠ²Π΅Ρ, ΡΠ΅Π±ΡΡΠ°
Π― Ρ
ΠΎΡΠ΅Π» Π±Ρ Π·Π½Π°ΡΡ, ΠΊΠ°ΠΊ Ρ ΠΌΠΎΠ³Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ 3D-ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΡΡΠΈ ΡΠΎΡΠΊΠΈ ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ 2d
ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°
function onDocumentMouseDown( event ) {
event.preventDefault();
mouse2d.x = ( event.clientX / window.innerWidth ) * 2 - 1;
mouse2d.y = - ( event.clientY / window.innerHeight ) * 2 + 1;
mouse2d.z = 1;
var r = new THREE.Ray();
r.origin.copy( mouse2d );
var matrix = camera.matrixWorld.clone();
matrix.multiplySelf( THREE.Matrix4.makeInvert( camera.projectionMatrix ) );
matrix.multiplyVector3( r.origin );
r.direction = r.origin.clone().subSelf( camera.position );
var c = THREE.Collisions.rayCastNearest( r );
if( c ) {
//////////////////HERE GET THE 3D POINT COORDINATES////////////////////////
c.mesh.materials[ 0 ].color.setHex( 0xaa0000 );
} else {
plane.materials[0].color.setHex( 0xF9EFD7 );
}
};
ΠΠ±ΡΠ΅ΠΊΡ ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ - ΡΡΠΎ ΠΏΠ»ΠΎΡΠΊΠΎΡΡΡ, ΠΊΠΎΡΠΎΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π΅ΠΌΠ»ΠΈ, ΠΈ Ρ Ρ
ΠΎΡΡ Π·Π½Π°ΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΡΠΎΡΠΊΠΈ ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ Π² 3D, ΡΡΠΎΠ±Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
Π·Π°ΡΠ°Π½Π΅Π΅ ΡΠΏΠ°ΡΠΈΠ±ΠΎ
ΠΠ΅Π²Π°ΠΆΠ½ΠΎ, Π½Π°ΡΠ΅Π» ΡΡΠΎ
ΠΠ°ΠΊ Π²Ρ Π² ΠΈΡΠΎΠ³Π΅ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π»ΠΈ?
Π£ ΠΌΠ΅Π½Ρ ΡΠ°ΠΌΠ° ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°. ΠΠ΅Π½Ρ Π΄Π°ΠΆΠ΅ Π½Π΅ ΡΠ΄Π°ΡΠΈΠ» ΠΊΠΎΠ»Π»Π°ΠΉΠ΄Π΅Ρ. ΠΠ°ΠΊ Π²Ρ Π΅Π΅ ΡΠ΅ΡΠΈΠ»ΠΈ?
@inear : Π²Ρ ΠΏΡΠΎΠ±ΠΎΠ²Π°Π»ΠΈ Ρ ΠΊΠ»Π°ΡΡΠΎΠΌ Ray
?
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ! ΠΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΊΠ°ΠΊ ΡΠ°ΡΠΌ. Π’ΠΎΡΠ΅ΡΠ½ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΊΠ°ΠΊ ΡΠ°Π· ΡΠΎ, ΡΡΠΎ ΠΌΠ½Π΅ Π½ΡΠΆΠ½ΠΎ.
var vector = mouse2D;
projector.unprojectVector( vector, camera );
var r = new THREE.Ray(camera.position, vector.subSelf(camera.position).normalize());
var c = r.intersectObject(wave)
if( c.length > 0 ) {
sphere.position = c[0].point;
}
var getZvalue = function (e)
{
var rect = e.target.getBoundingClientRect();
// 2D
var mouseX = e.clientX - rect.left;
var mouseY = e.clientY - rect.top;
// 3D
SCREEN_WIDTH = window.innerWidth;
SCREEN_HEIGHT= window.innerHeight;
var mouse = new THREE.Vector2();
mouse.x = (mouseX/SCREEN_WIDTH) *2 - 1;
mouse.y = -(mouseY/SCREEN_HEIGHT) *2 + 1;
// Raycaster
if (TerraDroneViewer.raycaster == null)
{
TerraDroneViewer.raycaster = new THREE.Raycaster();
}
TerraDroneViewer.raycaster.setFromCamera( mouse, TerraDroneViewer.camera );
var intersects = TerraDroneViewer.raycaster.intersectObjects( TerraDroneViewer.maps.children );
console.log("raycast=" + intersects.length);
if (intersects.length != 0)
{
var x = mouse.x * 10;
var y = mouse.y * 10;
console.log("x = " + intersects[0].point.x + " y = " + intersects[0].point.y);
var z = parseFloat(intersects[0].point.z) * 10;
return {
x: x,
y: y,
z: z
}
}
return null;
};