| 274 | } |
| 275 | |
| 276 | EulerAngles GetRelOrientToNormal(short orient, const Vector3& normal, const Vector3& gravity) |
| 277 | { |
| 278 | // TODO: Consider axis. |
| 279 | |
| 280 | // Determine relative angle properties of normal. |
| 281 | short aspectAngle = Geometry::GetSurfaceAspectAngle(normal); |
| 282 | short slopeAngle = Geometry::GetSurfaceSlopeAngle(normal); |
| 283 | |
| 284 | short deltaAngle = Geometry::GetShortestAngle(orient, aspectAngle); |
| 285 | float sinDeltaAngle = phd_sin(deltaAngle); |
| 286 | float cosDeltaAngle = phd_cos(deltaAngle); |
| 287 | |
| 288 | // Calculate relative orientation adhering to normal. |
| 289 | return EulerAngles( |
| 290 | -slopeAngle * cosDeltaAngle, |
| 291 | orient, |
| 292 | slopeAngle * sinDeltaAngle); |
| 293 | } |
| 294 | |
| 295 | Quaternion ConvertDirectionToQuat(const Vector3& dir) |
| 296 | { |
no test coverage detected