openGL射线拾取相关

jiht594 2018-12-07 11:29:02
描画时、是一个tile一个tile画的。(tile就是矩形格子)
画每个tile时、有scale和translate、每个tile的scale是相同的、translate不同。tile开始push矩阵、结束pop矩阵。

现在需要计算鼠标点击位置和z=0平面的交点。
开始时、使用gluUnProject时、添加了scale函数、如下:

GLint viewport[4];
GLdouble modelview[16];
GLdouble projection[16];
GLfloat winX, winY;//, winZ;

glPushMatrix();
{
glScalef(vecScale.x(), vecScale.y(), vecScale.z());
glGetIntegerv(GL_VIEWPORT, viewport);
glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
glGetDoublev(GL_PROJECTION_MATRIX, projection);
winX = (float)x;
winY = viewport[3] - (float)y;
gluUnProject(double(winX),double(winY), depthZ0to1, modelview, projection, viewport, &posX, &posY, &posZ);
}
glPopMatrix();

发现计算出的交点位置不对。

弄了好几天、去掉glScalef函数之后、
先计算交点、然后交点坐标除以scale值,(类似这样 interSectionPoint.x() / vScale.x())
这样得出了正确的坐标。
----------------------------------------------
请问为什么有glScalef函数的代码无法计算出正确值?

...全文
281 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-12-08
  • 打赏
  • 举报
回复
搜网络教程“学OpenGL编3D游戏”。
@风轻云淡_ 2018-12-07
  • 打赏
  • 举报
回复
是不是坐标系不一样,一个是屏幕坐标,一个是当前窗口坐标。反正我在计算坐标位置的时候,遇到过很多因为一个是屏幕一个是当前窗口而带来的问题。
jiht594 2018-12-07
  • 打赏
  • 举报
回复
原点在屏幕中心
jiht594 2018-12-07
  • 打赏
  • 举报
回复
引用 2 楼 @风轻云淡_ 的回复:
是不是坐标系不一样,一个是屏幕坐标,一个是当前窗口坐标。反正我在计算坐标位置的时候,遇到过很多因为一个是屏幕一个是当前窗口而带来的问题。

坐标是Qt的QMouseEvent.pos()取出来的,是当前窗口的坐标,除了glScalef函数和interSectionPoint.x() / vScale.x(), 两份代码一样的。

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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