glProject得到的窗口坐标有问题,请高手指点

allclear 2007-03-22 10:16:09
我在做opengl的拾取,在比较选择对象的深度时,需要用(glProject)将物体坐标转化为窗口坐标(winx,winy,winz),但转化后的winz的倒是能比较出大小,能够达到比较深度的目的,但winx,winy的值却不正常,从几千到负几千。比如一个三角形的三个点的窗口坐标,应该相差不大,而且和鼠标的坐标差不多,但我的程序却不是。

应该是中间的ModelMatrix和ProjMatrix矩阵的问题,但这两个矩阵应该怎么用,或者在对选择对象处理之前的什么地方使用?
有人说是平移、旋转、缩放引起的问题,我通过放缩视景体大小来实现缩放,通过改变视点位置和视线方向来实现平移、旋转,应该没有什么影响啊。后来我又改用glTranslate\glRotate\glScale来实现,问题依旧。

请高手指点,到底可能在什么地方出现问题。

代码太多,不方便全贴,如果需要哪部分,我再贴上来吧,先作揖了。
...全文
259 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
allclear 2007-03-23
  • 打赏
  • 举报
回复
啊,真的在绘图模式里才行,已经对了,哈哈,真的谢谢syy64(太平洋)。困扰我三四天的问题终于解决!谢谢谢谢。
allclear 2007-03-23
  • 打赏
  • 举报
回复
在绘图模式里也不对。
我在OnDraw()里用到了wglMakeCurrent然后调用绘图虚函数,在选择模式里,初始化选择模式之前就用了wglMakeCurrent,然后初始化之后获得两个变换矩阵,但不对。
allclear 2007-03-23
  • 打赏
  • 举报
回复
我在选择模式里也用了Makecurrent了啊,我试试在绘图模式下行不行
syy64 2007-03-23
  • 打赏
  • 举报
回复
1、不应该放在选择模式里,而应该在绘图模式里呀;
2、看看你的Makecurrent在哪设的?
allclear 2007-03-23
  • 打赏
  • 举报
回复
多谢syy64(太平洋)的关注,我的使用方法和你给的代码中使用差不多,但好像得到的两个变换矩阵不对,转换后的窗口坐标很大或很小。
问题可能会出在哪里呢?我将
glGetDoublev(GL_MODELVIEW_MATRIX, ModelMatrix);
glGetDoublev(GL_PROJECTION_MATRIX,ProjMatrix);
两个命令换了很多地方,比如选择模式初始化之后,选择模式中绘图函数之后、之中、之前,但得到的矩阵都一样,还是不对
syy64 2007-03-23
  • 打赏
  • 举报
回复
// »ñÈ¡·¿ÎݵĴ°¿Ú×ø±ê¡£ 2004.1.13.
bool CCity3DView::GetHouseWindowCoordinate(CPoint3DArray& IntPoint3DArray, CPoint3DArray& OutPoint3DArray)
{
int i, m;
GLint iViewPort[4];
GLdouble dProjMatrix[16];
GLdouble dModelMatrix[16];
long iError;
CPoint3D pp;

CClientDC ClientDC(this);
wglMakeCurrent(ClientDC.m_hDC,pDoc->Env.hglrc);
glGetIntegerv(GL_VIEWPORT, iViewPort);
glPushMatrix();
glGetDoublev(GL_MODELVIEW_MATRIX, dModelMatrix);
glGetDoublev(GL_PROJECTION_MATRIX, dProjMatrix);
m = IntPoint3DArray.GetSize();
for(i=0;i<m;i++)
{
gluProject(IntPoint3DArray[i].x, IntPoint3DArray[i].y, IntPoint3DArray[i].z,
dModelMatrix, dProjMatrix, iViewPort,
&OutPoint3DArray[i].x, &OutPoint3DArray[i].y, &OutPoint3DArray[i].z);
}

glPopMatrix();
iError = glGetError();

wglMakeCurrent(ClientDC.m_hDC, NULL);//ÊÍ·Å RC£¬ÒÔ±ãÆäËü DC ½øÐлæͼ
return true;
}

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧