first commit
This commit is contained in:
100
include/engine/core/geometry_tree.h
Normal file
100
include/engine/core/geometry_tree.h
Normal file
@ -0,0 +1,100 @@
|
||||
/* -----------------------------------------------------------------------------
|
||||
GSFramework
|
||||
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
|
||||
----------------------------------------------------------------------------- */
|
||||
|
||||
|
||||
#ifndef __NGEOTREE__
|
||||
#define __NGEOTREE__
|
||||
|
||||
|
||||
#include "core/graphic_resource_factory.h"
|
||||
#include "core/geometry.h"
|
||||
#include "math/vector.h"
|
||||
|
||||
|
||||
namespace GS {
|
||||
namespace Core {
|
||||
|
||||
struct GeometryTraceBase
|
||||
{
|
||||
Geometry *g;
|
||||
|
||||
float i_t; ///< Distance to intersection from ray's origin.
|
||||
bool backface; ///< Hit is on the back face of the polygon.
|
||||
|
||||
int ip; ///< Polygon index.
|
||||
uint it; ///< Triangle index in polygon.
|
||||
uint bi; ///< Polygon binding start index.
|
||||
float u, v, w; ///< Barycentric coordinates.
|
||||
|
||||
Material *m;
|
||||
ShaderTree *st;
|
||||
};
|
||||
|
||||
// Raytrace result.
|
||||
struct GeometryTrace : public GeometryTraceBase
|
||||
{
|
||||
Vector4 s; ///< Ray origin.
|
||||
Vector4 d; ///< Ray direction.
|
||||
|
||||
bool want_closest;
|
||||
bool has_i; ///< Do we have an intersection.
|
||||
|
||||
uint node_visited; ///< Number of nodes visited.
|
||||
uint tri_test; ///< Number of triangle tested.
|
||||
|
||||
GeometryTrace(bool closest = true)
|
||||
{
|
||||
want_closest = closest;
|
||||
has_i = false;
|
||||
|
||||
node_visited = 0;
|
||||
tri_test = 0;
|
||||
}
|
||||
};
|
||||
|
||||
/*!
|
||||
@short Geometry abstract tree.
|
||||
@author Emmanuel Julien (ejulien@gsworks.fr)
|
||||
*/
|
||||
class IGeometryTree
|
||||
{
|
||||
protected:
|
||||
|
||||
sGeometry geometry;
|
||||
|
||||
public:
|
||||
|
||||
Geometry *GetGeometry() const { return geometry; }
|
||||
|
||||
/*!
|
||||
@short Specify a fixed ray origin.
|
||||
|
||||
This function provides the tree implementation with an optimization
|
||||
opportunity by specifying a fixed ray origin.
|
||||
|
||||
@note Pass NULL to remove hint.
|
||||
*/
|
||||
virtual void SetRayOriginHint(const Vector4 *) {}
|
||||
|
||||
/*!
|
||||
@name Interface core functions.
|
||||
@{
|
||||
*/
|
||||
/// Raytrace the geometry tree.
|
||||
virtual void RaytraceGeometry(GeometryTrace &, const Vector4 &s, const Vector4 &d, float length = -1.f) = 0;
|
||||
/// Build tree from a geometry.
|
||||
virtual bool BuildFromGeometry(ResourceFactory &, Geometry *) = 0;
|
||||
/// Free all internal structures.
|
||||
virtual void Free() = 0;
|
||||
/// @}
|
||||
|
||||
virtual ~IGeometryTree() {}
|
||||
};
|
||||
|
||||
} // Core
|
||||
} // GS
|
||||
|
||||
|
||||
#endif // __NGEOTREE__
|
||||
Reference in New Issue
Block a user