2012-02-17 15 views
2

Я получаю экран координаты с помощью этого:Преобразование экрана координат в мировой системе координат

@Override 
public boolean onTouchEvent(MotionEvent ev) { 
x = ev.getX(0); 
y = ev.getY(0); 
return true; 
} 

И вот verticles из моих OPENGL 1,0 Площадь:

private float vertices[] = { 
     -1.0f, -1.0f, 0.0f,  // V1 - bottom left 
     -1.0f, 1.0f, 0.0f,  // V2 - top left 
     1.0f, -1.0f, 0.0f,  // V3 - bottom right 
     1.0f, 1.0f, 0.0f   // V4 - top right 
}; 

Все, кто работал с OPENGL знает , что если бы я вставлял переменные x и y вместо вертикалей, я получал бы абсолютную бессмыслицу. Мой вопрос: какую формулу я должен использовать для преобразования координат экрана x и y в мировые координаты, поэтому я мог бы использовать их для размещения моего квадрата до затронутой точки?

EDIT:

К сожалению, я забыл сказать, что это 2D игра ...

+0

Я не знаю, OpenGL, но вы рассматривали использование 'getRawX () '(возвращает абсолютные координаты) вместо' getX() '? –

ответ

1

Существует функция называется «gluunproject», который может сделать это для вас. Ссылка есть здесь.

http://www.opengl.org/sdk/docs/man/xhtml/gluUnProject.xml

Кстати, координаты экрана будет соответствовать 3D линии, проходящей от центра камеры через экранные координаты (изображение плоскости).

Входы ModelView, проекции и просмотра могут быть получены путем запроса OpenGL к текущим матрицам. См. Ту же ссылку (указаны вызовы функций).

Помимо параметров экрана x и y вам нужен параметр глубины или параметр z. Вы можете использовать диапазон глубины, чтобы поместить квадрат в определенную плоскость z. Или укажите значение по умолчанию. Но убедитесь, что он находится внутри видимой области.

Как только вы получите координаты объекта, рассмотрите его как центр квадрата и нарисуйте квадрат требуемой длины.

Сатиш

+0

обновите ссылку – Dev

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