How to get camera plane ? |
game_maker | { 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 | 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. |
game_maker | very nice ^^
but this gives me equation of plane - infnite plane ? what I need is finite plane [:)] |
VBBR | Wouldn't it be more easy just checking with a bounding box/sphere for the camera? |
Eric Coleman | The camera isn't in a finite plane, so I'm not sure what you're looking for. |
game_maker | 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 ? [8)] |
Eric Coleman | 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. |