这绝对是目前我编译过的最心酸的代码:),第一部分的pro配置和部分源码头文件是有误的,第二部分的pro、源码有误,更是几乎翻遍了依赖库cinolib的issue和commit:(

一.loop_distributor部分

1. windos qtcreater下:

如果使用windows且使用64位,按以下步骤:

  1. glwidget.h文件中在#define GLWIDGET_H后面添加以下代码(一定得按此顺序添加头文件)

    #define GLEW_STATIC
    #include <GL/glew.h>
  2. 将编译好的一份glew库放在loop_distributor文件夹下,同时我在里面lib下的glew库的64位lib库里添加了一份win下的OpenGL32GlU32静态库

  3. 修改loop_distributor.pro文件,将以下修改

    win32{
      DEFINES += NOMINMAX
      #LIBS +=$$ANTDIR/lib/AntTweakBar.lib
      LIBS +=-L$$ANTDIR/lib/ -lAntTweakBar64#需添加64位,并用该写法否则无法链接dll
    }

    同时在最后添加glew库的依赖

    
    #windos下还需以下依赖,同时取消glwidget.h 中#include <GL/glew.h>的注释,并在其前面添加#define GLEW_STATIC
    win32: LIBS += -L$$PWD/../lib/glew-2.1.0/lib/Release/x64/ -lglew32s
    INCLUDEPATH += $$PWD/../lib/glew-2.1.0/include
    DEPENDPATH += $$PWD/../lib/glew-2.1.0/include
    win32: LIBS += -lOpenGL32
    win32: LIBS += -lGlU32
    win32:QMAKE_CXXFLAGS += /bigobj#debug模式下编译需要加该项

    编译完成运行时选择test_data文件夹下将里面的.sharp.rosy改成和obj模型同名文件,同时将该模型路径以参数方式运行程序(项目->run->command line arguments),否则无法运行。

    这样调试还不行,而且qtcreater调试体验也不好,不过按照以上方法设置后会为vs中的设置大大减轻压力,因为vs能识别一部分pro文件。

2.vs

  导入pro文件后运行,debug模式下提示缺少AntTweakBar64.dll,在调试->属性->配置属性->调试->环境中添加以下路径PATH=%PATH%;G:\test\LoopyCuts\lib\AntTweakBar1.16\lib;E:\QT\5.12.9\msvc2015_64\bin

第二个是缺少dll的路径,第三个是qt中的dll路径(不添加会继续提示缺少)。缺少dll的解决方法也可以用其他的,我一直用这个,比其他的体验真的好。。

  release下上述方法失效,解决方法就是拷贝缺少的dll到包含有exe的同文件夹下。

  vs中添加命令行参数的方法为调试->属性->配置属性->调试->命令参数中设置

二.volumetric_cutter部分

1. tetgen

  正常cmake,记得用msvc编译,选择x64,不然默认出linux下的.a静态库

2.程序部分

  提前说明以下,这个程序依赖的一个库cinolib无法用msvc编译,巨坑,issue链接!首先在pro文件中配置好tetgen的依赖,然后如果有以下报错依次解决:

  1. octree.cpp661行报错,改成以下代码,相关commit链接

    AABB s_box(s[0],s[1]);
  2. hexmesh.cpp405行和415行报错,相关commit链接,依次修改为

    this->update_p_quality(pid);//405
    this->update_quality();//415
  3. draw_lines_tris.cpp160行glGenerateMimap(GL_TEXTURE_2D)报错,未找到相关解决方法,注释掉后能运行,有个为了兼容msvc的commit也是注释掉该方法,可是在后续commit又取消了该注释,链接,具体效果未知。ps:在linux中不注释该方法也无法运行,当前版本都是高于这两个commit的按理说不应该有这个问题。

  4. 以上步骤能在linux下编译,如果使用windows,还需以下步骤:

    • 在lib\cinolib\include\cinolib\gl文件夹下的draw_xxx.h中头文件中的win下的条件编译宏改成以下代码

      #include<windows.h>
      #include <GL/gl.h>
      #include <GL/glu.h>
    • 如果在win下使用mingw编译的话不仅速度慢而且因为obj文件太大无法编译,不推荐

    • 使用msvc编译,msvc不支持变长数组,但源码中有些地方使用变长数组,所以在源码中做如下修改,使用动态申请,但勿忘delete

      laplacian.cpp54行:

        uint base[n]改用uint *base=new uint[n](),勿忘delete!

      ambient_occlusion.cpp195行:

        float depth_buffer[buffer_size*buffer_size]改为float *depth_buffer=new float[buffer_size*buffer_size]();勿忘delete!

  5. 关于这个的pro改动地方有点多,未作记录,就不列出

说明

  1. 第一部分在windos下编译运行成功,linux下的话应该可以添加glew库运行,我ubuntu机子上没有该库就没尝试。
  2. 第二部分第三个错误未完美解决,翻到两个相关commit(前一个注释,后一个取消注释??),注释掉后在linux编译成功,windos下修改后能在msvc编译下编译成功,mingw编译特别慢,而且还出错。
  3. 以上两部分使用方法和运行效果还未测试。

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!

Instant Meshes 标架场方法 上一篇
Gauss、Stokes、Green公式 下一篇