Objective-c открывает доступ к знанию экранных координат объектов / моделей

#objective-c #opengl-es #coordinates

#objective-c #opengl-es #координаты

Вопрос:

Есть ли способ получить экранные координаты объектов в 3D мире?

Ответ №1:

Реализовать gluProject() .

РЕДАКТИРОВАТЬ: в Mesa / SGI есть некоторый код.

ОТРЕДАКТИРУЙТЕ 2: Или возьмите копию GLU для iOS.

Комментарии:

1. @marcg11: Отредактировано. Это в значительной степени самый простой способ.

2. Привет, ты знаешь, как добавить библиотеку в свой проект? В readme сказано: Для компиляции для симулятора: создайте ARCH = ПЛАТФОРМА i386= iPhoneSimulator Для компиляции для устройства: создайте ARCH = ПЛАТФОРМА armv6 = iPhoneOS

Ответ №2:

Просто реализуйте преобразования конвейера OpenGL: modelview, projection, perspective divide, viewport. Вы получаете запрос к текущим матрицам с помощью glGetDoublev и viewort с помощью glGetIntegerv.

Затем вам нужно вычислить матрицу проекции, умноженную на матрицу modelview = MVP.

теперь для каждой вершины v вычислите MVP * v.

затем вычислите v / = v.w;

Итак, у вас есть координаты в диапазоне [-1,1] x[-1,1], последнее, что нужно сделать, это масштабировать и преобразовать это в [x, x w] x [y, y h] (которые являются значениями окна просмотра).

Вы также можете просмотреть информационные страницы справочника OpenGL для glFrustum, glViewport, чтобы увидеть, как выполняются все эти преобразования.

Комментарии:

1. Вау, я не так уж много знаю OpenGLES. То есть функция gluproject не реализована? Кстати, спасибо.

2. Я не знаю, у меня есть только опыт работы с GL на рабочем столе, где реализован gluProject. Если это есть, вы можете использовать это (на самом деле это делает именно то, что я написал). Но, возможно, ссылка genpfault на gluProject предоставит вам лучшее объяснение его работы, чем мой ответ. С этими объяснениями это должно быть довольно легко реализовать самостоятельно.

3. Я посмотрю на это. Я не знаю, насколько opengl для настольных компьютеров отличается от OpenGLES для iphone.

4. В этом отношении не должно быть различий. Я только имел в виду, что я не знаю, есть ли GLU в GL ES

5. Я думаю, что здесь нет проблем: (