Есть ли способ получить 3D-координаты на некоторой плоскости для 2D-координат мыши во Flash с Away3D? - PullRequest
1 голос
/ 01 августа 2011

Waht - это правильный способ получить 3D-координаты из 2D-координат мыши с помощью Away3D.(версия 3.6.0) В целом это проблема неоднозначности, поэтому есть ограничение, что 3D-точка принадлежит некоторой фиксированной плоскости.

Есть несколько примеров с методами camera.unproject и plane.getIntersectionLineNumbers, но ониработать, если камера вращается или плоскость не тривиальна.

Ответы [ 2 ]

1 голос
/ 01 августа 2011

Я почти уверен, что Away3D реализовал это в некоторых приятных функциях, но вот как я это сделаю.Я предполагаю, что вы имеете в виду ортографическую проекцию из «пленки» камеры в мировое пространство (не знаю, как это реализовано).

Вы проецируете луч из плоскости обзора камеры, поэтомув основном ищет, чтобы найти пересечение луча и плоскости.Луч начинается с «глаза» камеры и проходит через плоскость обзора камеры.

Таким образом, точка пересечения 3D между ними будет:

Point getIntersection(Ray ray) {
  float k, t;
  Point point;
  Vector toPoint;

  k = ray.direction.dot(this.normal);

  if (k != 0.0) {
    t = (this.position - ray.origin).dot(this.normal) / k;
  } else {
    return false;
  }

  if (t < 0.0000001) {
    return false;
  }

  return ray.origin + ray.direction * t;
}

Я использовал аналогичныекод в моем raytracer, поэтому он должен работать.

0 голосов
/ 27 ноября 2013

Сначала вам нужно получить «луч», который в результате щелчка мыши создает в трехмерном пространстве. Затем вы находите нужную точку, вычисляя пересечение этого луча и вашей поверхности (немного математики здесь). В моем случае мне нужно было получить точку на сфере, где щелкнул пользователь.

Чтобы получить «Луч»:

var vector:Vector3D = new Vector3D(mX/camera.zoom, -mY/camera.zoom, camera.focus);
vector = camera.transform.matrix3D.deltaTransformVector(vector);

Обратите внимание на объект «камера» выше.

Если вы хотите увидеть мою реализацию со сферой, посмотрите https://github.com/SabinT/Earth3D

...