OPENGL,gluProject返回FAIL,为什么?

时间:2014-01-24 08:44:57

标签: opengl

gluProject()始终返回GLU_FAIL。有人可以告诉我为什么吗?

(编号):

GLint viewport[4];
GLdouble modelview[16];
GLdouble viewVector[3];
GLdouble projection[16];
GLdouble winX, winY, winZ;//2D point
GLdouble posX, posY, posZ;//3D point
posX=k;
posY=0.0;
posZ=0.0;

glGetDoublev(GL_PROJECTION_MATRIX, projection  );
glGetDoublev(GL_MODELVIEW_MATRIX, modelview );
glGetIntegerv( GL_VIEWPORT, viewport );

int res=gluProject(posX,posY,posZ,modelview,projection,viewport,&winX,&winY,&winZ);

编辑@ 2014/01/27:

我找到了导致此错误的原因。这是因为glGetDoublev(GL_PROJECTION_MATRIX,投影)和glGetDoublev(GL_MODELVIEW_MATRIX,modelview)都返回空矩阵。但我仍然不知道如何修复这个bug。 为什么这两个函数不能返回真实的结果矩阵?谢谢大家。

1 个答案:

答案 0 :(得分:0)

只有一个原因会失败,那就是数学会导致除数为零。

您的坐标从对象空间开始,通过乘以ModelView矩阵转换为视图空间,然后乘以Projection进入剪辑空间。接下来发生的事情是,生成的4D向量的每个组件除以其W组件以生成标准化设备坐标, 是函数可能返回的位置{{ 1}}。

如果剪辑空间W坐标 0.0 ,则会失败。在没有看到实际矩阵的情况下,无法说明为什么剪辑空间W 0.0 ,但这是此函数返回GLU_FALSE的唯一原因。