| FMeshShapeGenerator
|
Module |
|
Header |
/Engine/Plugins/Experimental/GeometryProcessing/Source/GeometricObjects/Public/Generators/MarchingCubes.h |
Include |
#include "Generators/MarchingCubes.h" |
class FMarchingCubes : public FMeshShapeGenerator
Name | Description | ||
---|---|---|---|
|
Bounds |
Bounding-box we will mesh inside of. |
|
|
bParallelCompute |
Use multi-threading? Generally a good idea unless problem is very small or you are multi-threading at a higher level (which may be more efficient) |
|
|
CancelF |
If this function returns true, we should abort calculation |
|
|
CellDimensions |
Cube indices range from [Origin,CellDimensions) |
|
|
corner_values |
Store corner values in hash table. |
|
|
corner_values_grid |
Store corner values in pre-allocated grid that has FMathf::MaxReal as sentinel. |
|
|
corner_values_lock |
||
|
double |
CubeSize |
Length of edges of cubes that are marching. |
|
done_cells |
||
|
done_cells_lock |
||
|
edge_vertices |
Hash table for edge vertices |
|
|
edge_vertices_lock |
||
|
const int64 |
EDGE_X |
|
|
const int64 |
EDGE_Y |
|
|
const int64 |
EDGE_Z |
|
|
GridBounds |
||
|
TFunction< doub... |
Implicit |
This is the function we will evaluate |
|
double |
IsoValue |
Mesh surface will be at this isovalue. |
|
LastGridBounds |
||
|
mesh_lock |
||
|
parallel_mesh_access |
||
|
RootMode |
Which rootfinding method will be used to converge on surface along edges |
|
|
int |
RootModeSteps |
Number of iterations of rootfinding method (ignored for SingleLerp) |
|
int |
SafetyMaxDimension |
Max number of cells on any dimension; if exceeded, CubeSize will be automatically increased to fix |
Name | Description | |
---|---|---|
|
FMarchingCubes() |
Name | Description | |
---|---|---|
|
~FMarchingCubes() |
Name | Description | ||
---|---|---|---|
|
int |
append_triangle ( |
Add triangle to mesh, with locking if we are computing in parallel |
|
int |
append_vertex ( |
Add vertex to mesh, with locking if we are computing in parallel |
|
cell_index ( |
||
|
corner_hash ( |
||
|
corner_hash ( |
Corner and edge hash functions, these pack the coordinate integers into 16-bits, so max of 65536 in any dimension. |
|
|
FVector3< do... |
corner_pos ( |
|
|
corner_pos |
||
|
double |
corner_value ( |
|
|
double |
corner_value_grid ( |
|
|
double |
corner_value_nohash ( |
Explicitly compute corner values as necessary |
|
edge_hash |
||
|
int |
edge_vertex_id |
|
|
find_iso |
Root-find the intersection along edge from f(P1)=ValP1 to f(P2)=ValP2 |
|
|
generate_basic() |
Fully sequential version, no threading |
|
|
generate_continuation ( |
Fully sequential version, no threading |
|
|
generate_continuation_parallel ( |
Parallel seed evaluation |
|
|
generate_parallel() |
Processing z-slabs of cells in parallel |
|
|
FMeshShapeGe... |
GenerateContinuation ( |
|
|
initialize_cell |
Compute 3D corner-positions and field values for cell at index |
|
|
initialize_cell_values |
||
|
initialize_cell_values_grid |
||
|
initialize_cell_values_nohash |
||
|
polygonize_cell ( |
Find edge crossings and generate triangles for this cell |
|
|
set_cell_if_not_done ( |
||
|
SetDimensions() |
||
|
shift_cell_x ( |
Assume we just want to slide cell at XIdx-1 to cell at XIdx, while keeping yi and ZIdx constant. |
|
|
Validate() |
Name | Description | ||
---|---|---|---|
|
FMeshShapeGe... |
Generate() |
Run MC algorithm and generate Output mesh |
Name |
Description |
|
---|---|---|
|
FGridCell |
We pass Cells around, this makes code cleaner |
Name |
Description |
---|---|
EdgeIndices |
Below here are standard marching-cubes tables. |
EdgeTable |
|
TriTable |