/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield * * This library is open source and may be redistributed and/or modified under * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or * (at your option) any later version. The full license is in LICENSE file * included with this distribution, and on the openscenegraph.org website. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * OpenSceneGraph Public License for more details. */ #include #include using namespace osg; Shape::~Shape() { } ShapeVisitor::~ShapeVisitor() { } ConstShapeVisitor::~ConstShapeVisitor() { } Sphere::~Sphere() { } Box::~Box() { } Cone::~Cone() { } Cylinder::~Cylinder() { } Capsule::~Capsule() { } InfinitePlane::~InfinitePlane() { } TriangleMesh::~TriangleMesh() { } ConvexHull::~ConvexHull() { } HeightField::HeightField(): _columns(0), _rows(0), _origin(0.0f,0.0f,0.0f), _dx(1.0f), _dy(1.0f), _skirtHeight(0.0f), _borderWidth(0) { _heights = new osg::FloatArray; } HeightField::HeightField(const HeightField& mesh,const CopyOp& copyop): Shape(mesh,copyop), _columns(mesh._columns), _rows(mesh._rows), _origin(mesh._origin), _dx(mesh._dx), _dy(mesh._dy), _skirtHeight(mesh._skirtHeight), _borderWidth(mesh._borderWidth), _heights(new osg::FloatArray(*mesh._heights)) { } HeightField::~HeightField() { } void HeightField::allocate(unsigned int numColumns,unsigned int numRows) { if (_columns!=numColumns || _rows!=numRows) { _heights->resize(numColumns*numRows); } _columns=numColumns; _rows=numRows; } Vec3 HeightField::getNormal(unsigned int c,unsigned int r) const { // four point normal generation. float dz_dx; if (c==0) { dz_dx = (getHeight(c+1,r)-getHeight(c,r))/getXInterval(); } else if (c==getNumColumns()-1) { dz_dx = (getHeight(c,r)-getHeight(c-1,r))/getXInterval(); } else // assume 0