10# include <openvdb/math/Transform.h>
14VoxelFieldContext::VoxelFieldContext(
const openvdb::math::Transform &
transform,
15 const Span<openvdb::Coord> voxels)
20GVArray VoxelFieldContext::get_varray_for_input(
const fn::FieldInput &field_input,
24 const bke::AttributeFieldInput *attribute_field_input =
25 dynamic_cast<const bke::AttributeFieldInput *
>(&field_input);
26 if (!attribute_field_input) {
29 if (attribute_field_input->attribute_name() !=
"position") {
35 threading::parallel_for(positions.index_range(), 1024, [&](
const IndexRange range) {
36 for (const int64_t i : range) {
37 const openvdb::Coord &voxel = voxels_[i];
38 const openvdb::Vec3d position = transform_.indexToWorld(voxel);
39 positions[i] = float3(position.x(), position.y(), position.z());
45TilesFieldContext::TilesFieldContext(
const openvdb::math::Transform &
transform,
51GVArray TilesFieldContext::get_varray_for_input(
const fn::FieldInput &field_input,
55 const bke::AttributeFieldInput *attribute_field_input =
56 dynamic_cast<const bke::AttributeFieldInput *
>(&field_input);
57 if (attribute_field_input ==
nullptr) {
60 if (attribute_field_input->attribute_name() !=
"position") {
66 threading::parallel_for(positions.index_range(), 1024, [&](
const IndexRange range) {
67 for (const int64_t i : range) {
68 const openvdb::CoordBBox &tile = tiles_[i];
69 const openvdb::Vec3d position = transform_.indexToWorld(tile.getCenter());
70 positions[i] = float3(position.x(), position.y(), position.z());
SIMD_FORCE_INLINE btVector3 transform(const btVector3 &point) const
static VArray ForContainer(ContainerT container)
ccl_gpu_kernel_postfix ccl_global KernelWorkTile * tiles