Использование вершин маркера для рисования CGRect в ARTookitPlus / VRToolKit - PullRequest
2 голосов
/ 19 января 2012

У меня небольшая проблема с VRToolkit, iPhone-портом ARToolKitPlus. Мне не нужны 3D-материалы каркаса, а только информация об обнаруженном маркере. Пока все работает нормально, и я застрял с координатами вершин маркера, которые генерируются в реальном времени на каждом кадре.

Я хочу визуализировать обнаруженный маркер, нарисовав простой CGRect по его краям. Я получаю вершины маркера в 'TrackerSingleMarkerImpl.cxx', и я в основном использую какой-то код:

vertexArray[0] = marker_info[k].vertex[0][0];
vertexArray[1] = marker_info[k].vertex[0][1];
vertexArray[2] = marker_info[k].vertex[1][0];
vertexArray[3] = marker_info[k].vertex[1][1];
vertexArray[4] = marker_info[k].vertex[2][0];
vertexArray[5] = marker_info[k].vertex[2][1];
vertexArray[6] = marker_info[k].vertex[3][0];
vertexArray[7] = marker_info[k].vertex[3][1];

CGRect отрисован успешно, но проблема в том, что он полностью отражен. Таким образом, горизонтальная и вертикальная оси отражаются - когда я меняю местами X и Y, остается только вертикальная ось, которая выглядит примерно так:

http://i1218.photobucket.com/albums/dd416/vyrb1/artoolkit_marker_failure.png

У вас есть идеи, в чем может быть проблема? Мне нужен не точный вопрос, а приблизительное направление проблемы. Я пытался настроить файлы, такие как 'arGetTransMat.cxx', но я не уверен, заключается ли проблема в сгенерированных координатах вершины - проекция трехмерных моделей на маркер работает отлично, но это в трехмерном пространстве. Я не использую матрицу проекции, используемую в OpenGL ES (EAGLView), потому что мне нужны только 2D и CGRect.

Я надеюсь, вы можете помочь. Заранее спасибо.

1 Ответ

0 голосов
/ 19 января 2012

Прошло много времени с тех пор, как я использовал ARToolKit, и даже тогда я лениво использовал их функции OpenGL, но я думаю, что вы должны определить свои угловые вершины, основываясь на направлении маркера (dir - это поле в marker_info)

Я сделал быстрый поиск в Google по «углу вершины ARToolKit marker_info marker» и нашел это, что, похоже, подтверждает мою догадку.

// read in the detected corners from the marker info (easier to work with)
for (int i = 0; i < 4; i++) {
    corners_ar[2*i]   = corners[i][0] = marker_info[best].vertex[(4+i-dir)%4][0];
    corners_ar[2*i+1] = corners[i][1] = marker_info[best].vertex[(4+i-dir)%4][1];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...