00001
00002
00003
00004
00005
00006 static void DrawFace(geWorld *World, const geVec3d **Verts)
00007 {
00008 GE_LVertex LVerts[4];
00009 int i;
00010
00011 for (i = 0; i < 4; i++)
00012 {
00013 LVerts[i].r = 40.0f;
00014 LVerts[i].g = 40.0f;
00015 LVerts[i].b = 80.0f + 20.0f * (geFloat)i;
00016 LVerts[i].a = 128.0f;
00017 LVerts[i].X = Verts[i]->X;
00018 LVerts[i].Y = Verts[i]->Y;
00019 LVerts[i].Z = Verts[i]->Z;
00020 }
00021
00022 geWorld_AddPolyOnce(World, &LVerts[0], 4, NULL, GE_GOURAUD_POLY, GE_FX_TRANSPARENT, 1.0f);
00023 }
00024
00025 void DrawBoundBox(geWorld *World, const geVec3d *Pos, const geVec3d *Min, const geVec3d *Max)
00026 {
00027 geFloat dx;
00028 geFloat dy;
00029 geFloat dz;
00030 static geVec3d Verts[8];
00031 static geVec3d * Faces[6][4] =
00032 {
00033 { &Verts[0], &Verts[1], &Verts[2], &Verts[3] },
00034 { &Verts[4], &Verts[5], &Verts[6], &Verts[7] },
00035 { &Verts[3], &Verts[2], &Verts[6], &Verts[7] },
00036 { &Verts[1], &Verts[0], &Verts[4], &Verts[5] },
00037 { &Verts[0], &Verts[3], &Verts[7], &Verts[4] },
00038 { &Verts[2], &Verts[1], &Verts[5], &Verts[6] },
00039 };
00040 int i;
00041
00042 for (i = 0; i < 8; i++)
00043 geVec3d_Add(Pos, Min, &Verts[i]);
00044
00045 dx = Max->X - Min->X;
00046 dy = Max->Y - Min->Y;
00047 dz = Max->Z - Min->Z;
00048
00049 Verts[0].Y += dy;
00050 Verts[3].Y += dy;
00051 Verts[3].X += dx;
00052 Verts[7].X += dx;
00053
00054 Verts[1].Y += dy;
00055 Verts[1].Z += dz;
00056 Verts[5].Z += dz;
00057 Verts[6].Z += dz;
00058 Verts[6].X += dx;
00059
00060 Verts[2].X += dx;
00061 Verts[2].Y += dy;
00062 Verts[2].Z += dz;
00063
00064 for (i = 0; i < 6; i++)
00065 DrawFace(World, &Faces[i][0]);
00066 }
00067