Board logo

标题: [求助] 拾取物体 [打印本页]

作者: 笑一笑    时间: 2011-4-1 08:21     标题: 拾取物体

在ARToolkit中想通过OpenGL的拾取与选择模式,利用鼠标选取物体对其缩放等操作,但拾取功能到AR后就失效了。如果有人会请教教我,或提供点思路,非常感谢!!!如果能提供点源码那就更好了,呵呵!
作者: CROMA    时间: 2011-4-3 22:08

拾取失效? 使用的是 Select 還是 Pick ? 把程式碼發上來看看
作者: 笑一笑    时间: 2011-4-10 19:43     标题: RE: 拾取物体

不好意思,这2天出差了,没上网。主要问题是当屏幕上有2个物体时不管选取什么地方则hits都返回2,一个物体时返回1,不能正确返回选取的物体,我把程序传上来,麻烦看看是什么问题,谢谢!
作者: CROMA    时间: 2011-4-19 11:29

嗯 我幫你看看
作者: CROMA    时间: 2011-4-19 11:49

抱歉 我手上已經不再使用 AR Toolkit 了所以沒有辦法直接測試是否只有一個問題

你 mouseEvent 這段有點問題
void mouseEvent(int button, int state, int x, int y)
{
   GLuint selectBuf[SIZE];
   GLint hits;
   GLint viewport[4];

   if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
   {
   glGetIntegerv (GL_VIEWPORT, viewport);

   glSelectBuffer (SIZE, selectBuf);
   glRenderMode(GL_SELECT);

   glInitNames();
   glPushName(-1);

   glMatrixMode (GL_PROJECTION);
   glPushMatrix ();
   glLoadIdentity ();
/*  create 5x5 pixel picking region near cursor location        */
   gluPickMatrix ((GLdouble) x, (GLdouble) (viewport[3] - y),
                  5.0, 5.0, viewport);
--> 這裡應該要載入投射矩陣的參數 你沒有載入所以就變成預設狀態的 單位矩陣
因該要載入這兩個函數
>    argDrawMode3D();
>   argDraw3dCamera( 0, 0 );

  // gluOrtho2D (-2.0, 2.0, -2.0, 2.0);
//   drawObjects(GL_SELECT);
   draw( object, objectnum,GL_SELECT);


   glMatrixMode (GL_PROJECTION);
   glPopMatrix ();
   glFlush ();

   hits = glRenderMode (GL_RENDER);
   processHits (hits, selectBuf);

   glutPostRedisplay();
   }
}
作者: CROMA    时间: 2011-4-19 11:57

但是你後續呼叫的 draw( object, objectnum,GL_SELECT);
又會再次呼叫這兩個函數 可能出現問題的地方在於
argDrawMode3D();
argDraw3dCamera( 0, 0 );
這兩個函數是否在 呼叫的過程中赴寫掉你的矩陣了
作者: CROMA    时间: 2011-4-19 12:15

我重新下載 AR Toolkit 來測試好了
作者: CROMA    时间: 2011-4-19 22:22

AR Toolkit 2.52 + vrml 的版本已經沒有辦法下載了 orz
可以麻煩你把編譯好的 artoolkit 也傳上來嗎
作者: 笑一笑    时间: 2011-4-23 21:33

非常感谢!我现在用的是2.72版本的,在VS2005中编译通过的。
作者: oneheed    时间: 2011-4-25 15:26

請問大大成功了嗎?? 我以嘗試都無法成功執行




欢迎光临 ARToolKit中文论坛 (http://artoolkit.net/) Powered by Discuz! 7.0.0