mirror of
https://github.com/introlab/rtabmap.git
synced 2026-10-13 05:19:51 +08:00
Fixed loadOptimizedMeshQuery() when the TextureMesh has more than 1 texture. (#1538)
This commit is contained in:
@@ -5526,7 +5526,7 @@ cv::Mat DBDriverSqlite3::loadOptimizedMeshQuery(
|
|||||||
materialPolygons[p][i] = serializedPolygons.at<int>(t + p*polygonSize + i);
|
materialPolygons[p][i] = serializedPolygons.at<int>(t + p*polygonSize + i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
t+=materialPolygons.size()*polygonSize;
|
t+=materialPolygons.size()*polygonSize-1;
|
||||||
polygons->push_back(materialPolygons);
|
polygons->push_back(materialPolygons);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5543,7 +5543,7 @@ cv::Mat DBDriverSqlite3::loadOptimizedMeshQuery(
|
|||||||
UASSERT(serializedTexCoords.total());
|
UASSERT(serializedTexCoords.total());
|
||||||
for(int t=0; t<serializedTexCoords.cols; ++t)
|
for(int t=0; t<serializedTexCoords.cols; ++t)
|
||||||
{
|
{
|
||||||
UASSERT(int(serializedTexCoords.at<float>(t)) > 0);
|
UASSERT_MSG(int(serializedTexCoords.at<float>(t)) > 0, uFormat("serializedTexCoords.at<float>(%d)=%f", t, serializedTexCoords.at<float>(t)).c_str());
|
||||||
#if PCL_VERSION_COMPARE(>=, 1, 8, 0)
|
#if PCL_VERSION_COMPARE(>=, 1, 8, 0)
|
||||||
std::vector<Eigen::Vector2f, Eigen::aligned_allocator<Eigen::Vector2f> > materialtexCoords(int(serializedTexCoords.at<float>(t)));
|
std::vector<Eigen::Vector2f, Eigen::aligned_allocator<Eigen::Vector2f> > materialtexCoords(int(serializedTexCoords.at<float>(t)));
|
||||||
#else
|
#else
|
||||||
@@ -5556,8 +5556,10 @@ cv::Mat DBDriverSqlite3::loadOptimizedMeshQuery(
|
|||||||
{
|
{
|
||||||
materialtexCoords[p][0] = serializedTexCoords.at<float>(t + p*2);
|
materialtexCoords[p][0] = serializedTexCoords.at<float>(t + p*2);
|
||||||
materialtexCoords[p][1] = serializedTexCoords.at<float>(t + p*2 + 1);
|
materialtexCoords[p][1] = serializedTexCoords.at<float>(t + p*2 + 1);
|
||||||
|
UASSERT(materialtexCoords[p][0]>=0.0f && materialtexCoords[p][0] <= 1.0f);
|
||||||
|
UASSERT(materialtexCoords[p][1]>=0.0f && materialtexCoords[p][1] <= 1.0f);
|
||||||
}
|
}
|
||||||
t+=materialtexCoords.size()*2;
|
t+=materialtexCoords.size()*2-1;
|
||||||
texCoords->push_back(materialtexCoords);
|
texCoords->push_back(materialtexCoords);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3481,18 +3481,24 @@ void DatabaseViewer::exportOptimizedMesh()
|
|||||||
path += ".obj";
|
path += ".obj";
|
||||||
}
|
}
|
||||||
QString baseName = QFileInfo(path).baseName();
|
QString baseName = QFileInfo(path).baseName();
|
||||||
|
UDEBUG("Materials: %d", mesh->tex_materials.size());
|
||||||
if(mesh->tex_materials.size() == 1)
|
if(mesh->tex_materials.size() == 1)
|
||||||
{
|
{
|
||||||
mesh->tex_materials.at(0).tex_file = baseName.toStdString() + ".png";
|
mesh->tex_materials.at(0).tex_file = baseName.toStdString() + ".png";
|
||||||
cv::imwrite((QFileInfo(path).absoluteDir().absolutePath()+QDir::separator()+baseName).toStdString() + ".png", textures);
|
std::string filename = (QFileInfo(path).absoluteDir().absolutePath()+QDir::separator()+baseName).toStdString() + ".png";
|
||||||
|
cv::imwrite(filename, textures);
|
||||||
|
UDEBUG("Saved %s", filename.c_str());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
QDir(QFileInfo(path).absoluteDir().absolutePath()).mkdir(baseName);
|
||||||
for(unsigned int i=0; i<mesh->tex_materials.size(); ++i)
|
for(unsigned int i=0; i<mesh->tex_materials.size(); ++i)
|
||||||
{
|
{
|
||||||
mesh->tex_materials.at(i).tex_file = (baseName+QDir::separator()+QString::number(i)+".png").toStdString();
|
mesh->tex_materials.at(i).tex_file = (baseName+QDir::separator()+QString::number(i)+".png").toStdString();
|
||||||
UASSERT((i+1)*textures.rows <= (unsigned int)textures.cols);
|
UASSERT((i+1)*textures.rows <= (unsigned int)textures.cols);
|
||||||
cv::imwrite((QFileInfo(path).absoluteDir().absolutePath()+QDir::separator()+baseName+QDir::separator()+QString::number(i)+".png").toStdString(), textures(cv::Range::all(), cv::Range(i*textures.rows, (i+1)*textures.rows)));
|
std::string filename = (QFileInfo(path).absoluteDir().absolutePath()+QDir::separator()+baseName+QDir::separator()+QString::number(i)+".png").toStdString();
|
||||||
|
cv::imwrite(filename, textures(cv::Range::all(), cv::Range(i*textures.rows, (i+1)*textures.rows)));
|
||||||
|
UDEBUG("Saved %s", filename.c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pcl::io::saveOBJFile(path.toStdString(), *mesh);
|
pcl::io::saveOBJFile(path.toStdString(), *mesh);
|
||||||
|
|||||||
Reference in New Issue
Block a user