>the question is: is there a simpler way?
This works for me, so it seems that the aswer is "No" ;)

# Target plane at point V=(vx,vy,vz), with Normal N=(nx,ny,nz)
def impact(mouse_x,mouse_y,vx,vy,vz,nx,ny,nz):
    wx,wy,wz,sz = GLdouble(),GLdouble(),GLdouble(),GLdouble()

    #---- LINE ---- p(s)=X0+s*U
    #First Point X0
    gluUnProject(mouse_x, mouse_y, 0.0,
        model_matrix, proj_matrix, view_matrix, wx, wy, wz)
    x0,y0,z0=wx.value,wy.value,wz.value

    #Second Point X1
    gluUnProject(mouse_x, mouse_y, 1.0,
        model_matrix, proj_matrix, view_matrix, wx, wy, wz)
    x1,y1,z1=wx.value,wy.value,wz.value

    #Normalized line direction U
    lx, ly, lz = x1-x0, y1-y0, z1-z0
    m=math.sqrt(lx*lx+ly*ly+lz*lz)
    ux, uy, uz = lx/m, ly/m, lz/m

    #---- INTERSECTION ----
    #Escalar product N.U
    nu=nx*ux+ny*uy+nz*uz
    if nu==0:
        #Paralel, no intersection
        return False

    #D=P0-V
    dx, dy, dz = x0-vx, y0-vy, z0-vz
    #Escalar product N.D
    nd=nx*dx+ny*dy+nz*dz
    #Condition N.(D+sU)=0
    sp=-nd/nu

    # The point
    px, py, pz = x0+sp*ux, y0+sp*uy, z0+sp*uz

    return px,py #,pz if needed

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"pyglet-users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/pyglet-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to