游戏开发论坛

 找回密码
 立即注册
搜索
查看: 971|回复: 0

??*_*请教关于OPENGL拾取的问题.

[复制链接]

26

主题

88

帖子

88

积分

注册会员

Rank: 2

积分
88
发表于 2006-9-14 04:21:00 | 显示全部楼层 |阅读模式
用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]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 10:09

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表