#include <GL/gl.h>
#include <GL/glu.h>
// 获取鼠标点击对应的近平面和远平面坐标
void getMouseClick3DPoints(int mouseX, int mouseY,
double* nearPoint, double* farPoint) {
GLint viewport[4];
GLdouble modelview[16];
GLdouble projection[16];
GLfloat winX, winY, winZ;
GLdouble posX, posY, posZ;
// 获取当前矩阵和视口
glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
glGetDoublev(GL_PROJECTION_MATRIX, projection);
glGetIntegerv(GL_VIEWPORT, viewport);
// 转换鼠标坐标到OpenGL窗口坐标
winX = (float)mouseX;
winY = (float)viewport[3] - (float)mouseY; // Y坐标翻转
// 获取近平面坐标 (深度值=0.0)
winZ = 0.0;
gluUnProject(winX, winY, winZ,
modelview, projection, viewport,
&posX, &posY, &posZ);
nearPoint[0] = posX;
nearPoint[1] = posY;
nearPoint[2] = posZ;
// 获取远平面坐标 (深度值=1.0)
winZ = 1.0;
gluUnProject(winX, winY, winZ,
modelview, projection, viewport,
&posX, &posY, &posZ);
farPoint[0] = posX;
farPoint[1] = posY;
farPoint[2] = posZ;
}

03-25
1368
1368

被折叠的 条评论
为什么被折叠?



