void ModelDrawer::RenderSelection_ (MdlObject *o, IView *view) { // setup object transformation Matrix tmp, mat; o->GetTransform (mat); mat.transpose (&tmp); glPushMatrix (); glMultMatrixf ( (float*)&tmp ); glColor3ub (0,0,255); bool psel=view->GetConfig(CFG_POLYSELECT)!=0.0f; for (int a=0;a<o->poly.size();a++) { Poly *pl = o->poly[a]; if ((o->isSelected && !psel) || (pl->isSelected && psel)) { glBegin(GL_POLYGON); for (int b=0;b<pl->verts.size();b++) glVertex3fv ((float *)&o->verts[pl->verts[b]].pos); glEnd (); } } for (int a=0;a<o->childs.size();a++) RenderSelection_ (o->childs[a], view); glPopMatrix (); }
void ModelDrawer::RenderSelection (IView *view) { glEnable (GL_POLYGON_OFFSET_FILL); glPolygonOffset (0.0f, -10.0f); glDepthMask (GL_FALSE); ulong pattern[32], *i = pattern; ulong val = 0xCCCCCCCC; for (;i < pattern+32;) { *(i++)=val; *(i++)=val; val = ~val; } glPolygonStipple ((GLubyte *)&pattern[0]); glEnable (GL_POLYGON_STIPPLE); glDisable (GL_LIGHTING); glPolygonMode (GL_FRONT_AND_BACK, GL_FILL); glDisable (GL_CULL_FACE); if (model->root) RenderSelection_ (model->root, view); glDisable (GL_POLYGON_STIPPLE); glDisable (GL_POLYGON_OFFSET_FILL); glDepthMask (GL_TRUE); glPolygonOffset (0.0f, 0.0f); }
void ModelDrawer::RenderSelection_ (MdlObject *o, IView *view) { // setup object transformation Matrix tmp, mat; o->GetTransform (mat); mat.transpose (&tmp); glPushMatrix (); glMultMatrixf ( (float*)&tmp ); glColor3ub (0,0,255); bool psel=view->GetConfig(CFG_POLYSELECT)!=0.0f; for (PolyIterator pi(o);!pi.End();pi.Next()) { Poly *pl = *pi; if ((o->isSelected && !psel) || (pl->isSelected && psel)) { if (!pi.verts()) continue; glBegin(GL_POLYGON); for (unsigned int b=0;b<pl->verts.size();b++) glVertex3fv ((float *)& (*pi.verts())[pl->verts[b]].pos); glEnd (); } } for (unsigned int a=0;a<o->childs.size();a++) RenderSelection_ (o->childs[a], view); glPopMatrix (); }