【发布时间】:2015-05-14 15:50:04
【问题描述】:
我已经设置了openGL,所以原点在左上角。但是,使用 gluUnProject 将鼠标坐标转换为 OpenGL 坐标,仍然给我原点位于左下角的坐标,我不知道为什么会这样。所以,OpenGL的设置如下:
void setup_GL()
{
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
// bottom and top flipped to change origin
glOrtho(0, width, height, 0, 0, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
屏幕坐标转换为OpenGL坐标的函数如下:
Point get_gl_from_screen(int x, int y)
{
set_up_view();
GLint viewport[4];
GLdouble modelview[16];
GLdouble projection[16];
GLfloat z;
GLdouble px, py, pz;
glGetDoublev(GL_MODELVIEW_MATRIX, modelview );
glGetDoublev(GL_PROJECTION_MATRIX, projection );
glGetIntegerv(GL_VIEWPORT, viewport);
gluUnProject(x, y, z, modelview, projection, viewport, &px, &py, &pz);
return Point(px, py);
}
这仍然返回 py,就好像 origin 在左下角一样。不知道为什么。请注意,输入坐标也是相对于左上角的原点。
【问题讨论】:
标签: opengl 3d coordinate-systems