Как я могу перевести координаты мыши в трехмерные координаты с помощью потолочной камеры в XNA 4.0? - PullRequest
3 голосов
/ 19 ноября 2010

Итак, я делаю игру в XNA 4.0, и у меня возникла проблема с переводом координат мыши в трехмерный мир. Я использовал метод Viewport.Unproject (), и он почти работает. Проблема в том, что моя проекция является «полем зрения», поэтому расстояние от центральных осей экспоненциально. Если я изменю проекцию на стандартную перспективу, мои трехмерные объекты деформируются. Есть ли математическое исправление для использования поля зрения с переведенными данными из координат мыши?

Я сейчас делаю триггер. вычислить ширину и высоту дальней плоскости на основе положения камеры, ширины и высоты области просмотра и угла fieldOfView. Есть ли лучший метод? Это почти мертвый.

Ответы [ 2 ]

0 голосов
/ 06 августа 2011

http://create.msdn.com/en-US/education/catalog/sample/picking_triangle

вот, пожалуйста. Курсор реализован в этом официальном примере кода от Microsoft. Проект не предназначен специально для курсора, но решение - в

0 голосов
/ 05 августа 2011

У меня такая же проблема, я просто не понял технического объяснения, пока не прочитал ваш вопрос.Я перевел исходную точку координат мыши, а затем умножил или разделил ее на коэффициент, чтобы небольшие движения мыши можно было увеличить в большем масштабе, который значительно отстает,

Хотя я не понимал свою проблемуимеет перспективу и поле зрения, то есть мышь движется по экрану или объективу камеры, а масштаб, который я пытаюсь переместить, далеко позади и больше, тем не менее, я сделал математику, чтобы она работала.просто потому, что я увидел разницу в экспоненциальном масштабировании, это просто

Это то, что я сделал

translated-X =  { mouse-X + (screenwidth/2) } / 2.7;
translated-Y =  {-mouse-Y + (screenHeight/2)} / 2.8;

, и метод с текущими значениями хорошо переводит для моих текущих настроек, которые

  • камера находится в (0,0,260)
  • для каждого элемента, у которого есть координаты (x, y, 0), поэтому они лежат в X & Y плоскость
  • мое разрешение экрана, PreferredBackBufferWidthxHeight равно 1024 x 768

только для трех вышеприведенных условий мое уравнение работает.

но если изменить какое-либо из вышеуказанных значений, мне придется скорректировать уравнения в соответствии со сценариями, поэтому эти жестко запрограммированные значения 2.7 и 2.8 будут переменными и должны быть рассчитаны в соответствии с положением камеры и разрешением экрана

эти 2.7 и 2.8 содержат шкалу до определенной точки, теперь

Универсальная формула для перевода , я мог бы сформулировать это, используя технику, названную Числовой анализ Я хорош в этом, нодля этого мне нужны данные, которые я не могу получить самостоятельно, мне нужно выяснить расстояние до камеры, настройки перспективы, при которых определенное разрешение полностью находится в поле зрения.

То есть, если мое разрешение 1024x768Исходя из того, на каком расстоянии камеры мы видим исходную точку, мы на самом деле видим 1024 точки вокруг оси x и 768 точек вокруг оси y.Точно так же мне нужно по крайней мере еще два показания для более высоких разрешений.

И я не могу получить эти значения, потому что мой глупый старый монитор поддерживает максимум 1024x768, я не могу пойти выше.Если вы сможете определить расстояние до камеры для нескольких разрешений, я сформулирую соотношение и предложу общую формулу.

...