首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Openmesh:用Python更新脸法线比用C++更新更快?

Openmesh:用Python更新脸法线比用C++更新更快?
EN

Stack Overflow用户
提问于 2017-03-03 11:03:41
回答 1查看 367关注 0票数 2

我用C++创建了以下简单的OpenMesh脚本:

代码语言:javascript
复制
#include <string>
#include <OpenMesh/Core/IO/MeshIO.hh>
#include <OpenMesh/Core/Mesh/TriMesh_ArrayKernelT.hh>

struct MyTraits : OpenMesh::DefaultTraits{
     typedef OpenMesh::Vec3d Point;
     typedef OpenMesh::Vec3d Normal;
};

typedef OpenMesh::TriMesh_ArrayKernelT<MyTraits>  MyMesh;

int main(int argc, char *argv[]){
    std::string filename = "filename.stl";    
    MyMesh OM_mesh;

    OM_mesh.request_face_normals();
    OM_mesh.request_halfedge_normals();
    OM_mesh.request_vertex_normals();
    OM_mesh.request_face_status();
    OM_mesh.request_edge_status();
    OM_mesh.request_halfedge_status();
    OM_mesh.request_vertex_status();

    OpenMesh::IO::Options ropt;
    ropt += OpenMesh::IO::Options::Binary;
    ropt += OpenMesh::IO::Options::FaceNormal;

    OpenMesh::IO::read_mesh(OM_mesh, filename);

    for(int k=0; k<1000; k++){
        OM_mesh.update_face_normals();
    }

    return 0;
}

此外,我还使用OpenMesh绑定开发了以下简单的Python脚本:

代码语言:javascript
复制
import openmesh as OM
filename = "filename.stl"
OM_mesh = OM.TriMesh()

OM_mesh.request_face_normals()
OM_mesh.request_halfedge_normals()
OM_mesh.request_vertex_normals()
OM_mesh.request_face_status()
OM_mesh.request_edge_status()
OM_mesh.request_halfedge_status()
OM_mesh.request_vertex_status()

options = OM.Options()
options += OM.Options.Binary
options += OM.Options.FaceNormal

OM.read_mesh(OM_mesh, filename, options)
for k in range(1000):
    OM_mesh.update_face_normals()

两个脚本都会更新加载网格的脸法线1000次。我预计C++脚本会比Python快得多,但实际上恰恰相反。我发现C++脚本花费大约8秒,而Python仅花费0.3秒。

这怎么可能?Python绑定所做的事情与仅仅“包装”C++ update_face_normals方法不同吗?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-03 13:52:05

在C++中读取文件时,我发现应该使用这些读取选项,如下所示:

代码语言:javascript
复制
OpenMesh::IO::read_mesh(OM_mesh, filename, ropt);

通过这样做,C++中的速度要高于Python中的速度。但是,在.off文件中,此更新是不正确的,但这是另一个问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42577185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档