VR-Forces 5.0.3 Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Public Attributes
DtViewCoverPosition Struct Reference

this interface defines terrain reasoning queries providing tactical analysis of terrain ( DtPhysicalWorld ) typically required by doctrine based behaviors.

All queries are thread-safe, allowing a client to use them asynchronously.

Implementation uses DtTerrainAccessor to encapsulate all low-level queries made to DtPhysicalWorld, including transformations between local and topographic coordinates.

KNOWN WEAKNESSES

  1. Cover points are determined based on line-of-sight check rather than on line-of-fire check. This may cause, for example, a position to be returned with view point in front of a tree and cover point immediately behind that tree. This weakness is caused by a combination of:
  2. Elevation readings (as provided by DtTerrainAccessor::elevationAtPoint) are based on DtPhysicalWorld::terrainHeight, which returns the elevation of the topmost terrain surface at the specified point. If the terrain file being used has trees (and possibly other surface objects) "baked into it", the topmost surface may not necessarily be a ground surface. Using such a terrain file may cause tree tops to be falsely recognized as hilltops and/or viable position view points.
  3. The findRidgedPositionGroupsInArea service relies on a preliminary heuristic stage that identifies potential positions based on elevation comparisons made along a "fan" of rays originating from a reference point. The reference point is located at the center of the specified targets area. This approach is vulnerable to any obstruction that blocks line-of-sight to that reference point in particular but not to other parts of the targets area. This would cause potentially viable positions to be overlooked.
  4. Implementation of max slope limitation (maxSlopeDegrees parameter) does not query terrain to find out true slope values. Instead, it just limits elevation difference between adjacent examined points when searching backward from an already chosen view point to find its paired (best available) cover point. This means that slope is only limited for the vertical dimension, in relatively low resolution. Other dimensions and particularly side slopes are not considered.
  5. When determining overall quality grade of a position group ( DtViewCoverPositionGroup::overallPctAvg ), view quality and cover quality are averaged using a hardcoded weight ratio of 2:1 in favor of view. This ratio should better be dictated by the client.
  6. Soil Type is not considered when evaluating potential view points and cover points. This means that view/cover points of returned positions may reside in water areas, marshland or other problematic soil types.
  7. Navigation mesh is not considered. This means that positions may be returned with view/cover points residing in unreachable areas, e.g. on top of a prominent hill with steep untraversable slopes.
  8. Gun depression/elevation limits are not considered when evaluating potential view points. M1 A2 tank for example has -10/+20 degrees gun depression/elevation limits, while most other tanks have a more limited range. This means that a position may be returned whose view point is located on a slope from which the gun depression/elevation angle required for shooting at the specified targets area is beyond the gun’s limits.
  9. The queryString parameter is not supported (i.e. not set) by findPosition and findHilltopsInArea services. This means that automatic reproduction of these queries is not possible.
  10. findHilltopsInArea service considers a point to be prominent (i.e. a hilltop) if it is not lower than the avarage of its locality neighbors plus the specified prominenceMeters. This means that multiple hilltops with eqal elevation (since equal is not lower than) may be potentially recognized in close proximity to each other. Since findPositionGroupsInArea considers each hilltop to be a pivot for a position group, this may cause overlapping position groups to be returned by findPositionGroupsInArea.
  11. findRidgedPositionGroupsInArea service uses the center (avarage of all vertices) of the specified targetsArea as a reference point, relying on it being inside the targetsArea polygon. A concave targtesArea polygon whose center resides outside it is bound to cause unexpected results.

Public Attributes

DtVector viewPointLocal
 
double viewPct
 
DtVector coverPointLocal
 
double coverPct
 

Member Data Documentation

DtVector DtViewCoverPosition::viewPointLocal
double DtViewCoverPosition::viewPct
DtVector DtViewCoverPosition::coverPointLocal

100 means ViewPoint has line-of-sight to entire targets area.

double DtViewCoverPosition::coverPct

The documentation for this struct was generated from the following file:

Document ID: Generated on Thu Jun 1 17:58:13 EDT 2023 from SVN revision 255404
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)