1. 前言
仅以此系列教程,纪念我被Open3D C++折磨的历程。此系列主要介绍如何在C++中使用Open3D,尤其是使用其GUI模块快速创建一个窗口应用程序。
本系列仅在Windows上进行测试,使用Visual Studio Community 2022 和CMake,Open3D版本为v0.17.0。
文章目录
2. 环境搭建
你完全可以克隆官方的GitHub仓库然后自己编译,但是这个过程可能会碰到一些离谱的问题,为了方便起见,推荐直接下载官方提供的二进制包。
进入官方仓库或直接以下点击链接下载对应的二进制包:
将下载的zip解压任意到你想要的位置,如D:\Libs\open3d-devel-windows-amd64-0.17.0
,路径中不要出现中文字符。
3. 创建第一个Open3D项目
创建一个目录exp01,并在该目录下创建main.cpp和CMakeLists.txt,结构如下:
exp01
├── CMakeLists.txt
└── main.cpp
3.1 CMakeLists编写
在CMakeLists.txt中编写以下内容:
# CMake版本需求
cmake_minimum_required(VERSION 3.21)
项目名称o3d_01, 编程语言C++
project(o3d_01 LANGUAGES CXX)
使用C++17
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
添加Open3D根目录路径到CMake的搜索路径
list(APPEND CMAKE_PREFIX_PATH “D:/Libs/open3d-devel-windows-amd64-0.17.0”)
find_package(Open3D REQUIRED)
创建可执行文件main并链接Open3D库
add_executable(main main.cpp)
target_link_libraries(main PRIVATE Open3D::Open3D)
由于下载的Open3D是动态库,需要将Open3D.dll拷贝到执行文件的目录下,以下自定义指令完成了这一工作。
add_custom_command(TARGET main POST_BUILD
COMMAND
C
M
A
K
E
C
O
M
M
A
N
D
−
E
c
o
p
y
"
{CMAKE_COMMAND} -E copy "
CMAKECOMMAND−Ecopy"{Open3D_DIR}/…/bin/Open3D.dll"
$<TARGET_FILE_DIR:main>)
注意: 上面的Open3D_DIR需要设置为你将下载的Open3D所解压的目录,注意路径分隔符。
经过find_package(Open3D REQUIRED)
后,Open3D_DIR
被设置为/path-to-your-open3d/CMake
。所以在自定义指令拷贝Open3D.dll时的相对路径设置为${Open3D_DIR}/../bin/Open3D.dll
。
3.2 main.cpp编写
在该文件中,编写一个基础的网格可视化用来测试环境配置是否正确。
#include <iostream> #include <open3d/Open3D.h>
int main() { using namespace open3d::geometry; auto sphere = TriangleMesh::CreateSphere(1.0,4); sphere->ComputeVertexNormals(); sphere->PaintUniformColor({1, 0.706, 0}); std::cout << sphere->vertices_.size() << " vertices\n"; std::cout<<sphere->triangles_.size()<<" triangles\n"; open3d::visualization::DrawGeometries({sphere}); }
4. 编译和运行
在当前项目的路径下,分别执行以下指令
mkdir build && cd build
cmake ..
cmake --build . --config Release
注意: 上述第三行指令中的,如果你下载的是Debug版本的Open3D,则需要替换成
--config Debug
,如果是Release版本,并且想要进行调试,可以使用--config RelWithDebInfo
。
5. 运行结果
# 在build目录下运行main.exe
./Release/main.exe
执行上面的指令,如果能成功运行并显示,代表环境配置成功,可以继续进行后续的内容。
6. 完整代码下载
如果不想抄代码,或者想要获取直接获取源代码文件,可以通过下面的链接下载下载链接。那么代价是什么呢?