H3D API
2.4.1
|
The ShadowGeometry object specifies a X3DGeometryNode that should be used for casting a shadow when used in the ShadowCaster node. More...
#include <H3D/ShadowGeometry.h>
Classes | |
class | SFGeometryNode |
SFGeometryNode is specialized to route the boundTree field from the X3DGeometryNodes that are put into the field to the triangles_changed field of the ShadowGeometry that contains it. More... | |
Public Member Functions | |
ShadowGeometry (Inst< SFNode > _metadata=0, Inst< SFTransformNode > _transform=0, Inst< SFGeometryNode > _geometry=0, Inst< SFBool > _enabled=0) | |
Constructor. | |
virtual void | update () |
Override to update data called in render | |
virtual void | computeShadowVolumeInformationCPU (const LightDataStruct &light_data, Matrix4f accumulated_fwd, bool render_caps, std::vector< Vec4d > &coord) |
Override to compute the shadow volume information of this object for light used in shadow caster single buffer mode. More... | |
virtual void | renderShadowGPU (const LightDataStruct &light_data, Matrix4f accumulated_fwd, bool render_caps) |
Override to do implement shadows using a geometry shader. More... | |
![]() | |
H3DShadowObjectNode (Inst< SFNode > _metadata=0, Inst< SFTransformNode > _transform=0, Inst< SFBool > _enabled=0) | |
Constructor. | |
virtual string | defaultXMLContainerField () |
Returns the default xml containerField attribute value. More... | |
![]() | |
X3DNode (Inst< SFNode > _metadata=0) | |
Constructor. | |
X3DMetadataObject * | getMetadataByName (const string &_name) |
Given a name, the first X3DMetadataObject in the metadata field that matches that name is returned. More... | |
![]() | |
Node () | |
Constructor. | |
virtual Node * | clone (bool deepCopy=true, DeepCopyMap *deepCopyMap=NULL) |
Returns a new instance of this node type with the same state as this one. More... | |
virtual | ~Node () |
Destructor. | |
X3DPrototypeInstance * | getProtoInstanceParent () |
If this node is the root node in the proto body of a X3DPrototypeInstance then this will return that node. More... | |
void | setProtoInstanceParent (X3DPrototypeInstance *p) |
Set the X3DPrototypeInstance this node is the the root node if applicaple. | |
virtual void | render () |
the render() function is used for the depth-first rendering traversal of the scene-graph. More... | |
virtual void | traverseSG (TraverseInfo &ti) |
traverseSG is called once per scenegraph loop on the scene in order to traverse the scenegraph. More... | |
virtual bool | lineIntersect (const Vec3f &from, const Vec3f &to, LineIntersectResult &result) |
Detect intersection between a line segment and the Node. More... | |
virtual void | closestPoint (const Vec3f &p, NodeIntersectResult &result) |
Find closest point on Node to p. More... | |
virtual bool | movingSphereIntersect (H3DFloat radius, const Vec3f &from, const Vec3f &to, NodeIntersectResult &result) |
Detect collision between a moving sphere and the Node. More... | |
virtual Field * | getField (const string &_name) const |
return a pointer to the field specified by name within this instance | |
int | addDestructCallback (void(*func)(Node *, void *), void *args) |
Add a callback function to be run on destruction of node. More... | |
int | removeDestructCallback (void(*func)(Node *, void *), void *args) |
Add a callback function to be run on destruction of node. More... | |
Public Attributes | |
H3DUniquePtr< SFGeometryNode > | geometry |
The geometry field specifies the X3DGeometryNode that should cast a shadow. More... | |
![]() | |
H3DUniquePtr< SFTransformNode > | transform |
The transform field specifies a transformation of the shadow volume object. More... | |
H3DUniquePtr< SFBool > | enabled |
Used to turn on/off shadow of this shadow object. More... | |
![]() | |
H3DUniquePtr< SFNode > | metadata |
Meta data about the node. More... | |
Static Public Attributes | |
static H3DNodeDatabase | database |
The H3DNodeDatabase object for this node. | |
![]() | |
static H3DNodeDatabase | database |
The H3DNodeDatabase for the node. | |
![]() | |
static H3DNodeDatabase | database |
The H3DNodeDatabase for this node. | |
Protected Member Functions | |
void | addDirectionalLightQuadPoints (vector< Vec4d > &triangle_points, const Vec3d &v1, const Vec3d &v2, const Vec3d &dir) |
Add the points for two triangles forming a quad using the given points and its projections at infinity to the triangle_points vector assuming a DirectionalLight with direction dir. | |
void | addPointLightQuadPoints (vector< Vec4d > &triangle_points, const Vec3d &v1, const Vec3d &v2, const Vec3d &light_pos) |
Add the points for two triangles forming a quad using the given points and its projections at infinity to the triangle_points vector assuming a PointLight with position light_pos. | |
void | updateNeighbours (const vector< HAPI::Collision::Triangle > &triangles) |
Updates the neighbours array by analysing the triangles from the node in the geometry field. | |
void | updateSilhouetteEdgesDirectionalLight (const vector< HAPI::Collision::Triangle > &, const vector< int > &neighbours, const Vec3d &direction) |
Updates the is_silhouette_edge and triangle_facing_light arrays given a directional light source shining in the direction direction. | |
void | updateSilhouetteEdgesPointLight (const vector< HAPI::Collision::Triangle > &, const vector< int > &neighbours, const Vec3d &pos) |
Updates the is_silhouette_edge and triangle_facing_light arrays given a point light source shining at position pos. | |
void | updateAdjacentVertexArray (const vector< HAPI::Collision::Triangle > &triangles, vector< Vec3d > &triangle_points, vector< unsigned int > &adjacency_index) |
Geven a list of triangles the vectors triangle_points and adjacency_index is filled with coordinates and indices for use for rendering all the triangles as vertex array with adjacency information. | |
int | getMissingPointIndex (const HAPI::Collision::Triangle &t, const Vec3d &p0, const Vec3d &p1) |
Given a triangle and two of its vertices(p0 and p1) the index of the third point of the triangle is returned. More... | |
![]() | |
void | cloneFieldValue (Field &_from, Field &_to, bool deepCopy, DeepCopyMap &deepCopyMap) |
A helper function for the clone() method. More... | |
Protected Attributes | |
H3DUniquePtr< Field > | triangles_changed |
This field will be sent an event when the triangles in the geometry field have changed. | |
vector< int > | neighbours |
Array of 3*nr_triangles triangle indices specifying for each triangle edge which triangle is its neighbour. More... | |
vector< HAPI::Collision::Triangle > | triangles |
The triangles of the geometry. More... | |
vector< Vec3d > | triangle_points_geom_shader |
Points to be used for vertex array rendering with adjacency info. | |
std::map< X3DLightNode *, pair< H3DTime, vector< Vec4d > > > | triangle_points_fallback |
Points to be used for each light vertex array rendering if CPU based. More... | |
vector< unsigned int > | index_geom_shader |
Index to be used for vertex array rendering with adjacency info. | |
vector< bool > | is_silhouette_edge |
Array of 3*nr_triangles values, one for each triangle edge. More... | |
vector< bool > | triangle_facing_light |
Array of nr_triangle values indicating if the triangle is facing the light source or not. | |
bool | use_geometry_shader_last_loop |
True if geometry shader was used last time this ShadowGeometry was rendered. | |
std::vector< HAPI::Collision::Triangle > | triangles_ts |
The triangles of the geometry. More... | |
Additional Inherited Members | |
![]() | |
typedef std::map< Node *, Node * > | DeepCopyMap |
A map type used during a deep copy clone() to map from original nodes to cloned nodes. | |
![]() | |
static unsigned int | nrNodesAlive () |
Returns the nr of nodes currently alive, i.e. nodes created but not destructed. | |
static int | nrNodesCreated () |
Returns the number of nodes created in total since the start of the program. | |
![]() | |
static Node * | getClonedInstance (Node *original, bool deepCopy, DeepCopyMap &deepCopyMap) |
A helper function for nodes that implement clone() More... | |
The ShadowGeometry object specifies a X3DGeometryNode that should be used for casting a shadow when used in the ShadowCaster node.
The geometry field specifies the X3DGeometryNode that should cast a shadow.
The transform field specifies a possible transformation of the geometry.
Examples:
|
virtual |
Override to compute the shadow volume information of this object for light used in shadow caster single buffer mode.
light_data | A struct containing information about the light that is creating the shadows. |
accumulated_fwd | The accumulated forward matrix. |
render_caps | determines if one should draw end caps to the volume or if it is ok to leave it open. |
coord | contains the coords. |
Implements H3D::H3DShadowObjectNode.
References triangles, and triangles_ts.
|
protected |
Given a triangle and two of its vertices(p0 and p1) the index of the third point of the triangle is returned.
If point a 0 is returned, if b then 1 and if c 2. If -1 is returned then the functions has been used incorrectly.
Referenced by updateAdjacentVertexArray().
|
virtual |
Override to do implement shadows using a geometry shader.
light_data | A struct containing information about the light that is creating the shadows. |
accumulated_fwd | The accumulated forward matrix. |
render_caps | determines if one should draw end caps to the volume or if it is ok to leave it open. |
Implements H3D::H3DShadowObjectNode.
References index_geom_shader, H3D::ShadowCasterShaders::setTransformMatrix(), triangle_points_geom_shader, triangles, triangles_ts, and updateAdjacentVertexArray().
H3DUniquePtr< SFGeometryNode > H3D::ShadowGeometry::geometry |
The geometry field specifies the X3DGeometryNode that should cast a shadow.
Access type: inputOutput
Referenced by update().
|
protected |
Array of 3*nr_triangles values, one for each triangle edge.
The value specifies if the edge is a silhouette edge or not, i.e. if the edge is shared between two triangles and one of the triangles are facing the light while the other one is not, or the edge is only used by one triangle.
Referenced by updateSilhouetteEdgesDirectionalLight(), and updateSilhouetteEdgesPointLight().
|
protected |
Array of 3*nr_triangles triangle indices specifying for each triangle edge which triangle is its neighbour.
Referenced by updateAdjacentVertexArray(), and updateNeighbours().
|
protected |
Points to be used for each light vertex array rendering if CPU based.
The pair contains the scene time at last update and the coordinates from that update.
|
protected |
The triangles of the geometry.
We cache them here instead of getting them from the boundTree since that is quite slow.
Referenced by computeShadowVolumeInformationCPU(), renderShadowGPU(), and update().
|
protected |
The triangles of the geometry.
We cache them here instead of getting them from the boundTree since that is quite slow.
Referenced by computeShadowVolumeInformationCPU(), and renderShadowGPU().