2012-02-03 8 views
1

Я пишу 2D-игру, используя обертку OpenGLES. Существует камера, нацеленная на кучу текстур, которые являются спрайтами для игры. Пользователь должен иметь возможность перемещать вид вокруг, перемещая пальцы по экрану. Проблема в том, что камера находится на расстоянии около 100 единиц от текстур, поэтому, когда палец скользит по экрану для панорамирования камеры, спрайты движутся быстрее, чем палец из-за эффекта параллакса.конвертировать 2D-координаты экрана в 3D-координаты пространства в C++?

Так что, в основном, мне нужно преобразовать 2D-координаты экрана в 3D-координаты на определенном расстоянии от него (в моем случае 100, потому что это как далеко от текстур).

Есть функции "Unproject" в C#, но я использую C++, поэтому мне нужна математика за этой функцией. Я чрезвычайно новичок в 3D-материалах, и я очень плохо разбираюсь в математике, поэтому, если вы можете объяснить, как вы объясняете 10-летнему, что было бы очень оценено.

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

+1

Некоторые из 10-летних очень хороши в математике: P –

ответ

0

Найдено ответ на: Wikipedia

Это имеет следующую формулу:

Для того, чтобы определить, какой экран х-координата соответствует точке Ax, Az умножить координаты точки по:
enter image description here

где Вх экран координаты х
Ах это модель координаты х
Bz - фокусное расстояние - осевое расстояние от центра камеры до плоскости изображения
Az - расстояние до объекта.

+0

Хотя это теоретически может ответить на вопрос, мы хотели бы, чтобы вы включили в свой ответ важные части связанной статьи и предоставили [ссылку для справки] (http : //meta.stackexchange.com/q/8259). Если это не удастся, это даст ответ на риск от гниения. – Kev

0

В общем, вам нужно будет масштабировать расстояние до вашего пальца, чтобы использовать его в далекой плоскости (z отстоит).

, т. Е. Это единица измерения количества движения пальца, и если вы хотите найти эффект z единицы, длина l '= l/z Но, пожалуйста, проверьте эффект и отрегулируйте l' (double/половина и т. д.), чтобы получить желаемый эффект.

Смежные вопросы