#include <simgear/sg_inlines.h>
#include <simgear/debug/logstream.hxx>
#include <simgear/math/point3d.hxx>
+#include <simgear/math/polar3d.hxx>
#include <simgear/math/sg_geodesy.hxx>
#include <simgear/math/vector.hxx>
#include <simgear/timing/timestamp.hxx>
int this_hit = -1;
int max_hit = -1;
- Point3D geoc;
double hit_elev = -9999;
double max_elev = -9999;
Point3D sc(scenery_center[0], scenery_center[1], scenery_center[2]) ;
if ( hit_elev > -9000 ) {
*terrain_elev = hit_elev;
- *radius = geoc.radius();
+ *radius = sgCartToPolar3d(sc + hit_list->get_point(this_hit)).radius();
sgVec3 tmp;
sgSetVec3(tmp, hit_list->get_normal(this_hit));
// cout << "cur_normal: " << tmp[0] << " " << tmp[1] << " " << tmp[2] << endl;
// returned results are in meters
bool fgCurrentElev( sgdVec3 abs_view_pos, double max_alt_m,
sgdVec3 scenery_center,
- ssgTransform *terra_transform,
+ ssgBranch *branch,
FGHitList *hit_list,
- double *terrain_elev, double *radius, double *normal)
+ double *terrain_elev, double *radius, double *normal,
+ int & this_hit )
{
// SGTimeStamp start; start.stamp();
sgMat4 fxform;
sgMakeIdentMat4 ( fxform ) ;
- ssgGetEntityTransform( terra_transform, fxform );
+ ssgGetEntityTransform( branch, fxform );
sgdMat4 xform;
sgdSetMat4(xform,fxform);
- hit_list->Intersect( terra_transform, xform, orig, dir );
+ hit_list->Intersect( branch, xform, orig, dir );
- int this_hit = -1;
+ this_hit = -1;
int max_hit = -1;
- Point3D geoc;
double hit_elev = -9999;
double max_elev = -9999;
Point3D sc(scenery_center[0], scenery_center[1], scenery_center[2]) ;
max_hit = i;
}
}
+
if ( this_hit < 0 ) {
// no hits below us, take the max hit
if ( hit_elev > -9000 ) {
*terrain_elev = hit_elev;
- *radius = geoc.radius();
+ *radius = sgCartToPolar3d(sc + hit_list->get_point(this_hit)).radius();
+
sgVec3 tmp;
sgSetVec3(tmp, hit_list->get_normal(this_hit));
// cout << "cur_normal: " << tmp[0] << " " << tmp[1] << " " << tmp[2] << endl;