Sangee

08-09-2006, 04:13 AM

Hi,

If more objects are get overlapped, the hit is not occuring. How to solve this problem?

The code is as follows:

;

// Hit counter and viewport storeage

GLint hits, viewport[4];

// Setup selection buffer

glSelectBuffer(BUFFER_LENGTH, selectBuff);

glRenderMode(GL_SELECT);

// Get the viewport

glGetIntegerv(GL_VIEWPORT, viewport);

// Switch to projection and save the matrix

glMatrixMode(GL_PROJECTION);

// Establish new clipping volume to be unit cube around

// mouse cursor point (xPos, yPos) and extending two pixels

// in the vertical and horzontal direction

glLoadIdentity();

// Since OpenGL measures

// window coordinates starting at the bottom of the window, and Windows

// measures starting at the top, we need to account for this by

// subtracting the y coordinate from the height of the window. This has

// the effect of reversing the coordinate system (y starts at top)

gluPickMatrix(xPos, viewport[3] - yPos, 2, 2, viewport);

glGetFloatv(GL_PROJECTION_MATRIX, projection);

// Apply perspective matrix

glOrtho(l,r,b,t,near1,far1);

///gluPerspective(30.0f, m_WHRatio, 1.0, 2.0);

glGetFloatv(GL_PROJECTION_MATRIX, projection);

glMatrixMode(GL_MODELVIEW);

// Draw the scene

if(asc == 1 || asc == 2)

RenderScene();

else if(ger == 1 || ger == 2)

GerberDraw ();

// Collect the hits

hits = glRenderMode(GL_RENDER);

if(m_bHighlight == true)

{

CDocumentationDoc *pDoc = GetDocument();

ASSERT_VALID(pDoc);

CFileCollection* FileDetails = (CFileCollection*) pDoc -> aFileCollection_Array.GetAt(FileNo);

CMainCodes* pCodes = (CMainCodes*) FileDetails -> aFile_Details.GetAt(CodeNo);

CLineInformation* pLine = (CLineInformation*) pCodes -> Line_Information.GetAt(LineNo);

pLine -> Highlight = FALSE;

}

// If a single hit occured, display the info.

if(hits >= 1)

{

ProcessStack(selectBuff);

m_bHighlight = true;

}

if more number of objects are overlapped, the value for the variable "hits" is coming as -1.

If more objects are get overlapped, the hit is not occuring. How to solve this problem?

The code is as follows:

;

// Hit counter and viewport storeage

GLint hits, viewport[4];

// Setup selection buffer

glSelectBuffer(BUFFER_LENGTH, selectBuff);

glRenderMode(GL_SELECT);

// Get the viewport

glGetIntegerv(GL_VIEWPORT, viewport);

// Switch to projection and save the matrix

glMatrixMode(GL_PROJECTION);

// Establish new clipping volume to be unit cube around

// mouse cursor point (xPos, yPos) and extending two pixels

// in the vertical and horzontal direction

glLoadIdentity();

// Since OpenGL measures

// window coordinates starting at the bottom of the window, and Windows

// measures starting at the top, we need to account for this by

// subtracting the y coordinate from the height of the window. This has

// the effect of reversing the coordinate system (y starts at top)

gluPickMatrix(xPos, viewport[3] - yPos, 2, 2, viewport);

glGetFloatv(GL_PROJECTION_MATRIX, projection);

// Apply perspective matrix

glOrtho(l,r,b,t,near1,far1);

///gluPerspective(30.0f, m_WHRatio, 1.0, 2.0);

glGetFloatv(GL_PROJECTION_MATRIX, projection);

glMatrixMode(GL_MODELVIEW);

// Draw the scene

if(asc == 1 || asc == 2)

RenderScene();

else if(ger == 1 || ger == 2)

GerberDraw ();

// Collect the hits

hits = glRenderMode(GL_RENDER);

if(m_bHighlight == true)

{

CDocumentationDoc *pDoc = GetDocument();

ASSERT_VALID(pDoc);

CFileCollection* FileDetails = (CFileCollection*) pDoc -> aFileCollection_Array.GetAt(FileNo);

CMainCodes* pCodes = (CMainCodes*) FileDetails -> aFile_Details.GetAt(CodeNo);

CLineInformation* pLine = (CLineInformation*) pCodes -> Line_Information.GetAt(LineNo);

pLine -> Highlight = FALSE;

}

// If a single hit occured, display the info.

if(hits >= 1)

{

ProcessStack(selectBuff);

m_bHighlight = true;

}

if more number of objects are overlapped, the value for the variable "hits" is coming as -1.