|
|
用OPENGL,按如下形式绘制几个按钮:
void drawButton()
{
glMatrixMode( GL_MODELVIEW );
glPushMatrix();
glLoadIdentity();
glMatrixMode( GL_PROJECTION );
glPushMatrix();
glLoadIdentity();
glOrtho( 0, 800, 0, 600, -1, 1);
// 保存原模型变换矩阵,平移至( x, y )
//绘制按钮////
lRectf(0.0f, 0.0f, (float)mySize.width, -(float)mySize.height);
// 恢复投影矩阵和模型变换矩阵
glMatrixMode( GL_PROJECTION );
glPopMatrix();
glMatrixMode( GL_MODELVIEW );
glPopMatrix();
glMatrixMode( GL_MODELVIEW );
}//drawButton()
然后使用常规的OPENGL拾取办法:
void ProcessSelection(int xPos, int yPos)
{
GLfloat fAspect;
static GLuint selectBuff[BUFFER_LENGTH];
GLint hits, viewport[4];
glSelectBuffer(BUFFER_LENGTH, selectBuff);
glGetIntegerv(GL_VIEWPORT, viewport);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glRenderMode(GL_SELECT);
glLoadIdentity();
gluPickMatrix(xPos, viewport[3] - yPos, 4,4, viewport);
fAspect = (float)viewport[2] / (float)viewport[3];
gluPerspective(54.0f, fAspect, 0.1, 200.0);
//绘制界面
Draw(guiCamera);
hits = glRenderMode(GL_RENDER);
if(hits >=0)
{
ProcessButton(selectBuff[3]);
}
//else
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
}//ProcessSelection(int xPos, int yPos)
结果发现是无法拾取.不知道是不是因为当初绘制按钮的时候使用了正投影的缘故,导致无法拾取.??
目前看来,那些按钮要用正投影来绘制.
怎么解决这个冲突问题? [em4] [em7] |
|