Re: [PyOpenGL-Users] gluUnProject Projection Failed
Brought to you by:
mcfletch
From: Eleftherios G. <gar...@gm...> - 2010-04-14 09:59:29
|
Hello, Thank you again for your response. - Show quoted text - On Tue, Apr 13, 2010 at 11:20 AM, Greg Ewing <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) 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 |