2012-01-19 5 views
2

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

Я хочу визуализировать обнаруженный маркер, рисуя простой 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», но я не уверен, что проблема заключается в сгенерированных координатах вершин - проекция 3D-моделей на маркер работает отлично, но это в 3D-пространстве. Я не использую матрицу проекций, используемую в OpenGL ES (EAGLView), потому что мне нужны только 2D и CGRect.

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

ответ

0

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

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

// 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]; 
} 
+0

Спасибо, это было что-то в этом роде :) Мне пришлось вычесть высоту камеры, но направление было окончательным намеком. Большое спасибо! – Martin