void duDebugDrawHeightfieldSolid(duDebugDraw* dd, const rcHeightfield& hf) { if (!dd) return; const float* orig = hf.bmin; const float cs = hf.cs; const float ch = hf.ch; const int w = hf.width; const int h = hf.height; unsigned int fcol[6]; duCalcBoxColors(fcol, duRGBA(255,255,255,255), duRGBA(255,255,255,255)); dd->begin(DU_DRAW_QUADS); for (int y = 0; y < h; ++y) { for (int x = 0; x < w; ++x) { float fx = orig[0] + x*cs; float fz = orig[2] + y*cs; const rcSpan* s = hf.spans[x + y*w]; while (s) { duAppendBox(dd, fx, orig[1]+s->smin*ch, fz, fx+cs, orig[1] + s->smax*ch, fz+cs, fcol); s = s->next; } } } dd->end(); }
void duDebugDrawBox(struct duDebugDraw* dd, float minx, float miny, float minz, float maxx, float maxy, float maxz, const unsigned int* fcol) { if (!dd) return; dd->begin(DU_DRAW_TRIS); duAppendBox(dd, minx,miny,minz, maxx,maxy,maxz, fcol); dd->end(); }
void duDebugDrawHeightfieldWalkable(duDebugDraw* dd, const rcHeightfield& hf) { if (!dd) return; const float* orig = hf.bmin; const float cs = hf.cs; const float ch = hf.ch; const int w = hf.width; const int h = hf.height; unsigned int fcol[6]; duCalcBoxColors(fcol, duRGBA(255,255,255,255), duRGBA(217,217,217,255)); dd->begin(DU_DRAW_QUADS); for (int y = 0; y < h; ++y) { for (int x = 0; x < w; ++x) { float fx = orig[0] + x*cs; float fz = orig[2] + y*cs; const rcSpan* s = hf.spans[x + y*w]; while (s) { if (s->area == RC_WALKABLE_AREA) fcol[0] = duRGBA(64,128,160,255); else if (s->area == RC_NULL_AREA) fcol[0] = duRGBA(64,64,64,255); else fcol[0] = duMultCol(duIntToCol(s->area, 255), 200); duAppendBox(dd, fx, orig[1]+s->smin*ch, fz, fx+cs, orig[1] + s->smax*ch, fz+cs, fcol); s = s->next; } } } dd->end(); }