屏幕坐标转化为三维物体的坐标

本文介绍如何在OpenGL中将屏幕二维坐标转换为三维物体坐标。通过gluUnProject函数获取近裁剪面和远裁剪面上的交点,然后计算点到线段的最短距离,从而确定三维物体上的选择点。该过程涉及到矩阵操作、坐标变换以及空间几何计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先屏幕二维的原点在窗口左上角,而OPENGL的二维坐标在窗口左下角。所以Winx=point.x,Winy=Windoowheight-point.y。point是鼠标选择的屏幕上的点。再用OPENGL中的gluUnProject将屏幕点转化为三维点,因为有深度信息,所以需要Winz,也就是深度为0时,得到一个三维点,深度为1又可以得到一个三维点,相当于这两点构成一个线段,物体和此线段相交的点是我们求的点。因为我的物体是一些散乱的顶点,所以求的是哪个点距离线段最近,就是要求的点。空间点到线段的距离,我用的方法是利用三角形的周长和面积的关系。具体代码:

Line GetSelectionray(int mouse_x, int mouse_y,int height) {
// 获取 Model-View、Projection 矩阵 & 获取Viewport视区
  mouse_y= height-mouse_y;
GLdouble modelview[16];
GLdouble projection[16];
GLint viewport[4];
glGetDoublev (GL_MODELVIEW_MATRIX, modelview);
glGetDoublev (GL_PROJECTION_MATRIX, projection);
glGetIntegerv (GL_VIEWPORT, viewport);


GLdouble world_x, world_y, world_z;


// 获取近裁剪面上的交点
gluUnProject( (GLdouble) mouse_x, (GLdouble) mouse_y, 0,
modelview, projection, viewport,
&world_x, &

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值