2014-01-24 4 views
-1

gluProject() всегда возвращает GLU_FAIL. Может ли кто-нибудь сказать мне, почему?OPENGL, gluProject возвращает 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) возвращают нулевую матрицу. Но я до сих пор не знаю, как исправить эту ошибку. Почему две функции не могут вернуть истинную матрицу результатов? Спасибо вам всем.

+0

Может ли кто-нибудь помочь мне? – user3213553

+0

Какую версию OpenGL вы используете? – Vallentin

+0

Какова ценность 'GLU_FAIL'? – genpfault

ответ

0

Существует только одна причина, по которой это может потерпеть неудачу, и это значит, что математика привела бы к делению на ноль.

Ваши координаты начинаются в пространстве объектов, преобразуются в пространство представлений путем умножения на вашу матрицу ModelView, а затем в пространство клипов путем умножения на Projection. Следующее, что происходит, состоит в том, что каждый компонент результирующего 4D-вектора делится на его W-компонент для получения координат нормализованных устройств, а этот - это функция, которая может возвращать GLU_FALSE.

Если ваша координата W-координаты клипа 0.0, это не удастся. Невозможно сказать, почему ваше пространство клипа W равно 0.0, не видя ваших фактических матриц, но это единственная причина для возврата этой функции GLU_FALSE.

+0

Я нашел причину этой ошибки. Это потому, что и glGetDoublev (GL_PROJECTION_MATRIX, проекция); и glGetDoublev (GL_MODELVIEW_MATRIX, modelview); return null matrix. Но я до сих пор не знаю, как исправить эту ошибку. Почему две функции не могут вернуть истинную матрицу результатов? Спасибо вам всем. – user3213553

Смежные вопросы