iPhone OpenGL ES - Как Выбрать

Я работаю над приложением OpenGL ES1, которое отображает 2D сетку и позволяет пользователю перемещаться и масштабировать/поворачивать ее. Я должен знать точный перевод Сенсорных координат Представления в мою opengl мировую и ячейку сетки. Там какие-либо помощники должны сделать реверс последних нескольких преобразований, которые я делаю для навигации? или я должен вычислить, и матрица наполняют вручную?

6
задан Ali Nadalizadeh 29 March 2010 в 18:52
поделиться

2 ответа

Режим комплектации недоступен в openGL ES. Но легко вычислить экранные координаты любой трехмерной точки, используя матрицу проекции, полученную из текущего состояния openGL. Вот как я это делаю (IMPoint2D и IMPoint3D являются базовыми (x, y) и (x, y, z) структуры)

+ (IMPoint2D) getScreenCoorOfPoint:(IMPoint3D)_point3D
{
    GLfloat     p[16];                                              // Where The 16 Doubles Of The Projection Matrix Are To Be Stored
    glGetFloatv(GL_PROJECTION_MATRIX, p);                           // Retrieve The Projection Matrix
/*
Multiply M * point
*/
    GLfloat _p[] = {p[0]*_point3D.x +p[4]*_point3D.y +p[8]*_point3D.z + p[12],
                    p[1]*_point3D.x +p[5]*_point3D.y +p[9]*_point3D.z + p[13],
                    p[2]*_point3D.x +p[6]*_point3D.y +p[10]*_point3D.z+ p[14],
                    p[3]*_point3D.x +p[7]*_point3D.y +p[11]*_point3D.z+ p[15]};
/*
divide by scale factor
*/
    IMPoint2D _p2D = {_p[0]/_p[3], _p[1]/_p[3]};
/*
get result in screen coordinates. In this case I'm in landscape mode
*/
    return (IMPoint2D) {_p2D.x*240.0f + 240.0f, (1.0f - _p2D.y) *160.0f};
}
4
ответ дан 10 December 2019 в 00:36
поделиться

Похоже, вы ищете метод непроекта. Библиотека перенасыщения поставляется с одним, но он недоступен в OpenGL ES. Можно самостоятельно переписать код перенасыщения, чтобы он был совместим с iphone. Вы также можете написать свой собственный код для отмены проекции, что потребует масштабирования точки касания до вашего окна просмотра, умножения на обратное матрицы вашей проекции * вида модели и разделите на w, чтобы получить трехмерный вектор.

6
ответ дан 10 December 2019 в 00:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: