Panda3D
|
This class aids in the visualization and manipulation of PfmFile objects. More...
#include "pfmVizzer.h"
Public Member Functions | |
PfmVizzer (PfmFile &pfm) | |
The PfmVizzer constructor receives a reference to a PfmFile which it will operate on. More... | |
void | add_vis_column (ColumnType source, ColumnType target, InternalName *name, const TransformState *transform=NULL, const Lens *lens=NULL, const PfmFile *undist_lut=NULL) |
Adds a new vis column specification to the list of vertex data columns that will be generated at the next call to generate_vis_points() or generate_vis_mesh(). More... | |
double | calc_max_u_displacement () const |
Computes the maximum amount of shift, in pixels either left or right, of any pixel in the distortion map. More... | |
double | calc_max_v_displacement () const |
Computes the maximum amount of shift, in pixels either up or down, of any pixel in the distortion map. More... | |
void | clear_aux_pfm () |
Removes the auxiliary PfmFile from this PfmVizzer. More... | |
void | clear_flat_texcoord_name () |
Resets the flat_texcoord_name to empty, so that additional texture coordinates are not created. More... | |
void | clear_vis_blend () |
Removes the blending map set by a prior call to set_vis_blend(). More... | |
void | clear_vis_columns () |
Removes all of the previously-added vis columns in preparation for building a new list. More... | |
void | extrude (const Lens *lens) |
Converts each (u, v, depth) point of the Pfm file to an (x, y, z) point, by reversing project(). More... | |
NodePath | generate_vis_mesh (MeshFace face=MF_front) const |
Creates a triangle mesh with the points of the pfm as 3-d coordinates in space, and texture coordinates ranging from 0 . More... | |
NodePath | generate_vis_points () const |
Creates a point cloud with the points of the pfm as 3-d coordinates in space, and texture coordinates ranging from 0 . More... | |
const PfmFile * | get_aux_pfm () const |
Returns the reference to the auxiliary PfmFile queried by this PfmVizzer. More... | |
InternalName * | get_flat_texcoord_name () const |
Returns the flat_texcoord_name. More... | |
bool | get_keep_beyond_lens () const |
Returns the keep_beyond_lens flag. More... | |
PfmFile & | get_pfm () |
Returns the reference to the PfmFile manipulated by this PfmVizzer. More... | |
const PfmFile & | get_pfm () const |
Returns the reference to the PfmFile manipulated by this PfmVizzer. More... | |
bool | get_vis_2d () const |
Returns the vis_2d flag. More... | |
const PNMImage * | get_vis_blend () const |
Returns the blending map set by the most recent call to set_vis_blend(), or NULL if there is no blending map in effect. More... | |
bool | get_vis_inverse () const |
Returns the vis_inverse flag. More... | |
void | make_displacement (PNMImage &result, double max_u, double max_v, bool for_32bit) const |
Assuming the underlying PfmFile is a 2-d distortion mesh, with the U and V in the first two components and the third component unused, this computes an AfterEffects-style displacement map that represents the same distortion. More... | |
void | make_displacement (PfmFile &result, double max_u, double max_v, bool for_32bit) const |
Assuming the underlying PfmFile is a 2-d distortion mesh, with the U and V in the first two components and the third component unused, this computes an AfterEffects-style displacement map that represents the same distortion. More... | |
void | project (const Lens *lens, const PfmFile *undist_lut=NULL) |
Adjusts each (x, y, z) point of the Pfm file by projecting it through the indicated lens, converting each point to a (u, v, w) texture coordinate. More... | |
void | set_aux_pfm (const PfmFile *pfm) |
Assigns an auxiliary PfmFile to this PfmVizzer. More... | |
void | set_flat_texcoord_name (InternalName *flat_texcoord_name) |
If the flat_texcoord_name is specified, it is the name of an additional vertex column that will be created for the "flat" texture coordinates, i.e. More... | |
void | set_keep_beyond_lens (bool keep_beyond_lens) |
Sets the keep_beyond_lens flag. More... | |
void | set_vis_2d (bool vis_2d) |
Sets the vis_2d flag. More... | |
void | set_vis_blend (const PNMImage *vis_blend) |
Specifies a blending map–a grayscale image–that will be applied to the vertex color during generate_vis_mesh() and generate_vis_points(). More... | |
void | set_vis_inverse (bool vis_inverse) |
Sets the vis_inverse flag. More... | |
Friends | |
class | VisColumn |
This class aids in the visualization and manipulation of PfmFile objects.
Definition at line 33 of file pfmVizzer.h.
PfmVizzer::PfmVizzer | ( | PfmFile & | pfm | ) |
The PfmVizzer constructor receives a reference to a PfmFile which it will operate on.
It does not keep ownership of this reference; it is your responsibility to ensure the PfmFile does not destruct during the lifetime of the PfmVizzer.
Definition at line 37 of file pfmVizzer.cxx.
References project().
void PfmVizzer::add_vis_column | ( | ColumnType | source, |
ColumnType | target, | ||
InternalName * | name, | ||
const TransformState * | transform = NULL , |
||
const Lens * | lens = NULL , |
||
const PfmFile * | undist_lut = NULL |
||
) |
Adds a new vis column specification to the list of vertex data columns that will be generated at the next call to generate_vis_points() or generate_vis_mesh().
This advanced interface supercedes the higher-level set_vis_inverse(), set_flat_texcoord_name(), and set_vis_2d().
If you use this advanced interface, you must specify explicitly the complete list of data columns to be created in the resulting GeomVertexData, by calling add_vis_column() each time. For each column, you specify the source of the column in the PFMFile, the target column and name in the GeomVertexData, and an optional transform matrix and/or lens to transform and project the point before generating it.
Definition at line 252 of file pfmVizzer.cxx.
References generate_vis_points().
Referenced by clear_vis_columns(), and make_displacement().
double PfmVizzer::calc_max_u_displacement | ( | ) | const |
Computes the maximum amount of shift, in pixels either left or right, of any pixel in the distortion map.
This can be passed to make_displacement(); see that function for more information.
Definition at line 396 of file pfmVizzer.cxx.
References calc_max_v_displacement(), PfmFile::get_point(), PNMImageHeader::get_x_size(), PNMImageHeader::get_y_size(), and PfmFile::has_point().
Referenced by generate_vis_mesh().
double PfmVizzer::calc_max_v_displacement | ( | ) | const |
Computes the maximum amount of shift, in pixels either up or down, of any pixel in the distortion map.
This can be passed to make_displacement(); see that function for more information.
Definition at line 427 of file pfmVizzer.cxx.
References PfmFile::get_point(), PNMImageHeader::get_x_size(), PNMImageHeader::get_y_size(), PfmFile::has_point(), and make_displacement().
Referenced by calc_max_u_displacement().
|
inline |
Removes the auxiliary PfmFile from this PfmVizzer.
Definition at line 235 of file pfmVizzer.I.
References get_aux_pfm().
Referenced by set_aux_pfm().
|
inline |
Resets the flat_texcoord_name to empty, so that additional texture coordinates are not created.
This may be used in lieu of the lower-level add_vis_column().
Definition at line 100 of file pfmVizzer.I.
References get_flat_texcoord_name().
Referenced by set_flat_texcoord_name().
|
inline |
Removes the blending map set by a prior call to set_vis_blend().
Definition at line 193 of file pfmVizzer.I.
References get_vis_blend().
Referenced by set_vis_blend().
void PfmVizzer::clear_vis_columns | ( | ) |
Removes all of the previously-added vis columns in preparation for building a new list.
See add_vis_column().
Definition at line 228 of file pfmVizzer.cxx.
References add_vis_column().
Referenced by extrude(), set_flat_texcoord_name(), set_vis_2d(), and set_vis_inverse().
void PfmVizzer::extrude | ( | const Lens * | lens | ) |
Converts each (u, v, depth) point of the Pfm file to an (x, y, z) point, by reversing project().
If the original file is only a 1-d file, assumes that it is a depth map with implicit (u, v) coordinates.
This method is only valid for a linear lens (e.g. a PerspectiveLens or OrthographicLens). Non-linear lenses don't necessarily compute a sensible depth coordinate.
Definition at line 112 of file pfmVizzer.cxx.
References PfmFile::clear(), clear_vis_columns(), Lens::extrude_depth(), PNMImageHeader::get_num_channels(), PfmFile::get_point(), PfmFile::get_point1(), Lens::get_projection_mat_inv(), PNMImageHeader::get_x_size(), PNMImageHeader::get_y_size(), PfmFile::has_no_data_value(), PfmFile::has_point(), Lens::is_linear(), PfmFile::set_point(), PfmFile::set_zero_special(), and LMatrix4f::xform_point_general().
Referenced by project().
NodePath PfmVizzer::generate_vis_mesh | ( | MeshFace | face = MF_front | ) | const |
Creates a triangle mesh with the points of the pfm as 3-d coordinates in space, and texture coordinates ranging from 0 .
. 1 based on the position within the pfm grid.
Definition at line 351 of file pfmVizzer.cxx.
References calc_max_u_displacement(), PfmFile::clear_to_texcoords(), PfmFile::copy_channel(), generate_vis_mesh(), generate_vis_points(), PNMImageHeader::get_num_channels(), PNMImageHeader::get_x_size(), and PNMImageHeader::get_y_size().
Referenced by generate_vis_mesh(), generate_vis_points(), and PfmTrans::process_pfm().
NodePath PfmVizzer::generate_vis_points | ( | ) | const |
Creates a point cloud with the points of the pfm as 3-d coordinates in space, and texture coordinates ranging from 0 .
. 1 based on the position within the pfm grid.
Definition at line 267 of file pfmVizzer.cxx.
References GeomVertexWriter::add_data2f(), GeomVertexWriter::add_data3f(), generate_vis_mesh(), PfmFile::get_point(), PNMImageHeader::get_x_size(), PNMImageHeader::get_y_size(), and PfmFile::has_point().
Referenced by add_vis_column(), and generate_vis_mesh().
|
inline |
Returns the reference to the auxiliary PfmFile queried by this PfmVizzer.
This contains the values that will be reflected in CT_aux_vertex3 etc. See set_aux_pfm().
Definition at line 248 of file pfmVizzer.I.
Referenced by clear_aux_pfm(), and make_displacement().
|
inline |
Returns the flat_texcoord_name.
Definition at line 110 of file pfmVizzer.I.
References set_vis_2d().
Referenced by clear_flat_texcoord_name().
|
inline |
Returns the keep_beyond_lens flag.
Definition at line 162 of file pfmVizzer.I.
References set_vis_blend().
Referenced by set_keep_beyond_lens().
|
inline |
Returns the reference to the PfmFile manipulated by this PfmVizzer.
Definition at line 23 of file pfmVizzer.I.
Referenced by make_displacement().
|
inline |
Returns the reference to the PfmFile manipulated by this PfmVizzer.
Definition at line 34 of file pfmVizzer.I.
References set_vis_inverse().
|
inline |
Returns the vis_2d flag.
See set_vis_2d().
Definition at line 137 of file pfmVizzer.I.
References set_keep_beyond_lens().
Referenced by set_vis_2d().
|
inline |
Returns the blending map set by the most recent call to set_vis_blend(), or NULL if there is no blending map in effect.
Definition at line 205 of file pfmVizzer.I.
References set_aux_pfm().
Referenced by clear_vis_blend(), and make_displacement().
|
inline |
Returns the vis_inverse flag.
See set_vis_inverse().
Definition at line 64 of file pfmVizzer.I.
References set_flat_texcoord_name().
Referenced by set_vis_inverse().
void PfmVizzer::make_displacement | ( | PNMImage & | result, |
double | max_u, | ||
double | max_v, | ||
bool | for_32bit | ||
) | const |
Assuming the underlying PfmFile is a 2-d distortion mesh, with the U and V in the first two components and the third component unused, this computes an AfterEffects-style displacement map that represents the same distortion.
The indicated PNMImage will be filled in with a displacement map image, with horizontal shift in the red channel and vertical shift in the green channel, where a fully bright (or fully black) pixel indicates a shift of max_u or max_v pixels.
Use calc_max_u_displacement() and calc_max_v_displacement() to compute suitable values for max_u and max_v.
This generates an integer 16-bit displacement image. It is a good idea, though not necessarily essential, to check "Preserve RGB" in the interpret footage section for each displacement image. Set for_32bit true if this is meant to be used in a 32-bit project file, and false if it is meant to be used in a 16-bit project file.
Definition at line 476 of file pfmVizzer.cxx.
References PNMImage::clear(), PNMImage::fill_val(), PfmFile::get_point(), PNMImageHeader::get_x_size(), PNMImageHeader::get_y_size(), PfmFile::has_point(), PNMImage::set_blue_val(), and PNMImage::set_xel_val().
Referenced by calc_max_v_displacement().
void PfmVizzer::make_displacement | ( | PfmFile & | result, |
double | max_u, | ||
double | max_v, | ||
bool | for_32bit | ||
) | const |
Assuming the underlying PfmFile is a 2-d distortion mesh, with the U and V in the first two components and the third component unused, this computes an AfterEffects-style displacement map that represents the same distortion.
The indicated PNMImage will be filled in with a displacement map image, with horizontal shift in the red channel and vertical shift in the green channel, where a fully bright (or fully black) pixel indicates a shift of max_u or max_v pixels.
Use calc_max_u_displacement() and calc_max_v_displacement() to compute suitable values for max_u and max_v.
This generates a 32-bit floating-point displacement image. It is essential to check "Preserve RGB" in the interpret footage section for each displacement image. Set for_32bit true if this is meant to be used in a 32-bit project file, and false if it is meant to be used in a 16-bit project file.
Definition at line 580 of file pfmVizzer.cxx.
References GeomNode::add_geom(), add_vis_column(), PfmFile::clear(), get_aux_pfm(), PNMImage::get_blue_val(), PfmFile::get_channel(), PNMImage::get_gray(), get_pfm(), PfmFile::get_point(), PfmFile::get_point1(), PfmFile::get_point2(), get_vis_blend(), PNMImageHeader::get_x_size(), PNMImageHeader::get_y_size(), PfmFile::has_point(), LVecBase3f::is_nan(), LVecBase3f::normalize(), PfmFile::set_channel(), GeomVertexWriter::set_data2f(), GeomVertexWriter::set_data3d(), GeomVertexWriter::set_data3f(), GeomVertexData::set_num_rows(), PfmFile::set_point3(), GeomVertexWriter::set_row(), PNMImage::set_xel_val(), LMatrix4f::xform_point(), and LVector3f::zero().
Adjusts each (x, y, z) point of the Pfm file by projecting it through the indicated lens, converting each point to a (u, v, w) texture coordinate.
The resulting file can be generated to a mesh (with set_vis_inverse(true) and generate_vis_mesh()) that will apply the lens distortion to an arbitrary texture image.
Definition at line 57 of file pfmVizzer.cxx.
References PfmFile::calc_bilinear_point(), extrude(), PfmFile::get_no_data_value(), PNMImageHeader::get_x_size(), PNMImageHeader::get_y_size(), PfmFile::has_no_data_value(), PfmFile::has_point(), PfmFile::modify_point(), Lens::project(), and PfmFile::set_point4().
Referenced by PfmVizzer().
|
inline |
Assigns an auxiliary PfmFile to this PfmVizzer.
This file will be queried by column types CT_aux_vertex1/2/3, but has no other meaning to the vizzer. This size of this PfmFile should exactly match the base PfmFile. No reference count is held and no copy is made; the caller is responsible for ensuring that the auxiliary PfmFile will persist throughout the lifetime of the PfmVizzer it is assigned to.
Definition at line 223 of file pfmVizzer.I.
References clear_aux_pfm(), PNMImageHeader::get_x_size(), and PNMImageHeader::get_y_size().
Referenced by get_vis_blend().
|
inline |
If the flat_texcoord_name is specified, it is the name of an additional vertex column that will be created for the "flat" texture coordinates, i.e.
the original 0..1 values that correspond to the 2-D index position of each point in the original pfm file.
These are the same values that will be assigned to the default texture coordinates if the vis_inverse flag is *not* true.
This may be used in lieu of the lower-level add_vis_column().
Definition at line 85 of file pfmVizzer.I.
References clear_flat_texcoord_name(), and clear_vis_columns().
Referenced by get_vis_inverse().
|
inline |
Sets the keep_beyond_lens flag.
When this flag is true, points that fall outside of the normal lens range in project() or in add_vis_column() will be retained anyway; when it is false, these points will be discarded.
Definition at line 151 of file pfmVizzer.I.
References get_keep_beyond_lens().
Referenced by get_vis_2d().
|
inline |
Sets the vis_2d flag.
When this flag is true, only the first two (x, y) value of each depth point is considered meaningful; the z component is ignored. This is only relevant for generating visualizations.
This may be used in lieu of the lower-level add_vis_column().
Definition at line 126 of file pfmVizzer.I.
References clear_vis_columns(), and get_vis_2d().
Referenced by get_flat_texcoord_name(), and PfmTrans::process_pfm().
|
inline |
Specifies a blending map–a grayscale image–that will be applied to the vertex color during generate_vis_mesh() and generate_vis_points().
The image size must exactly match the mesh size of the PfmVizzer.
Ownership of the pointer is not kept by the PfmVizzer; it is your responsibility to ensure it does not destruct during the lifetime of the PfmVizzer (or at least not before your subsequent call to generate_vis_mesh()).
Definition at line 182 of file pfmVizzer.I.
References clear_vis_blend().
Referenced by get_keep_beyond_lens().
|
inline |
Sets the vis_inverse flag.
When this flag is true, vis meshes and point clouds are generated with the 3-d depth value in the texture coordinates, and the 2-d index value in the vertex position. When it is false, meshes are generated normally, with the 3-d depth value in the vertex position and the 2-d index value in the texture coordinates.
This may be used in lieu of the lower-level add_vis_column().
Definition at line 53 of file pfmVizzer.I.
References clear_vis_columns(), and get_vis_inverse().
Referenced by get_pfm(), and PfmTrans::process_pfm().