>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
-~----------~----~----~----~------~----~------~--~---