Archived

This topic is now archived and is closed to further replies.

.MAP file format: bounding planes?

This topic is 5626 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I''m looking at the .MAP file spec, and it looks like brushes are defined by bounding planes (rather than explicit vertices). How can I get the actual vertices from those bounding planes, or am I doing something completely wrong? Superpig - saving pigs from untimely fates - sleeps in a ham-mock at www.thebinaryrefinery.cjb.net

Share this post


Link to post
Share on other sites
Straight from this flipcode article:
http://www.flipcode.com/tutorials/tut_levedit.shtml


#define MAX_BOUNDS 16384 //this is the abs(max point in data set)

//Planes is an array of planes that define a convex area in space
//which has been loaded from the map file
//NumPlanes is the number of planes in the list

CFace* FacesFromPlaneList(CPlane *Planes, int NumPlanes)
{
//you need at least 4 planes to make a solid
if(NumPlanes < 4)
return 0;

//allocate some memory for the new faces
CFace *NewFaces = new CFace[NumPlanes];

//need to make faces that lie on the planes of the solid that
//extend to the bounds of the data set.
for(int i = 0; i < NumPlanes; i++)
{
//the vertex count for each inital face will be 4
NewFaces.VertexCount = 4;

//check to see if the plane is x-axis oriented
if(abs(Planes[i].x) >= abs(Planes[i].y) && abs(Planes[i].x) >= abs(Planes[i].z))
{
//set the bounds of the polygon, using y and z axis
NewFaces[i].Vertex[0].Set(0, -MAX_BOUNDS, -MAX_BOUNDS);
NewFaces[i].Vertex[1].Set(0, -MAX_BOUNDS, MAX_BOUNDS);
NewFaces[i].Vertex[2].Set(0, MAX_BOUNDS, MAX_BOUNDS);
NewFaces[i].Vertex[3].Set(0, MAX_BOUNDS, -MAX_BOUNDS);

//calculate the x value of each vertex on the plane
for(int j = 0; j < 4; j++)
{
NewFaces[i].Vertex[j].x = Planes[i].d -
Planes[i].z * NewFaces[i].Vertex[j].z -
Planes[i].y * NewFaces[i].Vertex[j].y ) /
Planes[i].x;
}
}
//check to see if the plane is y-axis oriented
else if(abs(Planes[i].y) >= abs(Planes[i].x) && abs(Planes[i].y) >= abs(Planes[i].z))
{
//set the bounds of the polygon using the x and z axis
NewFaces[i].Vertex[0].Set(-MAX_BOUNDS, 0, -MAX_BOUNDS);
NewFaces[i].Vertex[1].Set(-MAX_BOUNDS, 0, MAX_BOUNDS);
NewFaces[i].Vertex[2].Set(MAX_BOUNDS, 0, MAX_BOUNDS);
NewFaces[i].Vertex[3].Set(MAX_BOUNDS, 0, -MAX_BOUNDS);

//calculate the y value of each vertex on the plane
for(int j = 0; j < 4; j++)
{
NewFaces[i].Vertex[j].y = ( Planes[i].d -
Planes[i].z * NewFaces[i].Vertex[j].z -
Planes[i].x * NewFaces[i].Vertex[j].x ) /
Planes[i].y;
}
}
//plane must be z-axis oriented
else
{
//set the bounds of the polygon using the x and y axis
NewFaces[i].Vertex[0].Set(-MAX_BOUNDS, -MAX_BOUNDS, 0);
NewFaces[i].Vertex[1].Set(-MAX_BOUNDS, MAX_BOUNDS, 0);
NewFaces[i].Vertex[2].Set(MAX_BOUNDS, MAX_BOUNDS, 0);
NewFaces[i].Vertex[3].Set(MAX_BOUNDS, -MAX_BOUNDS, 0);

//calculate the z of each vertex on the plane
for(int j = 0; j < 4; j++)
{
NewFaces[i].Vertex[i].z = ( Planes[i].d -
Planes[i].y * NewFaces[i].Vertex[j].y -
Planes[i].x * NewFaces[i].Vertex[j].x ) /
Planes[i].z;
}
}
}

//now for each face, we clip it against the planes of all the other faces
//since it is convex, after all the clipping the face will be the original
//as seen in the editor
//NOTE: Depending on how you calculated your plane equations, you may need
//to flip the plane before you clip the faces, since the wrong side of the
//face will be clipped. And you will end up with faces with no vertices.
for(i = 0; i < NumPlanes; i++)
for(int j = 0; j < NumPlanes; j++)
if(i != j)
ClipFaceWithPlane(NewFaces[i], Planes[j]);

return NewFaces;
}

Share this post


Link to post
Share on other sites
I had a look at making a .MAP loaded a wile ago. I got as far as being able to load some simple shapes almost correctly
Its a really hiddeious format IMHO, planes everywhere.

Steve
DirectX Programmer
Soon to be the new Bill Gates

Share this post


Link to post
Share on other sites
Eww. I think I''ll be looking at alternatives, then. Thanks anyway.

Hmm, the article on 3D MFC could prove useful...

Superpig
- saving pigs from untimely fates
- sleeps in a ham-mock at www.thebinaryrefinery.cjb.net

Share this post


Link to post
Share on other sites