Opengl 尝试让鼠标拾取工作,但不确定我在哪里';我迷路了

Opengl 尝试让鼠标拾取工作,但不确定我在哪里';我迷路了,opengl,matrix,projection,mouse-picking,Opengl,Matrix,Projection,Mouse Picking,我正在画一个10x10的正方形网格,深度为0,并试图突出显示鼠标所在的网格。我在这里尝试了以下教程: 但我不知道我是否做对了。最后我得到了一个向量,但我不知道该怎么处理它 这是正方形的屏幕截图(不知道它有什么帮助) /*启用正在使用的属性索引1*/ GlenableVertexAttributeArray(1); 浮动摄像机_z=50; 浮动摄像机_x=0; 浮动摄像头_y=0; GLuint MatrixID=glGetUniformLocation(程序,“MVP”); GLuint Co

我正在画一个10x10的正方形网格,深度为0,并试图突出显示鼠标所在的网格。我在这里尝试了以下教程: 但我不知道我是否做对了。最后我得到了一个向量,但我不知道该怎么处理它

这是正方形的屏幕截图(不知道它有什么帮助)

/*启用正在使用的属性索引1*/
GlenableVertexAttributeArray(1);
浮动摄像机_z=50;
浮动摄像机_x=0;
浮动摄像头_y=0;
GLuint MatrixID=glGetUniformLocation(程序,“MVP”);
GLuint ColorID=glGetUniformLocation(程序,“输入颜色”);
int鼠标_x;
int mouse_y;
而(1){
窗口宽度;
内窗高度;
SDL_GetWindowSize(窗口大小、窗口宽度和窗口高度);
glm::mat4投影=glm::透视(45.0f,((浮动)窗宽)/窗高,0.1f,100.0f);
//printf(“摄影机位于%f%f\n”,摄影机x,摄影机y);
glm::mat4 View=glm::lookAt(glm::vec3(摄像头x、摄像头y、摄像头z),//摄像头位置
glm::vec3(摄像头x,摄像头y,0),//看着
glm::vec3(0,1,0));//向上
int map_width=map.width();
int map_height=map.height();
/*让我们的背景变成黑色*/
glClearColor(0.0,0.0,0.0,1.0);
glClear(GLU颜色缓冲位);
//浏览我的10x10地图,然后
对于(int i=0;i
使用BDL注释中的代码更新。我现在得到的输出是:

标准化鼠标位置0.087500 x 0.145833 世界射线:0.0650830.081353499000000 世界射线:0.000130,0.000163,1.000000 鼠标世界-0.006521,-0.008152

我希望“鼠标世界”线的数字在1-10范围内,而不是在.00x范围内,不过,根据上面显示的x和y范围为0-10的正方形网格的屏幕截图


感谢查看。

从点C(在本例中为相机位置)开始的给定光线r与z=0的x/y平面之间的交点可计算如下:

C ... Camera position [cx,cy,cz]
r ... ray direction [rx,ry,rz]

We are searching for the point on the ray that has z=0

C + l*r = [x,y,0]

=>

cz + l*rz = 0
l * rz = -cz
l = -(cz / rz)

The xy-coordinates of the intersection are now:

x = cx + l * rx
y = cy + l * ry

剩下要做的是检查这个(x,y)坐标位于哪个矩形中。

给定光线r与z=0的x/y平面之间的交点,从点C开始(在本例中为相机位置),可以计算如下:

C ... Camera position [cx,cy,cz]
r ... ray direction [rx,ry,rz]

We are searching for the point on the ray that has z=0

C + l*r = [x,y,0]

=>

cz + l*rz = 0
l * rz = -cz
l = -(cz / rz)

The xy-coordinates of the intersection are now:

x = cx + l * rx
y = cy + l * ry

剩下要做的是检查这个(x,y)坐标位于哪个矩形中。

给定光线r与z=0的x/y平面之间的交点,从点C开始(在本例中为相机位置),可以计算如下:

C ... Camera position [cx,cy,cz]
r ... ray direction [rx,ry,rz]

We are searching for the point on the ray that has z=0

C + l*r = [x,y,0]

=>

cz + l*rz = 0
l * rz = -cz
l = -(cz / rz)

The xy-coordinates of the intersection are now:

x = cx + l * rx
y = cy + l * ry

剩下要做的是检查这个(x,y)坐标位于哪个矩形中。

给定光线r与z=0的x/y平面之间的交点,从点C开始(在本例中为相机位置),可以计算如下:

C ... Camera position [cx,cy,cz]
r ... ray direction [rx,ry,rz]

We are searching for the point on the ray that has z=0

C + l*r = [x,y,0]

=>

cz + l*rz = 0
l * rz = -cz
l = -(cz / rz)

The xy-coordinates of the intersection are now:

x = cx + l * rx
y = cy + l * ry

剩下要做的是检查这个(x,y)坐标位于哪个矩形中。

当你计算光线时,你必须将它与几何体相交,然后测试哪个先被击中。如果我知道我的平面是z=0的x/y平面,这容易吗?如果你投票结束我的问题,请评论我可以做些什么来改进它。当你计算光线时,你必须将它与几何体相交,并测试哪个几何体首先被击中。如果我知道我的平面是z=0的X/Y平面,这会变得容易吗?如果你投票结束我的问题,请评论我可以做些什么来改进它。当你计算光线时,你必须将它与几何体相交,然后测试哪一个首先被击中。如果我知道我的平面是z=0的X/Y平面,这会变得容易吗?如果你投票结束我的问题,请评论我能做什么