- Joined
- Mar 28, 2008
- Messages
- 2,666
- Reaction score
- 795
- Points
- 128
A few bugs in the D3D7Client code
Code:
bool Tile::InView (const MATRIX4 &transform)
{
if (!lvl) return true; // no good check for this yet
if (!mesh) return true; // DEBUG : TEMPORARY
bool bx1, bx2, by1, by2, bz1;
bx1 = bx2 = by1 = by2 = bz1 = false;
int v;
double hx, hy, hz;
for (v = 0; v < 8; v++) {
VECTOR4 vt = mul (mesh->Box[v], transform);
hx = vt.x/vt.w, hy = vt.y/vt.w, hz = vt.z/vt.w;
if (hz <= 1.0) hx = -hx, hy = -hy;
if (hz > 0.0) bz1 = true;
if (hx > -1.0) bx1 = true;
if (hx < 1.0) bx2 = true;
if (hy > -1.0) by1 = true;
if (hy < 1.0) by2 = true;
if (bx1 && bx2 && by1 && by2 && bz1) return true;
}
return false;
}
Code:
// construct elevation grid by interpolating ancestor data
ELEVHANDLE hElev = mgr->ElevMgr();
if (hElev) {
int plvl = lvl-1;
int pilat = ilat >> 1;
int pilng = ilng >> 1;
----> INT16 *pelev = NULL;
QuadTreeNode<SurfTile> *parent = node->Parent();
for (; plvl >= 0; plvl--) { // find ancestor with elevation data
if (parent && parent->Entry()->has_elevfile) {
pelev = parent->Entry()->elev;
break;
}
parent = parent->Parent();
pilat >>= 1;
pilng >>= 1;
}
----> if (!pelev) return false; // There's a CTD on Enceladus without this
// when loading lvl 8 tiles. Lvls 0-7 are working fine
elev = new INT16[ndat];
// submit ancestor data to elevation manager for interpolation
mgr->GetClient()->ElevationGrid (hElev, ilat, ilng, lvl, pilat, pilng, plvl, pelev, elev, &mean_elev);
} else elev = 0;
Last edited: