【发布时间】:2013-12-16 10:21:07
【问题描述】:
我有一个函数可以在 3d 空间中用鼠标坐标创建一个向量。
这是我的代码:
void myMouse(int x, int y){
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 );
winX = (float)x;
winY = (float)viewport[3] - (float)y; // Subtract The Current Mouse Y Coordinate
glReadPixels( x, winY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ );//Reads the depth buffer
gluUnProject( winX, winY, winZ, modelview, projection, viewport, &posX, &posY, &posZ);
vector.x=posX;
vector.y=posY;
vector.z=posZ;
}
然后该向量用作我绘制的某些点的吸引子。如果我将 z 位置设置为 0,则代码运行良好,但是当我旋转场景时,这些点不会跟随鼠标的光标。但是,如果我将 vector.z 设置为上面的代码,粒子开始向我移动,然后它们消失(即它们移到视点后面)。
我希望我的点在 z 轴指向我时仅在 x/y 轴上跟随鼠标,当 y 轴指向我时在 x/z 轴上以及在 y/z 轴上当 x 轴指向我时。
另外,我如何将 z 位置设置为与我的视点之间的固定距离?
【问题讨论】:
-
在调用
glGet*()之前是否旋转矩阵...如果不是,那可能是您的问题。 -
如何旋转它们?
-
"但是当我旋转场景时,这些点不会跟随鼠标的光标" ...在调用
glGet*()之前你会旋转吗?
标签: c++ opengl mouse mousemove