1 /* -*-c++-*- 2 * 3 * Copyright (C) 2008 Stuart Buchanan 4 * 5 * This program is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU General Public License as 7 * published by the Free Software Foundation; either version 2 of the 8 * License, or (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, but 11 * WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program; if not, write to the Free Software 17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 18 * MA 02110-1301, USA. 19 * 20 */ 21 22 #ifndef TREE_BIN_HXX 23 #define TREE_BIN_HXX 24 25 #include <vector> 26 #include <string> 27 28 #include <osg/Geometry> 29 #include <osg/Group> 30 #include <osg/Matrix> 31 32 #include <simgear/scene/util/OsgMath.hxx> 33 34 namespace simgear 35 { 36 class TreeBin { 37 public: 38 ~TreeBin() = default; 39 40 struct Tree { 41 SGVec3f position; 42 SGVec3f tnormal; Treesimgear::TreeBin::Tree43 Tree(const SGVec3f& p, const SGVec3f& t) : position(p), tnormal(t) 44 { 45 } 46 }; 47 48 typedef std::vector<Tree> TreeList; 49 50 int texture_varieties; 51 double range; 52 float height; 53 float width; 54 std::string texture; 55 std::string teffect; 56 insert(const Tree & t)57 void insert(const Tree& t) 58 { _trees.push_back(t); } 59 insert(const SGVec3f & p,const SGVec3f & tnorm)60 void insert(const SGVec3f& p, const SGVec3f& tnorm) 61 { 62 _trees.emplace_back(p, tnorm); 63 } 64 getNumTrees() const65 unsigned getNumTrees() const 66 { return _trees.size(); } 67 getTree(unsigned i) const68 const Tree& getTree(unsigned i) const 69 { 70 assert(i < _trees.size()); 71 return _trees.at(i); 72 } 73 74 TreeList _trees; 75 76 }; 77 78 void clearSharedTreeGeometry(); 79 80 typedef std::list<TreeBin*> SGTreeBinList; 81 82 osg::Group* createForest(SGTreeBinList& forestList, const osg::Matrix& transform, 83 const SGReaderWriterOptions* options); 84 } 85 #endif 86