mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-30 16:58:40 -04:00
*** empty log message ***
This commit is contained in:
parent
fb53d992d8
commit
efb9546027
@ -55,8 +55,22 @@ IMGHeaderType img_header_type;
|
|||||||
const int img_xsize = config_pnmimagetypes.GetInt("img-xsize", 0);
|
const int img_xsize = config_pnmimagetypes.GetInt("img-xsize", 0);
|
||||||
const int img_ysize = config_pnmimagetypes.GetInt("img-ysize", 0);
|
const int img_ysize = config_pnmimagetypes.GetInt("img-ysize", 0);
|
||||||
|
|
||||||
|
// Set this to the quality percentage for writing JPEG files. 95 is
|
||||||
|
// the highest useful value (values greater than 95 do not lead to
|
||||||
|
// significantly better quality, but do lead to significantly greater
|
||||||
|
// size).
|
||||||
const int jpeg_quality = config_pnmimagetypes.GetInt("jpeg-quality", 95);
|
const int jpeg_quality = config_pnmimagetypes.GetInt("jpeg-quality", 95);
|
||||||
|
|
||||||
|
// These control the scaling that is automatically performed on a JPEG
|
||||||
|
// file for decompression. You might specify to scale down by a
|
||||||
|
// fraction, e.g. 1/8, by specifying jpeg_scale_num = 1 and
|
||||||
|
// jpeg_scale_denom = 8. This will reduce decompression time
|
||||||
|
// correspondingly. Attempting to use this to scale up, or to scale
|
||||||
|
// by any fraction other than an even power of two, may not be
|
||||||
|
// supported.
|
||||||
|
const int jpeg_scale_num = config_pnmimagetypes.GetInt("jpeg-scale-num", 1);
|
||||||
|
const int jpeg_scale_denom = config_pnmimagetypes.GetInt("jpeg-scale-denom", 1);
|
||||||
|
|
||||||
ConfigureFn(config_pnmimagetypes) {
|
ConfigureFn(config_pnmimagetypes) {
|
||||||
PNMFileTypePNM::init_type();
|
PNMFileTypePNM::init_type();
|
||||||
PNMFileTypeSGI::init_type();
|
PNMFileTypeSGI::init_type();
|
||||||
|
@ -26,7 +26,10 @@ extern const double radiance_gamma_correction;
|
|||||||
extern const int radiance_brightness_adjustment;
|
extern const int radiance_brightness_adjustment;
|
||||||
extern const int yuv_xsize;
|
extern const int yuv_xsize;
|
||||||
extern const int yuv_ysize;
|
extern const int yuv_ysize;
|
||||||
|
|
||||||
extern const int jpeg_quality;
|
extern const int jpeg_quality;
|
||||||
|
extern const int jpeg_scale_num;
|
||||||
|
extern const int jpeg_scale_denom;
|
||||||
|
|
||||||
enum IMGHeaderType {
|
enum IMGHeaderType {
|
||||||
IHT_none,
|
IHT_none,
|
||||||
|
@ -41,10 +41,8 @@ Reader(PNMFileType *type, FILE *file, bool owns_file, string magic_number) :
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* Step 4: set parameters for decompression */
|
/* Step 4: set parameters for decompression */
|
||||||
|
_cinfo.scale_num = jpeg_scale_num;
|
||||||
/* In this example, we don't need to change any of the defaults set by
|
_cinfo.scale_denom = jpeg_scale_denom;
|
||||||
* jpeg_read_header(), so we do nothing here.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Step 5: Start decompressor */
|
/* Step 5: Start decompressor */
|
||||||
|
|
||||||
@ -141,6 +139,7 @@ read_data(xel *array, xelval *) {
|
|||||||
|
|
||||||
/* We can ignore the return value since suspension is not possible
|
/* We can ignore the return value since suspension is not possible
|
||||||
* with the stdio data source.
|
* with the stdio data source.
|
||||||
|
*/
|
||||||
|
|
||||||
/* At this point you may want to check to see whether any corrupt-data
|
/* At this point you may want to check to see whether any corrupt-data
|
||||||
* warnings occurred (test whether jerr.pub.num_warnings is nonzero).
|
* warnings occurred (test whether jerr.pub.num_warnings is nonzero).
|
||||||
|
@ -23,9 +23,22 @@
|
|||||||
#include <cullFaceTransition.h>
|
#include <cullFaceTransition.h>
|
||||||
#include <cullFaceAttribute.h>
|
#include <cullFaceAttribute.h>
|
||||||
#include <clockObject.h>
|
#include <clockObject.h>
|
||||||
|
#include <config_gobj.h>
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
StitchImageVisualizer *StitchImageVisualizer::_static_siv;
|
StitchImageVisualizer *StitchImageVisualizer::_static_siv;
|
||||||
|
|
||||||
|
// Returns the largest power of 2 less than or equal to value.
|
||||||
|
static int
|
||||||
|
to_power_2(int value) {
|
||||||
|
int x = 1;
|
||||||
|
while ((x << 1) <= value) {
|
||||||
|
x = (x << 1);
|
||||||
|
}
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
StitchImageVisualizer::Image::
|
StitchImageVisualizer::Image::
|
||||||
Image(StitchImage *image, int index, bool scale) :
|
Image(StitchImage *image, int index, bool scale) :
|
||||||
_image(image),
|
_image(image),
|
||||||
@ -39,11 +52,28 @@ Image(StitchImage *image, int index, bool scale) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (scale && image->_data != NULL) {
|
if (scale && image->_data != NULL) {
|
||||||
nout << "Scaling " << image->get_name() << "\n";
|
// We have to make it a power of 2.
|
||||||
PNMImage *n = new PNMImage(1024, 1024);
|
int old_xsize = image->_data->get_x_size();
|
||||||
n->quick_filter_from(*image->_data);
|
int old_ysize = image->_data->get_y_size();
|
||||||
delete image->_data;
|
int new_xsize = old_xsize;
|
||||||
image->_data = n;
|
int new_ysize = old_ysize;
|
||||||
|
if (max_texture_dimension > 0) {
|
||||||
|
new_xsize = min(new_xsize, max_texture_dimension);
|
||||||
|
new_ysize = min(new_ysize, max_texture_dimension);
|
||||||
|
}
|
||||||
|
new_xsize = to_power_2(new_xsize);
|
||||||
|
new_ysize = to_power_2(new_ysize);
|
||||||
|
|
||||||
|
if (new_xsize != old_xsize || new_ysize != old_ysize) {
|
||||||
|
nout << "Scaling " << image->get_name() << " from "
|
||||||
|
<< old_xsize << " " << old_ysize << " to "
|
||||||
|
<< new_xsize << " " << new_ysize << "\n";
|
||||||
|
|
||||||
|
PNMImage *n = new PNMImage(new_xsize, new_ysize);
|
||||||
|
n->quick_filter_from(*image->_data);
|
||||||
|
delete image->_data;
|
||||||
|
image->_data = n;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -214,8 +244,12 @@ toggle_viz(StitchImageVisualizer::Image &im) {
|
|||||||
|
|
||||||
void StitchImageVisualizer::
|
void StitchImageVisualizer::
|
||||||
create_image_geometry(StitchImageVisualizer::Image &im) {
|
create_image_geometry(StitchImageVisualizer::Image &im) {
|
||||||
|
/*
|
||||||
int x_verts = im._image->get_x_verts();
|
int x_verts = im._image->get_x_verts();
|
||||||
int y_verts = im._image->get_y_verts();
|
int y_verts = im._image->get_y_verts();
|
||||||
|
*/
|
||||||
|
int x_verts = 2;
|
||||||
|
int y_verts = 2;
|
||||||
TriangleMesh mesh(x_verts, y_verts);
|
TriangleMesh mesh(x_verts, y_verts);
|
||||||
|
|
||||||
LVector3f center = LCAST(float, im._image->extrude(LPoint2d(0.5, 0.5)));
|
LVector3f center = LCAST(float, im._image->extrude(LPoint2d(0.5, 0.5)));
|
||||||
@ -223,11 +257,12 @@ create_image_geometry(StitchImageVisualizer::Image &im) {
|
|||||||
|
|
||||||
for (int xi = 0; xi < x_verts; xi++) {
|
for (int xi = 0; xi < x_verts; xi++) {
|
||||||
for (int yi = 0; yi < y_verts; yi++) {
|
for (int yi = 0; yi < y_verts; yi++) {
|
||||||
LVector3f p = LCAST(float, im._image->get_grid_vector(xi, yi));
|
LPoint2d uv = LPoint2d((double)xi / (double)(x_verts - 1),
|
||||||
LPoint2f uv = LCAST(float, im._image->get_grid_uv(xi, yi));
|
1.0 - (double)yi / (double)(y_verts - 1));
|
||||||
|
LVector3d p = im._image->extrude(uv);
|
||||||
|
|
||||||
mesh._coords.push_back(p * scale);
|
mesh._coords.push_back(LCAST(float, p) * scale);
|
||||||
mesh._texcoords.push_back(uv);
|
mesh._texcoords.push_back(LCAST(float, uv));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user