Re: [PyOpenGL-Users] gluUnProject Projection Failed
Brought to you by:
mcfletch
From: Gary H. <gh...@di...> - 2010-04-14 16:47:54
|
Eleftherios Garyfallidis wrote: > Hello, > > Thank you again for your response. > > - Show quoted text - > On Tue, Apr 13, 2010 at 11:20 AM, Greg Ewing > <gre...@ca... <mailto:gre...@ca...>> wrote: > > Eleftherios Garyfallidis wrote: > > to get > > the near plane I believe you need to gluUnProject with z=0. > and to get the far plane you need to gluUnProject with z=1 > > > You're quite right, I was misremembering, sorry. > > > Surprisingly, when I do glu.gluUnProject(x,viewport[3]-y,0.) > and glu.gluUnProject(x,viewport[3]-y,1.) in PyOpenGL it seems > it works fine but when I am feeding the transformation > matrices by myself I am getting this error "Projection Failed". > > > That sounds like there is something wrong with your matrices. > How are you getting them? Are you getting them directly from > OpenGL, or calculating them yourself? If you're calculating them > yourself, you might be making a mistake somewhere. > > > What happens if you retrieve the relevant matrices from OpenGL > and feed them to gluUnProject? If that works, compare them with > your own matrices to see if there is a difference. > > > Yes this is what I am doing just calculating these matrices using > the following PyOpenGL functions > > import OpenGL.GL as gl > > modelviewmatrix=gl.glGetDoublev(gl.GL_MODELVIEW_MATRIX) > > projectionmatrix=gl.glGetDoublev(gl.GL_PROJECTION_MATRIX) > > viewport=gl.glGetDoublev(gl.GL_VIEWPORT) I have not followed this thread at all -- so I don't know the history. Nevertheless, I see a potential problem. The call to gluUnProject expects the viewport to be passed in as integers (GLint*) so you should be using glGetIntegerv not glGetDoublev to get the viewport as an array of integers. Here's gluUnProject's spec: GLint gluUnProject( GLdouble winX, GLdouble winY, GLdouble winZ, const GLdouble * model, const GLdouble * proj, const GLint * view, // !!!!! GLdouble* objX, GLdouble* objY, GLdouble* objZ); Using glGetDoublev for the two matricies and glGetIntegerv for the viewport as input to gluUnProject has always worked well for me. > > These matrices are numpy arrays do you think that it might be a > problem when we put these as input in gluUnProject? Should I transform > them into something else perhaps? > > By the way I do confirm that when using gluUnProject without feeding > in the transformation matrices as in glu.gluUnProject(x,viewport[3] > -y,0.) does work correctly :-) I made some tests with picking planes > and the accuracy of picking was excellent!!! The tests involved > checking if the segment AB (where A is near and B is far) intersects > with planes. For my application I need to check against many planes so > I made a function for this in cython. The link for the code is here > > http://github.com/Garyfallidis/Fos/blob/master/fos/core/collision.pyx > > Best wishes, > Eleftherios > > > ------------------------------------------------------------------------ > > ------------------------------------------------------------------------------ > Download Intel® Parallel Studio Eval > Try the new software tools for yourself. Speed compiling, find bugs > proactively, and fine-tune applications for parallel performance. > See why Intel Parallel Studio got high marks during beta. > http://p.sf.net/sfu/intel-sw-dev > ------------------------------------------------------------------------ > > _______________________________________________ > PyOpenGL Homepage > http://pyopengl.sourceforge.net > _______________________________________________ > PyOpenGL-Users mailing list > PyO...@li... > https://lists.sourceforge.net/lists/listinfo/pyopengl-users > -- Gary Herron, PhD. Department of Computer Science DigiPen Institute of Technology (425) 895-4418 |