From 834a37d1975b5baa609e93839947430d554a7f5f Mon Sep 17 00:00:00 2001 From: Vegard Storheil Eriksen Date: Wed, 7 Apr 2010 23:12:59 +0200 Subject: Inter-marker vectors. --- assimp.cpp | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 86 insertions(+), 5 deletions(-) (limited to 'assimp.cpp') diff --git a/assimp.cpp b/assimp.cpp index aea1187..cccdc0e 100755 --- a/assimp.cpp +++ b/assimp.cpp @@ -18,8 +18,16 @@ class FiskPattern : public Pattern { Texture** textures; + int patt_id2; + + bool m2_visible; + + double m2_vec[3]; + public: FiskPattern() : Pattern("patterns/m1.patt") { + patt_id2 = arLoadPatt("patterns/m2.patt"); + scene = importer->ReadFile("tewi.x", 0); if(scene) { @@ -68,15 +76,62 @@ class FiskPattern : public Pattern { textures[9] = new TextureSDL("gradient.png"); patt_width = 50.0; + + patt_trans_kake[3][0] = patt_trans_kake[3][1] = patt_trans_kake[3][2] = 0; + patt_trans_kake[3][3] = 1.0; } protected: + virtual void update(ARMarkerInfo* marker_info, int marker_num) { + bool m1_visible = m2_visible = false; + + for(int j = 0; j < marker_num; j++) { + if(patt_id == marker_info[j].id) { + arGetTransMat(&marker_info[j], patt_center, patt_width, patt_trans_kake); + m1_visible = true; + //else if( marker_info[k].cf < marker_info[j].cf ) k = j; + } + } + + if(!m1_visible) { + return; + } + + //patt_trans_kake[0][0] = patt_trans_kake[1][1] = patt_trans_kake[2][2] = 1; + //patt_trans_kake[0][1] = patt_trans_kake[0][2] = 0; + //patt_trans_kake[1][0] = patt_trans_kake[1][2] = 0; + //patt_trans_kake[2][0] = patt_trans_kake[2][1] = 0; + + double m2_matrix[3][4]; + + for(int j = 0; j < marker_num; j++) { + if(patt_id2 == marker_info[j].id) { + arGetTransMat(&marker_info[j], patt_center, patt_width, m2_matrix); + m2_visible = true; + + double x = m2_matrix[0][3]; + double y = m2_matrix[1][3]; + double z = m2_matrix[2][3]; + + arUtilMatInv(patt_trans_kake, m2_matrix); + + m2_vec[0] = m2_matrix[0][0] * x + m2_matrix[0][1] * y + m2_matrix[0][2] * z + m2_matrix[0][3]; + m2_vec[2] = -(m2_matrix[1][0] * x + m2_matrix[1][1] * y + m2_matrix[1][2] * z + m2_matrix[1][3]); + m2_vec[1] = m2_matrix[2][0] * x + m2_matrix[2][1] * y + m2_matrix[2][2] * z + m2_matrix[2][3]; + + } + } + + draw(); + } + virtual void draw() { double gl_para[16]; - arglCameraView(patt_trans_kake, gl_para, 1.0); + //arglCameraView(patt_trans_kake, gl_para, 1.0); glMatrixMode(GL_MODELVIEW); - glLoadMatrixd(gl_para); + //glLoadMatrixd(gl_para); + glLoadTransposeMatrixd((double*)patt_trans_kake); //glTranslatef(0.0, -8.0, 0.0); @@ -104,9 +159,34 @@ class FiskPattern : public Pattern { } } + if(m2_visible) { + glLineWidth(5); + glDisable(GL_TEXTURE_2D); + glBegin(GL_LINES); + + glColor3f(1, 1, 1); + glVertex3f(0, 0, 0); + glVertex3f(m2_vec[0], m2_vec[1], m2_vec[2]); + + glColor3f(1, 0, 0); + glVertex3f(0, 0, 0); + glVertex3f(m2_vec[0], 0, 0); + + glColor3f(0, 1, 0); + glVertex3f(0, 0, 0); + glVertex3f(0, m2_vec[1], 0); + + glColor3f(0, 0, 1); + glVertex3f(0, 0, 0); + glVertex3f(0, 0, m2_vec[2]); + + glEnd(); + glEnable(GL_TEXTURE_2D); + } } }; +/* class MarisaPattern : public Pattern { private: const aiScene* scene; @@ -206,6 +286,7 @@ class MarisaPattern : public Pattern { } }; +*/ int main(int argc, char **argv) { try { @@ -216,10 +297,10 @@ int main(int argc, char **argv) { app->patt = new FiskPattern(); - Assimp::Importer _importer2; - importer = &_importer2; + //Assimp::Importer _importer2; + //importer = &_importer2; - app->patt2 = new MarisaPattern(); + //app->patt2 = new MarisaPattern(); app->run(); } catch(std::runtime_error e) { -- cgit v1.2.3