void glcolorbox(const float3 &r, const Pose &p) // p = { { 0, 0, 0 }, { 0, 0, 0, 1 } }) { glPushMatrix(); glMultMatrixf(p.Matrix()); glBegin(GL_QUADS); for (int m : {0, 1}) for (int i : {0, 1, 2}) { int i1 = (i + 1 + m) % 3; int i2 = (i + 2 - m) % 3; float3 u, v, w; u[i1] = r[i1]; v[i2] = r[i2]; w[i] = (m) ? -1.0f : 1.0f; float3 a((float)m, (float)m, (float)m); a[i] = 1-a[i]; glColor3fv(a); glNormal3fv(w); float2 corners[] = { { -1.0f, -1.0f }, { 1.0f, -1.0f }, { 1.0f, 1.0f }, { -1.0f, 1.0f } }; // ccw order for (float2 t : corners) glTexCoord2fv(t), glVertex3fv(w*r[i] + u*t.x + v*t.y); } glEnd(); glPopMatrix(); }
void wmdraw(const WingMesh &m, const Pose &pose) { glPushMatrix(); glMultMatrixf(pose.Matrix()); wmdraw(m); glPopMatrix(); }