Luanti 5.11.0-dev
 
Loading...
Searching...
No Matches
voxalgo::VoxelLineIterator Struct Reference

#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.
 

Detailed Description

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.

Constructor & Destructor Documentation

◆ VoxelLineIterator()

voxalgo::VoxelLineIterator::VoxelLineIterator ( const v3f & start_position,
const v3f & line_vector )

Creates a voxel line iterator with the given line.

Parameters
start_positionstarting point of the line in voxel coordinates
line_vectorlength 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.

+ Here is the call graph for this function:

Member Function Documentation

◆ getIndex()

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().

+ Here is the caller graph for this function:

◆ hasNext()

bool voxalgo::VoxelLineIterator::hasNext ( ) const
inline

Returns true if the next voxel intersects the given line.

References m_current_index, and m_last_index.

Referenced by TestVoxelAlgorithms::testVoxelLineIterator().

+ Here is the caller graph for this function:

◆ next()

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().

+ Here is the caller graph for this function:

Member Data Documentation

◆ m_current_index

s16 voxalgo::VoxelLineIterator::m_current_index = 0

Index of the current node.

Referenced by Environment::continueRaycast(), hasNext(), Environment::line_of_sight(), and next().

◆ m_current_node_pos

v3s16 voxalgo::VoxelLineIterator::m_current_node_pos

◆ m_intersection_multi_inc

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().

◆ m_last_index

s16 voxalgo::VoxelLineIterator::m_last_index

◆ m_line_vector

v3f voxalgo::VoxelLineIterator::m_line_vector

Direction and length of the line in world coordinates.

Referenced by VoxelLineIterator().

◆ m_next_intersection_multi

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().

◆ m_start_node_pos

v3s16 voxalgo::VoxelLineIterator::m_start_node_pos

Position of the start node.

Referenced by VoxelLineIterator(), and getIndex().

◆ m_start_position

v3f voxalgo::VoxelLineIterator::m_start_position

Starting position of the line in world coordinates.

Referenced by VoxelLineIterator().

◆ m_step_directions

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().


The documentation for this struct was generated from the following files: