Adding ViroKit. Needs AWSCore :(

This commit is contained in:
John Lyon-Smith
2018-03-27 17:46:15 -07:00
parent 2ab15e7dc1
commit 02e06dface
844 changed files with 86921 additions and 21 deletions

View File

@@ -0,0 +1,183 @@
//
// VROBoundingBox.h
// ViroRenderer
//
// Created by Raj Advani on 10/15/15.
// Copyright © 2015 Viro Media. All rights reserved.
//
#ifndef VROBOUNDINGBOX_H_
#define VROBOUNDINGBOX_H_
#include <stdlib.h>
#include <math.h>
#include "VROVector3f.h"
#include "VROMatrix4f.h"
#include <string>
#include <vector>
class VROFrustum;
enum VROBoxPlane {
VROBoxPlaneMinX = 0,
VROBoxPlaneMaxX = 1,
VROBoxPlaneMinY = 2,
VROBoxPlaneMaxY = 3,
VROBoxPlaneMinZ = 4,
VROBoxPlaneMaxZ = 5
};
class VROBoundingBox {
public:
/*
Constructors.
*/
VROBoundingBox() noexcept;
VROBoundingBox(float left, float right, float bottom, float top, float zmin, float zmax);
/*
Ray intersection. The intersection result will be stored in *intPt. If there are multiple intersection
points, only one will be returned.
*/
bool intersectsRay(const VROVector3f &ray, const VROVector3f &origin, VROVector3f *intPt);
/*
Point containment functions. The first function checks for full containment; the remaining functions
only check for containment along the indicated axes.
*/
bool containsPoint(const VROVector3f &point) const;
bool containsPointXY(const VROVector3f &point) const;
bool containsPointXZ(const VROVector3f &point) const;
bool containsPointYZ(const VROVector3f &point) const;
/*
Distance from the point to the bounding box.
*/
float getDistanceToPoint(VROVector3f p) const;
/*
Distance from the point to the furthest point on the bounding box.
*/
float getFurthestDistanceToPoint(VROVector3f p) const;
/*
Bounding-box to bounding-box containment and intersections.
*/
bool containsBox(const VROBoundingBox &box) const;
bool intersectsBox(const VROBoundingBox &box) const;
/*
Get the coordinates and extent of the bounding box.
*/
float getMinX() const {
return _planes[VROBoxPlaneMinX];
}
float getMaxX() const {
return _planes[VROBoxPlaneMaxX];
}
float getMaxY() const {
return _planes[VROBoxPlaneMaxY];
}
float getMinY() const {
return _planes[VROBoxPlaneMinY];
}
float getMaxZ() const {
return _planes[VROBoxPlaneMaxZ];
}
float getMinZ() const {
return _planes[VROBoxPlaneMinZ];
}
float getX() const {
return (_planes[VROBoxPlaneMaxX] + _planes[VROBoxPlaneMinX]) / 2;
}
float getY() const {
return (_planes[VROBoxPlaneMaxY] + _planes[VROBoxPlaneMinY]) / 2;
}
float getZ() const {
return (_planes[VROBoxPlaneMaxZ] + _planes[VROBoxPlaneMinZ]) / 2;
}
float getSpanX() const {
return _planes[VROBoxPlaneMaxX] - _planes[VROBoxPlaneMinX];
}
float getSpanY() const {
return _planes[VROBoxPlaneMaxY] - _planes[VROBoxPlaneMinY];
}
float getSpanZ() const {
return _planes[VROBoxPlaneMaxZ] - _planes[VROBoxPlaneMinZ];
}
VROVector3f getCenter() const {
return { getX(), getY(), getZ() };
}
VROVector3f getExtents() const {
return { getSpanX(), getSpanY(), getSpanZ() };
}
/*
Set the coordinates of the bounding box.
*/
void setMinX(float minX) {
_planes[VROBoxPlaneMinX] = minX;
}
void setMaxX(float maxX) {
_planes[VROBoxPlaneMaxX] = maxX;
}
void setMinY(float minY) {
_planes[VROBoxPlaneMinY] = minY;
}
void setMaxY(float maxY) {
_planes[VROBoxPlaneMaxY] = maxY;
}
void setMinZ(float minZ) {
_planes[VROBoxPlaneMinZ] = minZ;
}
void setMaxZ(float maxZ) {
_planes[VROBoxPlaneMaxZ] = maxZ;
}
const float *getPlanes() const {
return _planes;
}
/*
Scale by a relative amount (scaleBy) or an absolute amount (expandBy). Scales about the center of the
box.
*/
void scaleBy(float scale);
void expandBy(float amount);
/*
Transform this bounding box by the given matrix. Note that since this is
an AABB box, rotations can have significant impact on the size of the box.
*/
VROBoundingBox transform(VROMatrix4f transform) const;
/*
Optimized set functions.
*/
void set(const float *dimensions);
void set(float xMin, float xMax, float yMin, float yMax, float zMin, float zMax);
void copy(const VROBoundingBox &box);
VROBoundingBox unionWith(const VROBoundingBox &box);
/*
Union this bounding box with the supplied box, updating our member
variables to be a bounding box that contains all points we previously
contained, and any points the supplied box contains.
*/
void unionDestructive(const VROBoundingBox &box);
void center(float *center) const;
std::string toString() const;
private:
/*
The [xmin, xmax, ymin, ymax, zmin, zmax] extremities of this bounding-box.
*/
float _planes[6];
};
#endif /* VROBOUNDINGBOX_H_ */