then a do a dot coord check with the 8 corners of the box, if all the points are outside any frustrum plane testing all 4 planes then its not in the frustrum.
unfortunately its rejecting too much, what have i got wrong?
ignore vecin and vecout, thats just my crappy wrapper i wrote terribly.
bool in_frustrum=true;
PLANE fplane[4];
VEC corner[4];
VEC orig,dir;
inverse_project(view,proj,-1,1,orig,dir);
corner[0]=vecout(vecin(orig)+vecin(dir));
inverse_project(view,proj,1,1,orig,dir);
corner[1]=vecout(vecin(orig)+vecin(dir));
inverse_project(view,proj,1,-1,orig,dir);
corner[2]=vecout(vecin(orig)+vecin(dir));
inverse_project(view,proj,-1,-1,orig,dir);
corner[3]=vecout(vecin(orig)+vecin(dir));
fplane[0]=XMPlaneFromPoints(vecin(orig),vecin(corner[0]),vecin(corner[1]));
fplane[1]=XMPlaneFromPoints(vecin(orig),vecin(corner[1]),vecin(corner[2]));
fplane[2]=XMPlaneFromPoints(vecin(orig),vecin(corner[2]),vecin(corner[3]));
fplane[3]=XMPlaneFromPoints(vecin(orig),vecin(corner[3]),vecin(corner[0]));
int i;
for(i=0;i<4;i++)
{
bool inside=false;
if(vecout(XMPlaneDotCoord(fplane[i],vecin(VEC(pos.x,pos.y,pos.z)))).x<0) inside=true;
if(vecout(XMPlaneDotCoord(fplane[i],vecin(VEC(pos.x+size,pos.y,pos.z)))).x<0) inside=true;
if(vecout(XMPlaneDotCoord(fplane[i],vecin(VEC(pos.x+size,pos.y+size,pos.z)))).x<0) inside=true;
if(vecout(XMPlaneDotCoord(fplane[i],vecin(VEC(pos.x,pos.y+size,pos.z+size)))).x<0) inside=true;
if(vecout(XMPlaneDotCoord(fplane[i],vecin(VEC(pos.x+size,pos.y,pos.z+size)))).x<0) inside=true;
if(vecout(XMPlaneDotCoord(fplane[i],vecin(VEC(pos.x+size,pos.y+size,pos.z+size)))).x<0) inside=true;
if(vecout(XMPlaneDotCoord(fplane[i],vecin(VEC(pos.x,pos.y+size,pos.z+size)))).x<0) inside=true;
if(inside==false) in_frustrum=false;
}












