X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2F3d%2Ftrack.cpp;fp=source%2F3d%2Ftrack.cpp;h=c8bf0e6309211c1308bd6a56bbba803934e37ac5;hb=d91ab10fd78ef29272282b020fa4e08063cb4808;hp=401dd2d9634956a15d645047881663e1d355c44c;hpb=8dce175e31941c2f6e92ce52204e9b61a071d4f9;p=r2c2.git diff --git a/source/3d/track.cpp b/source/3d/track.cpp index 401dd2d..c8bf0e6 100644 --- a/source/3d/track.cpp +++ b/source/3d/track.cpp @@ -21,6 +21,7 @@ using namespace Msp; namespace R2C2 { Track3D::Track3D(Layout3D &l, Track &t): + GL::ObjectInstance(l.get_catalogue().get_track(t.get_type()).get_object()), layout(l), track(t), type(layout.get_catalogue().get_track(track.get_type())), @@ -81,27 +82,30 @@ Point Track3D::get_node() const return Point(pos.x+c*center.x-s*center.y, pos.y+s*center.x+c*center.y, pos.z+0.02); } -void Track3D::apply_matrix() const +GL::Matrix Track3D::get_matrix() const { const Point &pos = track.get_position(); float rot = track.get_rotation(); - GL::translate(pos.x, pos.y, pos.z); - GL::rotate(rot*180/M_PI, 0, 0, 1); - GL::rotate(track.get_slope()/track.get_type().get_total_length()*180/M_PI, 0, -1, 0); + GL::Matrix matrix; + matrix.translate(pos.x, pos.y, pos.z); + matrix.rotate(rot, 0, 0, 1); + matrix.rotate(track.get_slope()/track.get_type().get_total_length(), 0, -1, 0); + + return matrix; } -void Track3D::render(const GL::Tag &tag) const +void Track3D::setup_render(const GL::Tag &) const { - GL::PushMatrix push_mat; - - apply_matrix(); - + GL::MatrixStack::modelview().push(); + GL::MatrixStack::modelview() *= get_matrix(); glPushName(reinterpret_cast(this)); +} - type.render(tag); - +void Track3D::finish_render(const GL::Tag &) const +{ glPopName(); + GL::MatrixStack::modelview().pop(); } } // namespace R2C2