Panda3D
Loading...
Searching...
No Matches
pfmFile.h
Go to the documentation of this file.
1/**
2 * PANDA 3D SOFTWARE
3 * Copyright (c) Carnegie Mellon University. All rights reserved.
4 *
5 * All use of this software is subject to the terms of the revised BSD
6 * license. You should have received a copy of this license along
7 * with this source code in a file named "LICENSE."
8 *
9 * @file pfmFile.h
10 * @author drose
11 * @date 2010-12-23
12 */
13
14#ifndef PFMFILE_H
15#define PFMFILE_H
16
17#include "pandabase.h"
18#include "pnmImageHeader.h"
19#include "luse.h"
20#include "boundingHexahedron.h"
21#include "vector_float.h"
22
23class PNMImage;
24class PNMReader;
25class PNMWriter;
26
27/**
28 * Defines a pfm file, a 2-d table of floating-point numbers, either
29 * 3-component or 1-component, or with a special extension, 2- or 4-component.
30 */
31class EXPCL_PANDA_PNMIMAGE PfmFile : public PNMImageHeader {
32PUBLISHED:
33 PfmFile();
34 PfmFile(const PfmFile &copy);
35 void operator = (const PfmFile &copy);
36
37 void clear();
38 void clear(int x_size, int y_size, int num_channels);
39
40 BLOCKING bool read(const Filename &fullpath);
41 BLOCKING bool read(std::istream &in, const Filename &fullpath = Filename());
42 BLOCKING bool read(PNMReader *reader);
43 BLOCKING bool write(const Filename &fullpath);
44 BLOCKING bool write(std::ostream &out, const Filename &fullpath = Filename());
45 BLOCKING bool write(PNMWriter *writer);
46
47 BLOCKING bool load(const PNMImage &pnmimage);
48 BLOCKING bool store(PNMImage &pnmimage) const;
49 BLOCKING bool store_mask(PNMImage &pnmimage) const;
50 BLOCKING bool store_mask(PNMImage &pnmimage, const LVecBase4f &min_point, const LVecBase4f &max_point) const;
51
52 INLINE bool is_valid() const;
53 MAKE_PROPERTY(valid, is_valid);
54
55 INLINE PN_float32 get_scale() const;
56 INLINE void set_scale(PN_float32 scale);
57 MAKE_PROPERTY(scale, get_scale, set_scale);
58
59 INLINE bool has_point(int x, int y) const;
60 INLINE PN_float32 get_channel(int x, int y, int c) const;
61 INLINE void set_channel(int x, int y, int c, PN_float32 value);
62 INLINE PN_float32 get_point1(int x, int y) const;
63 INLINE void set_point1(int x, int y, PN_float32 point);
64 INLINE const LPoint2f &get_point2(int x, int y) const;
65 INLINE void set_point2(int x, int y, const LVecBase2f &point);
66 INLINE void set_point2(int x, int y, const LVecBase2d &point);
67 INLINE LPoint2f &modify_point2(int x, int y);
68 INLINE const LPoint3f &get_point(int x, int y) const;
69 INLINE void set_point(int x, int y, const LVecBase3f &point);
70 INLINE void set_point(int x, int y, const LVecBase3d &point);
71 INLINE LPoint3f &modify_point(int x, int y);
72 INLINE const LPoint3f &get_point3(int x, int y) const;
73 INLINE void set_point3(int x, int y, const LVecBase3f &point);
74 INLINE void set_point3(int x, int y, const LVecBase3d &point);
75 INLINE LPoint3f &modify_point3(int x, int y);
76 INLINE const LPoint4f &get_point4(int x, int y) const;
77 INLINE void set_point4(int x, int y, const LVecBase4f &point);
78 INLINE void set_point4(int x, int y, const LVecBase4d &point);
79 INLINE LPoint4f &modify_point4(int x, int y);
80
81 INLINE void fill(PN_float32 value);
82 INLINE void fill(const LPoint2f &value);
83 INLINE void fill(const LPoint3f &value);
84 void fill(const LPoint4f &value);
85 void fill_nan();
86 void fill_no_data_value();
87 void fill_channel(int channel, PN_float32 value);
88 void fill_channel_nan(int channel);
89 void fill_channel_masked(int channel, PN_float32 value);
90 void fill_channel_masked_nan(int channel);
91
92 BLOCKING bool calc_average_point(LPoint3f &result, PN_float32 x, PN_float32 y, PN_float32 radius) const;
93 BLOCKING bool calc_bilinear_point(LPoint3f &result, PN_float32 x, PN_float32 y) const;
94 BLOCKING bool calc_min_max(LVecBase3f &min_points, LVecBase3f &max_points) const;
95 BLOCKING bool calc_autocrop(int &x_begin, int &x_end, int &y_begin, int &y_end) const;
96 BLOCKING INLINE bool calc_autocrop(LVecBase4f &range) const;
97 BLOCKING INLINE bool calc_autocrop(LVecBase4d &range) const;
98
99 bool is_row_empty(int y, int x_begin, int x_end) const;
100 bool is_column_empty(int x, int y_begin, int y_end) const;
101
102 INLINE void set_zero_special(bool zero_special);
103 INLINE void set_no_data_chan4(bool chan4);
104 void set_no_data_nan(int num_channels);
105 void set_no_data_value(const LPoint4f &no_data_value);
106 INLINE void set_no_data_value(const LPoint4d &no_data_value);
107 void set_no_data_threshold(const LPoint4f &no_data_value);
108 INLINE void set_no_data_threshold(const LPoint4d &no_data_value);
109 INLINE void clear_no_data_value();
110 INLINE bool has_no_data_value() const;
111 INLINE bool has_no_data_threshold() const;
112 INLINE const LPoint4f &get_no_data_value() const;
113
114 BLOCKING void resize(int new_x_size, int new_y_size);
115 BLOCKING void box_filter_from(float radius, const PfmFile &copy);
116 BLOCKING void gaussian_filter_from(float radius, const PfmFile &copy);
117 BLOCKING void quick_filter_from(const PfmFile &copy);
118
119 BLOCKING void reverse_rows();
120 BLOCKING void flip(bool flip_x, bool flip_y, bool transpose);
121 BLOCKING void xform(const LMatrix4f &transform);
122 INLINE BLOCKING void xform(const LMatrix4d &transform);
123 BLOCKING void forward_distort(const PfmFile &dist, PN_float32 scale_factor = 1.0);
124 BLOCKING void reverse_distort(const PfmFile &dist, PN_float32 scale_factor = 1.0);
125 BLOCKING void apply_1d_lut(int channel, const PfmFile &lut, PN_float32 x_scale = 1.0);
126
127 BLOCKING void merge(const PfmFile &other);
128 BLOCKING void apply_mask(const PfmFile &other);
129 BLOCKING void copy_channel(int to_channel, const PfmFile &other, int from_channel);
130 BLOCKING void copy_channel_masked(int to_channel, const PfmFile &other, int from_channel);
131 BLOCKING void apply_crop(int x_begin, int x_end, int y_begin, int y_end);
132 BLOCKING void clear_to_texcoords(int x_size, int y_size);
133
134 BLOCKING int pull_spot(const LPoint4f &delta, float xc, float yc,
135 float xr, float yr, float exponent);
136
137 bool calc_tight_bounds(LPoint3f &min_point, LPoint3f &max_point) const;
138 BLOCKING PT(BoundingHexahedron) compute_planar_bounds(const LPoint2f &center, PN_float32 point_dist, PN_float32 sample_radius, bool points_only) const;
139 INLINE BLOCKING PT(BoundingHexahedron) compute_planar_bounds(const LPoint2d &center, PN_float32 point_dist, PN_float32 sample_radius, bool points_only) const;
140 void compute_sample_point(LPoint3f &result,
141 PN_float32 x, PN_float32 y, PN_float32 sample_radius) const;
142
143 void copy_sub_image(const PfmFile &copy, int xto, int yto,
144 int xfrom = 0, int yfrom = 0,
145 int x_size = -1, int y_size = -1);
146 void add_sub_image(const PfmFile &copy, int xto, int yto,
147 int xfrom = 0, int yfrom = 0,
148 int x_size = -1, int y_size = -1,
149 float pixel_scale = 1.0);
150 void mult_sub_image(const PfmFile &copy, int xto, int yto,
151 int xfrom = 0, int yfrom = 0,
152 int x_size = -1, int y_size = -1,
153 float pixel_scale = 1.0);
154 void divide_sub_image(const PfmFile &copy, int xto, int yto,
155 int xfrom = 0, int yfrom = 0,
156 int x_size = -1, int y_size = -1,
157 float pixel_scale = 1.0);
158
159 void operator *= (float multiplier);
160
161 void indirect_1d_lookup(const PfmFile &index_image, int channel,
162 const PfmFile &pixel_values);
163
164 INLINE void gamma_correct(float from_gamma, float to_gamma);
165 INLINE void gamma_correct_alpha(float from_gamma, float to_gamma);
166 INLINE void apply_exponent(float gray_exponent);
167 INLINE void apply_exponent(float gray_exponent, float alpha_exponent);
168 INLINE void apply_exponent(float c0_exponent, float c1_exponent, float c2_exponent);
169 void apply_exponent(float c0_exponent, float c1_exponent, float c2_exponent, float c3_exponent);
170
171 void output(std::ostream &out) const;
172
173#ifdef HAVE_PYTHON
174 EXTENSION(PyObject *get_points() const);
175
176 EXTENSION(int __getbuffer__(PyObject *self, Py_buffer *view, int flags) const);
177#endif
178
179public:
180 INLINE const vector_float &get_table() const;
181 INLINE void swap_table(vector_float &table);
182
183private:
184 INLINE void setup_sub_image(const PfmFile &copy, int &xto, int &yto,
185 int &xfrom, int &yfrom, int &x_size, int &y_size,
186 int &xmin, int &ymin, int &xmax, int &ymax);
187
188 void box_filter_region(PN_float32 &result,
189 PN_float32 x0, PN_float32 y0, PN_float32 x1, PN_float32 y1) const;
190 void box_filter_region(LPoint2f &result,
191 PN_float32 x0, PN_float32 y0, PN_float32 x1, PN_float32 y1) const;
192 void box_filter_region(LPoint3f &result,
193 PN_float32 x0, PN_float32 y0, PN_float32 x1, PN_float32 y1) const;
194 void box_filter_region(LPoint4f &result,
195 PN_float32 x0, PN_float32 y0, PN_float32 x1, PN_float32 y1) const;
196 void box_filter_line(PN_float32 &result, PN_float32 &coverage,
197 PN_float32 x0, int y, PN_float32 x1, PN_float32 y_contrib) const;
198 void box_filter_line(LPoint2f &result, PN_float32 &coverage,
199 PN_float32 x0, int y, PN_float32 x1, PN_float32 y_contrib) const;
200 void box_filter_line(LPoint3f &result, PN_float32 &coverage,
201 PN_float32 x0, int y, PN_float32 x1, PN_float32 y_contrib) const;
202 void box_filter_line(LPoint4f &result, PN_float32 &coverage,
203 PN_float32 x0, int y, PN_float32 x1, PN_float32 y_contrib) const;
204 void box_filter_point(PN_float32 &result, PN_float32 &coverage,
205 int x, int y, PN_float32 x_contrib, PN_float32 y_contrib) const;
206 void box_filter_point(LPoint2f &result, PN_float32 &coverage,
207 int x, int y, PN_float32 x_contrib, PN_float32 y_contrib) const;
208 void box_filter_point(LPoint3f &result, PN_float32 &coverage,
209 int x, int y, PN_float32 x_contrib, PN_float32 y_contrib) const;
210 void box_filter_point(LPoint4f &result, PN_float32 &coverage,
211 int x, int y, PN_float32 x_contrib, PN_float32 y_contrib) const;
212
213 class MiniGridCell {
214 public:
215 MiniGridCell() : _sxi(-1), _syi(-1), _dist(-1) { }
216 int _sxi, _syi;
217 int _dist;
218 };
219
220 void fill_mini_grid(MiniGridCell *mini_grid, int x_size, int y_size,
221 int xi, int yi, int dist, int sxi, int syi) const;
222
223 static bool has_point_noop(const PfmFile *file, int x, int y);
224 static bool has_point_1(const PfmFile *file, int x, int y);
225 static bool has_point_2(const PfmFile *file, int x, int y);
226 static bool has_point_3(const PfmFile *file, int x, int y);
227 static bool has_point_4(const PfmFile *file, int x, int y);
228 static bool has_point_threshold_1(const PfmFile *file, int x, int y);
229 static bool has_point_threshold_2(const PfmFile *file, int x, int y);
230 static bool has_point_threshold_3(const PfmFile *file, int x, int y);
231 static bool has_point_threshold_4(const PfmFile *file, int x, int y);
232 static bool has_point_chan4(const PfmFile *file, int x, int y);
233 static bool has_point_nan_1(const PfmFile *file, int x, int y);
234 static bool has_point_nan_2(const PfmFile *file, int x, int y);
235 static bool has_point_nan_3(const PfmFile *file, int x, int y);
236 static bool has_point_nan_4(const PfmFile *file, int x, int y);
237
238private:
239 typedef vector_float Table;
240 Table _table;
241
242 PN_float32 _scale;
243
244 bool _has_no_data_value;
245 bool _has_no_data_threshold;
246 LPoint4f _no_data_value;
247
248 typedef bool HasPointFunc(const PfmFile *file, int x, int y);
249 HasPointFunc *_has_point;
250
251 friend class PfmVizzer;
252};
253
254#include "pfmFile.I"
255
256#endif
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
This defines a bounding convex hexahedron.
The name of a file, such as a texture file or an Egg file.
Definition filename.h:44
The name of this class derives from the fact that we originally implemented it as a layer on top of t...
Definition pnmImage.h:58
This is an abstract base class that defines the interface for reading image files of various types.
Definition pnmReader.h:27
This is an abstract base class that defines the interface for writing image files of various types.
Definition pnmWriter.h:27
void clear_to_texcoords(int x_size, int y_size)
Replaces this PfmFile with a new PfmFile of size x_size x y_size x 3, containing the x y 0 values in ...
Definition pfmFile.cxx:1582
void set_no_data_nan(int num_channels)
Sets the no_data_nan flag.
Definition pfmFile.cxx:858
void clear_no_data_value()
Removes the special value that means "no data" when it appears in the pfm file.
Definition pfmFile.I:421
void fill_channel(int channel, PN_float32 value)
Fills the indicated channel with all of the same value, leaving the other channels unchanged.
Definition pfmFile.cxx:550
bool calc_bilinear_point(LPoint3f &result, PN_float32 x, PN_float32 y) const
Computes the weighted average of the four nearest points to the floating- point index (x,...
Definition pfmFile.cxx:689
void set_no_data_chan4(bool chan4)
Sets the no_data_chan4 flag.
Definition pfmFile.I:387
void copy_channel_masked(int to_channel, const PfmFile &other, int from_channel)
Copies just the specified channel values from the indicated PfmFile, but only where the other file ha...
Definition pfmFile.cxx:1531
void merge(const PfmFile &other)
Wherever there is missing data in this PfmFile (that is, wherever has_point() returns false),...
Definition pfmFile.cxx:1461
bool has_no_data_value() const
Returns whether a "no data" value has been established by set_no_data_value().
Definition pfmFile.I:433
void mult_sub_image(const PfmFile &copy, int xto, int yto, int xfrom=0, int yfrom=0, int x_size=-1, int y_size=-1, float pixel_scale=1.0)
Behaves like copy_sub_image(), except the copy pixels are multiplied to the pixels of the destination...
Definition pfmFile.cxx:2029
bool is_column_empty(int x, int y_begin, int y_end) const
Returns true if all of the points on column x, from [y_begin, y_end), are the no_data value,...
Definition pfmFile.cxx:834
void gaussian_filter_from(float radius, const PfmFile &copy)
Makes a resized copy of the indicated image into this one using the indicated filter.
void divide_sub_image(const PfmFile &copy, int xto, int yto, int xfrom=0, int yfrom=0, int x_size=-1, int y_size=-1, float pixel_scale=1.0)
Behaves like copy_sub_image(), except the copy pixels are divided into the pixels of the destination,...
Definition pfmFile.cxx:2094
void add_sub_image(const PfmFile &copy, int xto, int yto, int xfrom=0, int yfrom=0, int x_size=-1, int y_size=-1, float pixel_scale=1.0)
Behaves like copy_sub_image(), except the copy pixels are added to the pixels of the destination,...
Definition pfmFile.cxx:1965
void forward_distort(const PfmFile &dist, PN_float32 scale_factor=1.0)
Applies the distortion indicated in the supplied dist map to the current map.
Definition pfmFile.cxx:1305
const LPoint3f & get_point(int x, int y) const
Returns the 3-component point value at the indicated point.
Definition pfmFile.I:158
void reverse_rows()
Performs an in-place reversal of the row (y) data.
Definition pfmFile.cxx:1146
void swap_table(vector_float &table)
This is a very low-level function that completely exchanges the PfmFile's internal table of floating-...
Definition pfmFile.I:549
bool read(const Filename &fullpath)
Reads the PFM data from the indicated file, returning true on success, false on failure.
Definition pfmFile.cxx:121
bool write(const Filename &fullpath)
Writes the PFM data to the indicated file, returning true on success, false on failure.
Definition pfmFile.cxx:204
void set_no_data_threshold(const LPoint4f &no_data_value)
Sets the special threshold value.
Definition pfmFile.cxx:925
void resize(int new_x_size, int new_y_size)
Applies a simple filter to resample the pfm file in-place to the indicated size.
Definition pfmFile.cxx:956
void fill_channel_nan(int channel)
Fills the indicated channel with NaN, leaving the other channels unchanged.
Definition pfmFile.cxx:564
bool calc_tight_bounds(LPoint3f &min_point, LPoint3f &max_point) const
Calculates the minimum and maximum vertices of all points within the table.
Definition pfmFile.cxx:1646
bool store(PNMImage &pnmimage) const
Copies the data to the indicated PNMImage, converting to RGB values.
Definition pfmFile.cxx:360
void xform(const LMatrix4f &transform)
Applies the indicated transform matrix to all points in-place.
Definition pfmFile.cxx:1222
void gamma_correct_alpha(float from_gamma, float to_gamma)
Assuming the image was constructed with a gamma curve of from_gamma in the alpha channel,...
Definition pfmFile.I:499
const vector_float & get_table() const
This is a very low-level function that returns a read-only reference to the internal table of floatin...
Definition pfmFile.I:538
void set_no_data_value(const LPoint4f &no_data_value)
Sets the special value that means "no data" when it appears in the pfm file.
Definition pfmFile.cxx:895
void set_channel(int x, int y, int c, PN_float32 value)
Replaces the cth channel of the point value at the indicated point.
Definition pfmFile.I:63
void apply_mask(const PfmFile &other)
Wherever there is missing data in the other PfmFile, set this the corresponding point in this PfmFile...
Definition pfmFile.cxx:1490
bool calc_average_point(LPoint3f &result, PN_float32 x, PN_float32 y, PN_float32 radius) const
Computes the unweighted average point of all points within the box centered at (x,...
Definition pfmFile.cxx:607
bool calc_min_max(LVecBase3f &min_points, LVecBase3f &max_points) const
Calculates the minimum and maximum x, y, and z depth component values, representing the bounding box ...
Definition pfmFile.cxx:737
bool load(const PNMImage &pnmimage)
Fills the PfmFile with the data from the indicated PNMImage, converted to floating-point values.
Definition pfmFile.cxx:287
void box_filter_from(float radius, const PfmFile &copy)
Makes a resized copy of the indicated image into this one using the indicated filter.
LPoint3f & modify_point(int x, int y)
Returns a modifiable 3-component point value at the indicated point.
Definition pfmFile.I:184
void set_point4(int x, int y, const LVecBase4f &point)
Replaces the 4-component point value at the indicated point.
Definition pfmFile.I:266
int pull_spot(const LPoint4f &delta, float xc, float yc, float xr, float yr, float exponent)
Applies delta * t to the point values within radius (xr, yr) distance of (xc, yc).
Definition pfmFile.cxx:1610
void fill(PN_float32 value)
Fills the table with all of the same value.
Definition pfmFile.I:316
LPoint3f & modify_point3(int x, int y)
Returns a modifiable 3-component point value at the indicated point.
Definition pfmFile.I:240
void reverse_distort(const PfmFile &dist, PN_float32 scale_factor=1.0)
Applies the distortion indicated in the supplied dist map to the current map.
Definition pfmFile.cxx:1378
void fill_channel_masked_nan(int channel)
Fills the indicated channel with NaN, but only where the table already has a data point.
Definition pfmFile.cxx:595
void indirect_1d_lookup(const PfmFile &index_image, int channel, const PfmFile &pixel_values)
index_image is a WxH 1-channel image, while pixel_values is an Nx1 image with any number of channels.
Definition pfmFile.cxx:2249
void set_zero_special(bool zero_special)
Sets the zero_special flag.
Definition pfmFile.I:371
void set_point2(int x, int y, const LVecBase2f &point)
Replaces the 2-component point value at the indicated point.
Definition pfmFile.I:107
void fill_channel_masked(int channel, PN_float32 value)
Fills the indicated channel with all of the same value, but only where the table already has a data p...
Definition pfmFile.cxx:574
void quick_filter_from(const PfmFile &copy)
Resizes from the given image, with a fixed radius of 0.5.
Definition pfmFile.cxx:998
PN_float32 get_channel(int x, int y, int c) const
Returns the cth channel of the point value at the indicated point.
Definition pfmFile.I:52
void copy_channel(int to_channel, const PfmFile &other, int from_channel)
Copies just the specified channel values from the indicated PfmFile (which could be same as this PfmF...
Definition pfmFile.cxx:1513
LPoint4f & modify_point4(int x, int y)
Returns a modifiable 4-component point value at the indicated point.
Definition pfmFile.I:302
LPoint2f & modify_point2(int x, int y)
Returns a modifiable 2-component point value at the indicated point.
Definition pfmFile.I:143
const LPoint3f & get_point3(int x, int y) const
Returns the 3-component point value at the indicated point.
Definition pfmFile.I:193
void set_point3(int x, int y, const LVecBase3f &point)
Replaces the 3-component point value at the indicated point.
Definition pfmFile.I:204
void fill_nan()
Fills the table with all NaN.
Definition pfmFile.cxx:531
const LPoint2f & get_point2(int x, int y) const
Returns the 2-component point value at the indicated point.
Definition pfmFile.I:96
set_scale
The "scale" is reported in the pfm header and is probably meaningless.
Definition pfmFile.h:57
const LPoint4f & get_no_data_value() const
If has_no_data_value() returns true, this returns the particular "no data" value.
Definition pfmFile.I:451
void apply_1d_lut(int channel, const PfmFile &lut, PN_float32 x_scale=1.0)
Assumes that lut is an X by 1, 1-component PfmFile whose X axis maps points to target points.
Definition pfmFile.cxx:1438
bool is_row_empty(int y, int x_begin, int x_end) const
Returns true if all of the points on row y, in the range [x_begin, x_end), are the no_data value,...
Definition pfmFile.cxx:813
bool has_no_data_threshold() const
Returns whether a "no data" threshold value has been established by set_no_data_threshold().
Definition pfmFile.I:442
void flip(bool flip_x, bool flip_y, bool transpose)
Reverses, transposes, and/or rotates the table in-place according to the specified parameters.
Definition pfmFile.cxx:1174
bool store_mask(PNMImage &pnmimage) const
Stores 1 or 0 values into the indicated PNMImage, according to has_point() for each pixel.
Definition pfmFile.cxx:426
bool calc_autocrop(int &x_begin, int &x_end, int &y_begin, int &y_end) const
Computes the minimum range of x and y across the PFM file that include all points.
Definition pfmFile.cxx:775
void apply_exponent(float gray_exponent)
Adjusts each channel of the image by raising the corresponding component value to the indicated expon...
Definition pfmFile.I:508
void clear()
Eliminates all data in the file.
Definition pfmFile.cxx:77
void fill_no_data_value()
Fills the table with the current no_data value, so that the table is empty.
Definition pfmFile.cxx:541
void set_point1(int x, int y, PN_float32 point)
Replaces the 1-component point value at the indicated point.
Definition pfmFile.I:84
PN_float32 get_point1(int x, int y) const
Returns the 1-component point value at the indicated point.
Definition pfmFile.I:74
void set_point(int x, int y, const LVecBase3f &point)
Replaces the 3-component point value at the indicated point.
Definition pfmFile.I:167
void apply_crop(int x_begin, int x_end, int y_begin, int y_end)
Reduces the PFM file to the cells in the rectangle bounded by (x_begin, x_end, y_begin,...
Definition pfmFile.cxx:1551
bool has_point(int x, int y) const
Returns true if there is a valid point at x, y.
Definition pfmFile.I:44
const LPoint4f & get_point4(int x, int y) const
Returns the 4-component point value at the indicated point.
Definition pfmFile.I:255
get_scale
The "scale" is reported in the pfm header and is probably meaningless.
Definition pfmFile.h:57
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.