0
나는 태양계를 만들기 위해 ThreeJS와 협력 중이다. 나는 중간에 태양이 있고 주위 8 궤도에있다. 이제 사용자가지도의 아무 곳이나 클릭하면 가장 가까운 링 포이즌을 얻고 싶습니다! ThreeJS : 마우스 클릭 좌표로 선 그리기
Here is an image to describe it visually what I mean
화살표
는 상기 사용자의 "클릭"을 나타내며, 그 다음에 위치 궤도와 좌표 (흰 점)을 얻을 수있는 기능이 있어야 할 곳에 클릭 포인트 중간에 충돌의 경계선 .나는 여기에서 많은 다른 기능들을 시도했지만, 그들 중 누구도 내가 원하는 결과를주지 못했다.
도움 주셔서 감사합니다.
이 코드는 다음과 같이 현재 보이는 : 마우스가있는 지점에 카메라에서
var container, stats, parent, pivots, domEvents, twins, planets, sun, fleets, raycaster, mouse;
var camera, controls, scene, renderer;
var cross;
planets = new Array();
init();
animate();
function init()
{
raycaster = new THREE.Raycaster();
mouse = new THREE.Vector2();
//init
camera = new THREE.PerspectiveCamera(10, 1, 1, 4000);
camera.position.z = 200;
camera.position.x = 200;
camera.position.y = 200;
controls = new THREE.OrbitControls(camera);
controls.addEventListener('change', render);
scene = new THREE.Scene();
scene.fog = new THREE.FogExp2(0x000000, 0);
// renderer
renderer = new THREE.WebGLRenderer({antialias: false, alpha: true});
renderer.setSize(document.getElementById('canvasreference').offsetWidth, document.getElementById('canvasreference').offsetWidth);
renderer.setClearColor(0x787878, 0.5); // the default
container = document.getElementById('canvasreference');
container.appendChild(renderer.domElement);
window.addEventListener('resize', onWindowResize, false);
domEvents = new THREEx.DomEvents(camera, renderer.domElement);
//axihelper
scene.add(new THREE.AxisHelper(130));
// parent
parent = new THREE.Object3D();
scene.add(parent);
//arrays
orbits = new Array();
addOrbit();
window.addEventListener('click', onMouseMove, false);
}
function onMouseMove(event) {
canvas = renderer.domElement;
raycaster = new THREE.Raycaster();
mousePosition = new THREE.Vector2();
canvasPosition = $("#canvasreference canvas").position();
console.log(canvasPosition);
mousePosition.x = ((event.clientX - canvasPosition.left)/canvas.width) * 2 - 1;
mousePosition.y = -((event.clientY - canvasPosition.top)/canvas.height) * 2 + 1;
raycaster.setFromCamera(mousePosition, camera);
var geometry = new THREE.Geometry();
var origin = new THREE.Vector3(raycaster.ray.origin.x, 0, raycaster.ray.origin.y);
geometry.vertices.push(origin);
var vektor = new THREE.Vector3(raycaster.ray.direction.x, 0, raycaster.ray.direction.y);
for (var i = 0; i < 1000; i++)
{
origin.add(vektor);
geometry.vertices.push(vektor);
}
var material = new THREE.LineBasicMaterial({
color: 0xffffff, linewidth: 20
});
var line = new THREE.Line(geometry, material);
scene.add(line);
renderer.render(scene, camera);
}
function onWindowResize() {
camera.aspect = window.innerWidth/window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(600, 600);
render();
}
function animate() {
requestAnimationFrame(animate);
controls.update();
renderer.render(scene, camera);
}
function render() {
renderer.render(scene, camera);
}
/**
* add Orbit line
* @param {type} orbit
* @returns {undefined}
*/
function addOrbit(orbit)
{
for (var i = 0; i < 8; i++)
{
//make orbit line
var orbit = new THREE.EllipseCurve(
0, 0, // ax, aY
i * 10 + 30, i * 10 + 30, // xRadius, yRadius
0, 2 * Math.PI, // aStartAngle, aEndAngle
false, // aClockwise
0 // aRotation
);
var path = new THREE.Path(orbit.getPoints(100));
var geometry = path.createPointsGeometry(100);
var material = new THREE.LineBasicMaterial({color: 0xffffff});
var ellipse = new THREE.Line(geometry, material);
ellipse.rotation.x = 1.5708;
scene.add(ellipse);
}
}
</script>
그래,하지만 그 행성과 교차하고 싶지 않아. 또한, 내 마우스가있는 지점은 우주의 어딘가, 내 궤도 근처가 아닙니다. [여기에서 볼 수 있습니다] (http://krawalltimmy.de/invo-master/) 하지만 가장 가까운 궤도의 좌표를 내 마우스의 위치로 가져 오려고합니다. – Krawalltimmy
@Krawalltimmy 방금 귀하의 의견을 내 대답을 편집했습니다. 희망이 도움이 될 것입니다. '_ '은 밑줄입니다 .js – SOReader