gluProject提供错误的坐标

时间:2013-01-20 21:39:01

标签: visual-c++ opengl 2d glut glu

我正在尝试在2D中绘制一个形状,我正在尝试使用gluProject在3D和2D坐标之间进行转换。基本上我的目标是在(200,200)上绘制一个点并且将适当地绘制点(假设起始位置是0,0,0)。

我已经像这样初始化了gluProject -

GLdouble modelView[16];
GLdouble projection[16];
GLint viewport[4];
glGetDoublev(GL_MODELVIEW_MATRIX,modelView);
glGetDoublev(GL_PROJECTION_MATRIX,projection);
glGetIntegerv(GL_VIEWPORT,viewport);

我在像我这样的动画方法中调用它

double tx, ty, tz;
gluProject(0.0,0.0,0.0,modelView,projection,viewport,&tx,&ty,&tz);
cout<<"tx,ty,tz: "<<tx<<","<<ty<<","<<tz<<endl;

我得到的值很奇怪(-9e61,-9e61,-9e61)。我猜它是因为我乘以不同的矩阵而不是我应该的。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

  

我已经像这样初始化了gluProject -

那里有你的错误。 OpenGL是一个状态机。没有一次性初始化。您需要在OpenGL状态机处于要取消项目的状态时获取矩阵和视口。如果你拿它们,例如在创建上下文之后,您将获得身份矩阵和视口,这些视口可能与您以后获得的视图不同。

如果您希望在特定位置画一个点,请查看radical7的答案。

答案 1 :(得分:0)

您显示的代码是正确的。确保您有一个上下文绑定(通过在您正在使用的窗口工具包中调用wglMakeCurrentglxMakeCurrent或等效项),否则值(包括来自glGetError的值)获胜不定义。

那就是说,我认为你并没有尽可能地使用OpenGL。例如,如果你这样做:

// Set up the projection transformation to match window coordinates
glMatrixMode( GL_PROJECTION );
glOrtho2D( 0, windowWidth, 0, windowHeight );

// No modeling transformation required for this rendering
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();

glColor3f( 1.0, 1.0, 1.0 );  // set the current color to white
glBegin( GL_POINTS );
glVertex2i( 200, 200 );
glEnd();

你应该在窗口的像素(200,200)处得到一个白点。