X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=antikythera;a=blobdiff_plain;f=src%2Fgear.cc;h=c00b411221545d6b708da2a7ea1a4f17ae7edc59;hp=697610d9440cdb3d157f36e34e62992fd1236dbb;hb=ccc1a688b59e25bb934a0d3e2bbf477960068d4f;hpb=080d7a779d43f549fc16c44e709cbf5989180fdf diff --git a/src/gear.cc b/src/gear.cc index 697610d..c00b411 100644 --- a/src/gear.cc +++ b/src/gear.cc @@ -19,6 +19,10 @@ Gear::Gear() supergear = 0; mesh = 0; + + color = Vec3(0.6, 0.6, 0.6); + roughness = 1.0; + metallic = false; } Gear::~Gear() @@ -94,12 +98,16 @@ void Gear::set_position(const Vec3 &pos) { if(!supergear) { this->pos = pos; - xform_valid = false; } else { - if(fabs(this->pos.z - pos.z) > 1e-5) { - this->pos.z = pos.z; - xform_valid = false; - } + this->pos = supergear->pos; + this->pos.z = pos.z; + } + xform_valid = false; + + for(int i=0; i<(int)subgears.size(); i++) { + Vec3 subpos = this->pos; + subpos.z = subgears[i]->pos.z; + subgears[i]->set_position(subpos); } } @@ -164,7 +172,7 @@ void Gear::draw() const calc_matrix(); } - glPushAttrib(GL_ENABLE_BIT | GL_LINE_BIT); + glPushAttrib(GL_ENABLE_BIT | GL_LINE_BIT | GL_LIGHTING_BIT); glPushMatrix(); glMultMatrixf(xform[0]); @@ -174,6 +182,15 @@ void Gear::draw() const glEnable(GL_POLYGON_OFFSET_FILL); } + Vec3 diffuse = metallic ? Vec3(0, 0, 0) : color; + float col[] = {diffuse.x, diffuse.y, diffuse.z, 1.0}; + glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, col); + + Vec3 specular = (metallic ? color : Vec3(1, 1, 1)) * (1.0 - roughness); + float scol[] = {specular.x, specular.y, specular.z, 1.0}; + glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, scol); + glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 1.0 + (1.0 - roughness) * 60.0); + mesh->draw(); glDisable(GL_LIGHTING); @@ -183,13 +200,6 @@ void Gear::draw() const mesh->draw_wire(); } - glLineWidth(2.0); - glBegin(GL_LINES); - glColor3f(0, 0, 1); - glVertex3f(0, 0, -10); - glVertex3f(0, 0, 10); - glEnd(); - glPopMatrix(); glPopAttrib(); }