Fix creation of composite orthophotos in case where aspect ratio of input photos doesn't match tile

This commit is contained in:
Nathaniel MacArthur-Warner 2020-12-23 11:37:38 -08:00
parent 0f482c14dd
commit 851ccb0ca7

View File

@ -263,10 +263,11 @@ namespace simgear {
const OrthophotoRef& some_orthophoto = orthophotos[0]; const OrthophotoRef& some_orthophoto = orthophotos[0];
const ImageRef& some_image = some_orthophoto->_texture->getImage(); const ImageRef& some_image = some_orthophoto->_texture->getImage();
const OrthophotoBounds& some_bbox = some_orthophoto->getBbox(); const OrthophotoBounds& some_bbox = some_orthophoto->getBbox();
const double degs_to_pixels = some_image->s() / some_bbox.getWidth(); const double degs_to_pixels_x = some_image->s() / some_bbox.getWidth();
const double degs_to_pixels_y = some_image->t() / some_bbox.getHeight();
const int total_width = degs_to_pixels * _bbox.getWidth(); const int total_width = degs_to_pixels_x * _bbox.getWidth();
const int total_height = degs_to_pixels * _bbox.getHeight(); const int total_height = degs_to_pixels_y * _bbox.getHeight();
const int depth = some_image->r(); const int depth = some_image->r();
GLenum pixel_format = some_image->getPixelFormat(); GLenum pixel_format = some_image->getPixelFormat();
@ -279,10 +280,10 @@ namespace simgear {
for (const auto& orthophoto : orthophotos) { for (const auto& orthophoto : orthophotos) {
const OrthophotoBounds& bounds = orthophoto->getBbox(); const OrthophotoBounds& bounds = orthophoto->getBbox();
const int width = degs_to_pixels * bounds.getWidth(); const int width = degs_to_pixels_x * bounds.getWidth();
const int height = degs_to_pixels * bounds.getHeight(); const int height = degs_to_pixels_y * bounds.getHeight();
const int s_offset = degs_to_pixels * _bbox.getLonOffset(bounds); const int s_offset = degs_to_pixels_x * _bbox.getLonOffset(bounds);
const int t_offset = degs_to_pixels * _bbox.getLatOffset(bounds); const int t_offset = degs_to_pixels_y * _bbox.getLatOffset(bounds);
// Make a deep copy of the orthophoto's image so that we don't modify the original when scaling // Make a deep copy of the orthophoto's image so that we don't modify the original when scaling
ImageRef sub_image = new osg::Image(*orthophoto->_texture->getImage(), osg::CopyOp::DEEP_COPY_ALL); ImageRef sub_image = new osg::Image(*orthophoto->_texture->getImage(), osg::CopyOp::DEEP_COPY_ALL);