#include <voxelalgorithms.h>
Public Member Functions | |
VoxelLineIterator (const v3f &start_position, const v3f &line_vector) | |
void | next () |
bool | hasNext () const |
s16 | getIndex (v3s16 voxel) |
Public Attributes | |
v3f | m_start_position |
Starting position of the line in world coordinates. | |
v3f | m_line_vector |
Direction and length of the line in world coordinates. | |
v3f | m_next_intersection_multi { 10000.0f, 10000.0f, 10000.0f } |
v3f | m_intersection_multi_inc { 10000.0f, 10000.0f, 10000.0f } |
v3s16 | m_step_directions { 1, 1, 1 } |
v3s16 | m_current_node_pos |
Position of the current node. | |
s16 | m_current_index = 0 |
Index of the current node. | |
v3s16 | m_start_node_pos |
Position of the start node. | |
s16 | m_last_index |
Index of the last node. | |
This class iterates trough voxels that intersect with a line. The collision detection does not see nodeboxes, every voxel is a cube and is returned. This iterator steps to all nodes exactly once.
voxalgo::VoxelLineIterator::VoxelLineIterator | ( | const v3f & | start_position, |
const v3f & | line_vector ) |
Creates a voxel line iterator with the given line.
start_position | starting point of the line in voxel coordinates |
line_vector | length and direction of the line in voxel coordinates. start_position+line_vector is the end of the line |
References floatToInt(), getIndex(), m_current_node_pos, m_intersection_multi_inc, m_last_index, m_line_vector, m_next_intersection_multi, m_start_node_pos, m_start_position, and m_step_directions.
s16 voxalgo::VoxelLineIterator::getIndex | ( | v3s16 | voxel | ) |
Returns how many times next() must be called until voxel==m_current_node_pos. If voxel does not intersect with the line, the result is undefined.
References m_start_node_pos.
Referenced by VoxelLineIterator(), and Environment::continueRaycast().
|
inline |
Returns true if the next voxel intersects the given line.
References m_current_index, and m_last_index.
Referenced by TestVoxelAlgorithms::testVoxelLineIterator().
void voxalgo::VoxelLineIterator::next | ( | ) |
Steps to the next voxel. Updates m_current_node_pos and m_previous_node_pos. Note that it works even if hasNext() is false, continuing the line as a ray.
References m_current_index, m_current_node_pos, m_intersection_multi_inc, m_next_intersection_multi, and m_step_directions.
Referenced by Environment::continueRaycast(), Environment::line_of_sight(), and TestVoxelAlgorithms::testVoxelLineIterator().
s16 voxalgo::VoxelLineIterator::m_current_index = 0 |
Index of the current node.
Referenced by Environment::continueRaycast(), hasNext(), Environment::line_of_sight(), and next().
v3s16 voxalgo::VoxelLineIterator::m_current_node_pos |
Position of the current node.
Referenced by VoxelLineIterator(), Environment::continueRaycast(), Environment::line_of_sight(), next(), and TestVoxelAlgorithms::testVoxelLineIterator().
v3f voxalgo::VoxelLineIterator::m_intersection_multi_inc { 10000.0f, 10000.0f, 10000.0f } |
Each component stores the smallest positive number, by which m_next_intersection_multi's components can be increased.
Referenced by VoxelLineIterator(), and next().
s16 voxalgo::VoxelLineIterator::m_last_index |
Index of the last node.
Referenced by VoxelLineIterator(), Environment::continueRaycast(), hasNext(), and Environment::line_of_sight().
v3f voxalgo::VoxelLineIterator::m_line_vector |
Direction and length of the line in world coordinates.
Referenced by VoxelLineIterator().
v3f voxalgo::VoxelLineIterator::m_next_intersection_multi { 10000.0f, 10000.0f, 10000.0f } |
Each component stores the next smallest positive number, by which multiplying the line's vector gives a vector that ends on the intersection of two nodes.
Referenced by VoxelLineIterator(), and next().
v3s16 voxalgo::VoxelLineIterator::m_start_node_pos |
Position of the start node.
Referenced by VoxelLineIterator(), and getIndex().
v3f voxalgo::VoxelLineIterator::m_start_position |
Starting position of the line in world coordinates.
Referenced by VoxelLineIterator().
v3s16 voxalgo::VoxelLineIterator::m_step_directions { 1, 1, 1 } |
Direction of the line. Each component can be -1 or 1 (if a component of the line's vector is 0, then there will be 1).
Referenced by VoxelLineIterator(), and next().