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。 为什么这两个函数不能返回真实的结果矩阵?谢谢大家。
答案 0 :(得分:0)
只有一个原因会失败,那就是数学会导致除数为零。
您的坐标从对象空间开始,通过乘以ModelView矩阵转换为视图空间,然后乘以Projection进入剪辑空间。接下来发生的事情是,生成的4D向量的每个组件除以其W组件以生成标准化设备坐标, 此 是函数可能返回的位置{{ 1}}。
如果剪辑空间W坐标 0.0 ,则会失败。在没有看到实际矩阵的情况下,无法说明为什么剪辑空间W 0.0 ,但这是此函数返回GLU_FALSE
的唯一原因。