game_maker |
Posted - Jun 19 2004 : 6:16:51 PM { Camera × Object } Collision
To do collision (Box or Shpere) I nead to got the plane from the view port => how can I get the Camera Plane ?
|
Eric Coleman |
Posted - Jun 20 2004 : 3:26:30 PM Are you trying make the viewing frustum not collide with anything? I think you should probably do what VBBR suggests, use either a bounding box or sphere around the camera's position and test to see if that collides with anything. |
game_maker |
Posted - Jun 20 2004 : 2:49:57 PM To do collision I must first compute the camera boundary right?
I can't compute the boundary from equation of plane with no limit's right?
So I think what I need is to find the borders in camera's plane....
The view port is a rectangular rotated in xyz ... right?
See I am totally with you with math stuff:
Equation of Plane:
ax + by + cz + d = 0
We can find the equation (i.e. finding a,b,c,d) if we have the normal vector to the plane and any point in the plane as you said
N: is the normal vector to the plane <a1,a2,a3> P: is general point in the plane <x,y,z> P1 : is a known point in the plane <x1,y1,z1>
Ok if we find P1P vector = <x-x1,y-y1,z-z1>
Notice that P1P is normal to N so the dot product is equal to zero
N . P1P = <a1,a2,a3> . <x-x1,y-y1,z-z1> = 0
a1(x-x1) + a2(y-y1) + a3(z-z1) = 0
a1x - a1x1 + a2y - a2y1 + a3z - a3z1 = 0
a1x + a2y + a3z -( a1x1 + a2y1 + a3z1) = 0
Finally:
a = a1 b = a2 c = a3 d = -(a1x1 + a2y1 + a3z1)
Ok if we take camera's position + rotation it will be the center of our boundary.... I need one corner point
Am I doing this wrong ? |
Eric Coleman |
Posted - Jun 20 2004 : 10:08:37 AM The camera isn't in a finite plane, so I'm not sure what you're looking for. |
VBBR |
Posted - Jun 20 2004 : 06:38:11 AM Wouldn't it be more easy just checking with a bounding box/sphere for the camera? |
game_maker |
Posted - Jun 20 2004 : 12:50:29 AM very nice ^^
but this gives me equation of plane - infnite plane ? what I need is finite plane |
Eric Coleman |
Posted - Jun 19 2004 : 10:36:57 PM Assuming you know the camera's position, then you can easily find the camera's plane.
use the vector
v.x = ViewMatrix.m13 v.y = ViewMatrix.m23 v.z = ViewMatrix.m33
and then calculate
p.x = ViewMatrix.m11 + CameraLocation.x p.y = ViewMatrix.m21 + CameraLocation.y p.z = ViewMatrix.m31 + CameraLocation.z
And finally use the function D3DXPlaneFromPointNormal in the D3DX library were the vector v is your plane's normal and p is a point in the plane. |
|
|