Exemplo n.º 1
0
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 ();
}
Exemplo n.º 2
0
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);
}
Exemplo n.º 3
0
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 ();
}