mirror of
https://gitlab.kitware.com/vtk/vtk-m
synced 2024-10-08 11:29:02 +00:00
don't always normalize scalars
This commit is contained in:
parent
d2ebecdb27
commit
4c0a3858b2
@ -371,18 +371,30 @@ class GetScalar : public vtkm::worklet::WorkletMapField
|
|||||||
private:
|
private:
|
||||||
Precision MinScalar;
|
Precision MinScalar;
|
||||||
Precision invDeltaScalar;
|
Precision invDeltaScalar;
|
||||||
|
bool Normalize;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
VTKM_CONT
|
VTKM_CONT
|
||||||
GetScalar(const vtkm::Float32& minScalar, const vtkm::Float32& maxScalar)
|
GetScalar(const vtkm::Float32& minScalar, const vtkm::Float32& maxScalar)
|
||||||
: MinScalar(minScalar)
|
: MinScalar(minScalar)
|
||||||
{
|
{
|
||||||
//Make sure the we don't divide by zero on
|
Normalize = true;
|
||||||
//something like an iso-surface
|
if (minScalar > maxScalar)
|
||||||
if (maxScalar - MinScalar != 0.f)
|
{
|
||||||
invDeltaScalar = 1.f / (maxScalar - MinScalar);
|
// support the scalar renderer
|
||||||
|
Normalize = false;
|
||||||
|
MinScalar = 0;
|
||||||
|
invDeltaScalar = 1;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
invDeltaScalar = 1.f / minScalar;
|
{
|
||||||
|
//Make sure the we don't divide by zero on
|
||||||
|
//something like an iso-surface
|
||||||
|
if (maxScalar - MinScalar != 0.f)
|
||||||
|
invDeltaScalar = 1.f / (maxScalar - MinScalar);
|
||||||
|
else
|
||||||
|
invDeltaScalar = 1.f / minScalar;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
typedef void ControlSignature(FieldIn, FieldInOut, WholeArrayIn, WholeArrayIn);
|
typedef void ControlSignature(FieldIn, FieldInOut, WholeArrayIn, WholeArrayIn);
|
||||||
typedef void ExecutionSignature(_1, _2, _3, _4);
|
typedef void ExecutionSignature(_1, _2, _3, _4);
|
||||||
@ -399,8 +411,10 @@ public:
|
|||||||
vtkm::Id3 pointId = indicesPortal.Get(hitIndex);
|
vtkm::Id3 pointId = indicesPortal.Get(hitIndex);
|
||||||
|
|
||||||
scalar = Precision(scalars.Get(pointId[0]));
|
scalar = Precision(scalars.Get(pointId[0]));
|
||||||
//normalize
|
if (Normalize)
|
||||||
scalar = (scalar - MinScalar) * invDeltaScalar;
|
{
|
||||||
|
scalar = (scalar - MinScalar) * invDeltaScalar;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}; //class GetScalar
|
}; //class GetScalar
|
||||||
|
|
||||||
|
@ -53,11 +53,11 @@ public:
|
|||||||
|
|
||||||
void IntersectionData(Ray<vtkm::Float32>& rays,
|
void IntersectionData(Ray<vtkm::Float32>& rays,
|
||||||
const vtkm::cont::Field scalarField,
|
const vtkm::cont::Field scalarField,
|
||||||
const vtkm::Range& scalarRange) override;
|
const vtkm::Range& scalarRange = vtkm::Range()) override;
|
||||||
|
|
||||||
void IntersectionData(Ray<vtkm::Float64>& rays,
|
void IntersectionData(Ray<vtkm::Float64>& rays,
|
||||||
const vtkm::cont::Field scalarField,
|
const vtkm::cont::Field scalarField,
|
||||||
const vtkm::Range& scalarRange) override;
|
const vtkm::Range& scalarRange = vtkm::Range()) override;
|
||||||
|
|
||||||
vtkm::Id GetNumberOfShapes() const override;
|
vtkm::Id GetNumberOfShapes() const override;
|
||||||
}; // class ShapeIntersector
|
}; // class ShapeIntersector
|
||||||
|
@ -358,18 +358,30 @@ class GetScalar : public vtkm::worklet::WorkletMapField
|
|||||||
private:
|
private:
|
||||||
Precision MinScalar;
|
Precision MinScalar;
|
||||||
Precision invDeltaScalar;
|
Precision invDeltaScalar;
|
||||||
|
bool Normalize;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
VTKM_CONT
|
VTKM_CONT
|
||||||
GetScalar(const vtkm::Float32& minScalar, const vtkm::Float32& maxScalar)
|
GetScalar(const vtkm::Float32& minScalar, const vtkm::Float32& maxScalar)
|
||||||
: MinScalar(minScalar)
|
: MinScalar(minScalar)
|
||||||
{
|
{
|
||||||
//Make sure the we don't divide by zero on
|
Normalize = true;
|
||||||
//something like an iso-surface
|
if (minScalar > maxScalar)
|
||||||
if (maxScalar - MinScalar != 0.f)
|
{
|
||||||
invDeltaScalar = 1.f / (maxScalar - MinScalar);
|
// support the scalar renderer
|
||||||
|
Normalize = false;
|
||||||
|
MinScalar = 0;
|
||||||
|
invDeltaScalar = 1;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
invDeltaScalar = 1.f / minScalar;
|
{
|
||||||
|
//Make sure the we don't divide by zero on
|
||||||
|
//something like an iso-surface
|
||||||
|
if (maxScalar - MinScalar != 0.f)
|
||||||
|
invDeltaScalar = 1.f / (maxScalar - MinScalar);
|
||||||
|
else
|
||||||
|
invDeltaScalar = 1.f / minScalar;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
typedef void ControlSignature(FieldIn, FieldOut, WholeArrayIn, WholeArrayIn);
|
typedef void ControlSignature(FieldIn, FieldOut, WholeArrayIn, WholeArrayIn);
|
||||||
typedef void ExecutionSignature(_1, _2, _3, _4);
|
typedef void ExecutionSignature(_1, _2, _3, _4);
|
||||||
@ -386,8 +398,10 @@ public:
|
|||||||
vtkm::Vec<vtkm::Id, 5> pointId = indicesPortal.Get(hitIndex);
|
vtkm::Vec<vtkm::Id, 5> pointId = indicesPortal.Get(hitIndex);
|
||||||
|
|
||||||
scalar = Precision(scalars.Get(pointId[0]));
|
scalar = Precision(scalars.Get(pointId[0]));
|
||||||
//normalize
|
if (Normalize)
|
||||||
scalar = (scalar - MinScalar) * invDeltaScalar;
|
{
|
||||||
|
scalar = (scalar - MinScalar) * invDeltaScalar;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}; //class GetScalar
|
}; //class GetScalar
|
||||||
|
|
||||||
|
@ -51,11 +51,11 @@ public:
|
|||||||
|
|
||||||
void IntersectionData(Ray<vtkm::Float32>& rays,
|
void IntersectionData(Ray<vtkm::Float32>& rays,
|
||||||
const vtkm::cont::Field scalarField,
|
const vtkm::cont::Field scalarField,
|
||||||
const vtkm::Range& scalarRange) override;
|
const vtkm::Range& scalarRange = vtkm::Range()) override;
|
||||||
|
|
||||||
void IntersectionData(Ray<vtkm::Float64>& rays,
|
void IntersectionData(Ray<vtkm::Float64>& rays,
|
||||||
const vtkm::cont::Field scalarField,
|
const vtkm::cont::Field scalarField,
|
||||||
const vtkm::Range& scalarRange) override;
|
const vtkm::Range& scalarRange = vtkm::Range()) override;
|
||||||
|
|
||||||
vtkm::Id GetNumberOfShapes() const override;
|
vtkm::Id GetNumberOfShapes() const override;
|
||||||
}; // class ShapeIntersector
|
}; // class ShapeIntersector
|
||||||
|
@ -124,7 +124,6 @@ void ScalarRenderer::AddField(const vtkm::cont::Field& scalarField)
|
|||||||
{
|
{
|
||||||
throw vtkm::cont::ErrorBadValue("ScalarRenderer(AddField): field must be a scalar");
|
throw vtkm::cont::ErrorBadValue("ScalarRenderer(AddField): field must be a scalar");
|
||||||
}
|
}
|
||||||
Ranges.push_back(ranges.ReadPortal().Get(0));
|
|
||||||
Fields.push_back(scalarField);
|
Fields.push_back(scalarField);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -172,7 +171,7 @@ void ScalarRenderer::RenderOnDevice(Ray<Precision>& rays, Precision missScalar)
|
|||||||
for (size_t f = 0; f < numFields; ++f)
|
for (size_t f = 0; f < numFields; ++f)
|
||||||
{
|
{
|
||||||
timer.Start();
|
timer.Start();
|
||||||
Intersector->IntersectionData(rays, Fields[f], Ranges[f]);
|
Intersector->IntersectionData(rays, Fields[f]);
|
||||||
time = timer.GetElapsedTime();
|
time = timer.GetElapsedTime();
|
||||||
logger->AddLogData("intersection_data", time);
|
logger->AddLogData("intersection_data", time);
|
||||||
AddBuffer(rays, missScalar, Fields[f].GetName());
|
AddBuffer(rays, missScalar, Fields[f].GetName());
|
||||||
|
@ -29,7 +29,6 @@ class VTKM_RENDERING_EXPORT ScalarRenderer
|
|||||||
protected:
|
protected:
|
||||||
std::shared_ptr<ShapeIntersector> Intersector;
|
std::shared_ptr<ShapeIntersector> Intersector;
|
||||||
std::vector<vtkm::cont::Field> Fields;
|
std::vector<vtkm::cont::Field> Fields;
|
||||||
std::vector<vtkm::Range> Ranges;
|
|
||||||
bool IntersectorValid;
|
bool IntersectorValid;
|
||||||
|
|
||||||
template <typename Precision>
|
template <typename Precision>
|
||||||
|
@ -54,11 +54,11 @@ public:
|
|||||||
//
|
//
|
||||||
virtual void IntersectionData(Ray<vtkm::Float32>& rays,
|
virtual void IntersectionData(Ray<vtkm::Float32>& rays,
|
||||||
const vtkm::cont::Field scalarField,
|
const vtkm::cont::Field scalarField,
|
||||||
const vtkm::Range& scalarRange) = 0;
|
const vtkm::Range& scalarRange = vtkm::Range()) = 0;
|
||||||
|
|
||||||
virtual void IntersectionData(Ray<vtkm::Float64>& rays,
|
virtual void IntersectionData(Ray<vtkm::Float64>& rays,
|
||||||
const vtkm::cont::Field scalarField,
|
const vtkm::cont::Field scalarField,
|
||||||
const vtkm::Range& scalarRange) = 0;
|
const vtkm::Range& scalarRange = vtkm::Range()) = 0;
|
||||||
|
|
||||||
|
|
||||||
template <typename Precision>
|
template <typename Precision>
|
||||||
|
@ -249,18 +249,30 @@ class GetScalar : public vtkm::worklet::WorkletMapField
|
|||||||
private:
|
private:
|
||||||
Precision MinScalar;
|
Precision MinScalar;
|
||||||
Precision invDeltaScalar;
|
Precision invDeltaScalar;
|
||||||
|
bool Normalize;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
VTKM_CONT
|
VTKM_CONT
|
||||||
GetScalar(const vtkm::Float32& minScalar, const vtkm::Float32& maxScalar)
|
GetScalar(const vtkm::Float32& minScalar, const vtkm::Float32& maxScalar)
|
||||||
: MinScalar(minScalar)
|
: MinScalar(minScalar)
|
||||||
{
|
{
|
||||||
//Make sure the we don't divide by zero on
|
Normalize = true;
|
||||||
//something like an iso-surface
|
if (minScalar > maxScalar)
|
||||||
if (maxScalar - MinScalar != 0.f)
|
{
|
||||||
invDeltaScalar = 1.f / (maxScalar - MinScalar);
|
// support the scalar renderer
|
||||||
|
Normalize = false;
|
||||||
|
MinScalar = 0;
|
||||||
|
invDeltaScalar = 1;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
invDeltaScalar = 1.f / minScalar;
|
{
|
||||||
|
//Make sure the we don't divide by zero on
|
||||||
|
//something like an iso-surface
|
||||||
|
if (maxScalar - MinScalar != 0.f)
|
||||||
|
invDeltaScalar = 1.f / (maxScalar - MinScalar);
|
||||||
|
else
|
||||||
|
invDeltaScalar = 1.f / minScalar;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
typedef void ControlSignature(FieldIn, FieldOut, WholeArrayIn, WholeArrayIn);
|
typedef void ControlSignature(FieldIn, FieldOut, WholeArrayIn, WholeArrayIn);
|
||||||
typedef void ExecutionSignature(_1, _2, _3, _4);
|
typedef void ExecutionSignature(_1, _2, _3, _4);
|
||||||
@ -276,8 +288,10 @@ public:
|
|||||||
vtkm::Id pointId = indicesPortal.Get(hitIndex);
|
vtkm::Id pointId = indicesPortal.Get(hitIndex);
|
||||||
|
|
||||||
scalar = Precision(scalars.Get(pointId));
|
scalar = Precision(scalars.Get(pointId));
|
||||||
//normalize
|
if (Normalize)
|
||||||
scalar = (scalar - MinScalar) * invDeltaScalar;
|
{
|
||||||
|
scalar = (scalar - MinScalar) * invDeltaScalar;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}; //class GetScalar
|
}; //class GetScalar
|
||||||
|
|
||||||
|
@ -243,18 +243,30 @@ public:
|
|||||||
private:
|
private:
|
||||||
Precision MinScalar;
|
Precision MinScalar;
|
||||||
Precision invDeltaScalar;
|
Precision invDeltaScalar;
|
||||||
|
bool Normalize;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
VTKM_CONT
|
VTKM_CONT
|
||||||
LerpScalar(const vtkm::Float32& minScalar, const vtkm::Float32& maxScalar)
|
LerpScalar(const vtkm::Float32& minScalar, const vtkm::Float32& maxScalar)
|
||||||
: MinScalar(minScalar)
|
: MinScalar(minScalar)
|
||||||
{
|
{
|
||||||
//Make sure the we don't divide by zero on
|
Normalize = true;
|
||||||
//something like an iso-surface
|
if (minScalar > maxScalar)
|
||||||
if (maxScalar - MinScalar != 0.f)
|
{
|
||||||
invDeltaScalar = 1.f / (maxScalar - MinScalar);
|
// support the scalar renderer
|
||||||
|
Normalize = false;
|
||||||
|
MinScalar = 0;
|
||||||
|
invDeltaScalar = 1;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
invDeltaScalar = 0.f;
|
{
|
||||||
|
//Make sure the we don't divide by zero on
|
||||||
|
//something like an iso-surface
|
||||||
|
if (maxScalar - MinScalar != 0.f)
|
||||||
|
invDeltaScalar = 1.f / (maxScalar - MinScalar);
|
||||||
|
else
|
||||||
|
invDeltaScalar = 1.f / minScalar;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
typedef void ControlSignature(FieldIn,
|
typedef void ControlSignature(FieldIn,
|
||||||
FieldIn,
|
FieldIn,
|
||||||
@ -282,7 +294,10 @@ public:
|
|||||||
Precision cScalar = Precision(scalars.Get(indices[3]));
|
Precision cScalar = Precision(scalars.Get(indices[3]));
|
||||||
lerpedScalar = aScalar * n + bScalar * u + cScalar * v;
|
lerpedScalar = aScalar * n + bScalar * u + cScalar * v;
|
||||||
//normalize
|
//normalize
|
||||||
lerpedScalar = (lerpedScalar - MinScalar) * invDeltaScalar;
|
if (Normalize)
|
||||||
|
{
|
||||||
|
lerpedScalar = (lerpedScalar - MinScalar) * invDeltaScalar;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}; //class LerpScalar
|
}; //class LerpScalar
|
||||||
|
|
||||||
|
@ -46,11 +46,11 @@ public:
|
|||||||
|
|
||||||
VTKM_CONT void IntersectionData(Ray<vtkm::Float32>& rays,
|
VTKM_CONT void IntersectionData(Ray<vtkm::Float32>& rays,
|
||||||
const vtkm::cont::Field scalarField,
|
const vtkm::cont::Field scalarField,
|
||||||
const vtkm::Range& scalarRange) override;
|
const vtkm::Range& scalarRange = vtkm::Range()) override;
|
||||||
|
|
||||||
VTKM_CONT void IntersectionData(Ray<vtkm::Float64>& rays,
|
VTKM_CONT void IntersectionData(Ray<vtkm::Float64>& rays,
|
||||||
const vtkm::cont::Field scalarField,
|
const vtkm::cont::Field scalarField,
|
||||||
const vtkm::Range& scalarRange) override;
|
const vtkm::Range& scalarRange = vtkm::Range()) override;
|
||||||
|
|
||||||
template <typename Precision>
|
template <typename Precision>
|
||||||
VTKM_CONT void IntersectRaysImp(Ray<Precision>& rays, bool returnCellIndex);
|
VTKM_CONT void IntersectRaysImp(Ray<Precision>& rays, bool returnCellIndex);
|
||||||
|
Loading…
Reference in New Issue
Block a user