Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Проблема с RENDER SELECTION


Автор: rubenhak 10.7.2007, 13:47
подскажите пожалуста в чем проблемма.
почти всегда количесто хитов  = 0.
вот код:


Код

void SelectObject(int x, int y)
{
  int selectedObjectID = -1;  

  unsigned int selBuffer[512];
  int viewport[4];
  int objectsFound;

  glSelectBuffer ( 512, selBuffer );
  glGetIntegerv  ( GL_VIEWPORT, viewport );

  glRenderMode ( GL_SELECT );

  glInitNames();
  glPushName(0);

  glMatrixMode   ( GL_PROJECTION );
  glPushMatrix();
  glLoadIdentity();


  gluPickMatrix ( (double)x, (double)(viewport[3] - y), 1.0f, 1.0f, viewport );

  gluPerspective(PerspectiveAspectY,PerspectiveAspectX,PerspectiveNear,PerspectiveFar);
  glMatrixMode ( GL_MODELVIEW );
  DrawSelectionObjects();
  glMatrixMode   ( GL_PROJECTION );
  glPopMatrix();
  glMatrixMode ( GL_MODELVIEW );

  objectsFound = glRenderMode ( GL_RENDER );

  if (objectsFound > 0)
  {
            // ....
            // ....
  }

}

void DrawSelectionObjects()
{
  glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);

  glActiveTextureARB(GL_TEXTURE0_ARB);
  glClientActiveTextureARB(GL_TEXTURE0_ARB );
  glDisableClientState(GL_TEXTURE_COORD_ARRAY);
  glDisableClientState(GL_NORMAL_ARRAY);
  glDisableClientState(GL_COLOR_ARRAY);
  glDisable(GL_TEXTURE_2D);


  for(int i = 0 ; i < myMap->meshFaces.size(); i++)
  {
    glLoadName(i);

                // .....................

  }

  glPopName();
}

Автор: WERITAS 10.7.2007, 20:39
Привет, rubenhak   smile

Вобще-то, для выбора объекта и выделения используется немного другой способ (этот какой-то стремный=) ). Юзай рейкаст (raycast)

Ну или разберись с параметрами функции gluPickMatrix ( (double)x, (double)(viewport[3] - y), 1.0f, 1.0f, viewport );   1.0f - скорее всего маловато будет. Документация по ней http://www.opengl.org/documentation/specs/man_pages/hardcopy/GL/html/glu/pickmatrix.html 

Автор: rubenhak 10.7.2007, 23:16
WERITAS
я видел работающий код с 1.0ф. не знаю как он работает smile

ничего я по другому решил проблему.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)