当通过代码导出带有assimp
的网格时,如下所示,我收到的精度输出非常有限。 assimp
是否有办法提高出口精度? (文档中没有任何暗示。)
void export(aiScene* scene, const std::string & outputFile)
{
Assimp::Exporter exporter;
// exporter.mOutput.precision(16); ???
exporter.Export(scene, "obj", outputFile);
}
.obj
文件中的输出每个值不超过6位数:
v 557760 4.07449e+06 -49.1995
v 557760 4.07449e+06 -49.095
v 557760 4.0745e+06 -49.0082
v 557760 4.0745e+06 -49.1127
查看实际的导出程序类(ObjExporter.cpp
)时,所有数据都是通过公开stringstream
编写的:
public:
std::ostringstream mOutput, mOutputMat;
[...]
mOutput << "# " << vp.size() << " vertex positions" << endl;
for(const aiVector3D& v : vp) {
mOutput << "v " << v.x << " " << v.y << " " << v.z << endl;
}
mOutput << endl;
我是否可以在不更改stringstream
来源的情况下提高assimp
精度(http://www.cplusplus.com/reference/ios/ios_base/precision/)?
答案 0 :(得分:0)
当详细查看不同的导出器类时,很明显其中一些确实在内部为stringstream
设置了更高精度,但是没有(全局)定义此方法或从外部传递请求以获得更高精度的导出。
从技术上讲,您可以实例化实际的导出类并手动更新stringstream
(因为它是一个公共成员变量),但这会使导出更加复杂并且使用{{1很容易导出到不同的格式。
因此,我已更新assimp
以导出更高精度的浮点值(例如):How do I print a double value with full precision using cout?