X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2F3d%2Ftracktype.cpp;h=d76e8ebe6bfcb136b54c965ce593abf9bba01cfe;hb=4b7008978ce5b67e7e1db14b4a359e4ab1881bbd;hp=1e20c5d8aa82f966a904970f972d79e92b0feb5b;hpb=1ff06c5bc46a677fa389ef86c6b26664368f1653;p=r2c2.git diff --git a/source/3d/tracktype.cpp b/source/3d/tracktype.cpp index 1e20c5d..d76e8eb 100644 --- a/source/3d/tracktype.cpp +++ b/source/3d/tracktype.cpp @@ -7,7 +7,7 @@ Distributed under the GPL #include #include -#include +#include #include "catalogue.h" #include "tracktype.h" @@ -71,10 +71,9 @@ Iter graham_scan(Iter begin, Iter end) namespace R2C2 { -TrackType3D::TrackType3D(const Catalogue3D &cat3d, const TrackType &tt): +TrackType3D::TrackType3D(Catalogue3D &cat3d, const TrackType &tt): catalogue(cat3d), - ballast_mesh((GL::NORMAL3, GL::COLOR4_UBYTE, GL::VERTEX3)), - rail_mesh((GL::NORMAL3, GL::COLOR4_UBYTE, GL::VERTEX3)) + mesh((GL::NORMAL3, GL::TEXCOORD2, GL::VERTEX3)) { const Catalogue &cat = cat3d.get_catalogue(); const vector &parts = tt.get_parts(); @@ -93,37 +92,36 @@ TrackType3D::TrackType3D(const Catalogue3D &cat3d, const TrackType &tt): { unsigned index = 0; - GL::MeshBuilder bld(ballast_mesh); - bld.color(0.25f, 0.25f, 0.25f); + GL::MeshBuilder bld(mesh); + bld.texcoord(0.25, 0.5); for(vector::const_iterator i=parts.begin(); i!=parts.end(); ++i) build_part(*i, ballast_profile, Point(0, -ballast_min.y), bld, index); - } - { - unsigned index = 0; - GL::MeshBuilder bld(rail_mesh); - bld.color(0.85f, 0.85f, 0.85f); + bld.texcoord(0.75, 0.5); float y = ballast_h-rail_min.y; for(vector::const_iterator i=parts.begin(); i!=parts.end(); ++i) build_part(*i, rail_profile, Point(-gauge/2-rail_max.x, y), bld, index); for(vector::const_iterator i=parts.begin(); i!=parts.end(); ++i) build_part(*i, rail_profile, Point(gauge/2-rail_min.x, y), bld, index); } + + object.set_mesh(&mesh); + object.set_technique(catalogue.get(cat.get_track_technique())); unsigned paths = tt.get_paths(); for(unsigned i=0; paths; ++i, paths>>=1) { - GL::Mesh *mesh = 0; + GL::Mesh *m = 0; if(paths&1) { - mesh = new GL::Mesh(GL::VERTEX3); - GL::MeshBuilder bld(*mesh); + m = new GL::Mesh(GL::VERTEX3); + GL::MeshBuilder bld(*m); unsigned index = 0; for(vector::const_iterator j=parts.begin(); j!=parts.end(); ++j) if(j->get_path()==i) build_part(*j, cat.get_path_profile(), Point(0, ballast_h+1.5*rail_h), bld, index); } - path_meshes.push_back(mesh); + path_meshes.push_back(m); } min_z = max_z = border.front().z; @@ -169,17 +167,6 @@ const GL::Mesh &TrackType3D::get_path_mesh(unsigned p) const return *path_meshes[p]; } -void TrackType3D::render(const GL::Tag &tag) const -{ - if(tag==0) - { - catalogue.get_ballast_material().bind(); - ballast_mesh.draw(); - catalogue.get_rail_material().bind(); - rail_mesh.draw(); - } -} - void TrackType3D::build_part(const TrackPart &part, const Profile &profile, const Point &offset, GL::MeshBuilder &bld, unsigned &base_index) { float plen = part.get_length();