当前位置: 首页 > news >正文

OpenMesh入门,安装,运行示例Hello World

安装

环境 win10,qt5

源码下载编译
进入OpenMesh官网OpenMesh官网 https://www.graphics.rwth-aachen.de/software/openmesh/download/
在这里插入图片描述
使用cmake gui

在这里插入图片描述
注意:先安装qt5

  • 使用 CMake-Gui 构建 vs 2019 项目

    • 注意 where is the source code 是<project 路径>,下边的路径是 <project 路径>/build
    • 首次点击 configure 默认就是 vs2019 和 x64,这两者都是必要的

第一次configure 会报错,需要你填写QT5_DIR,如上图
然后再次点击configure
接着点击 generate

然后用vs2019打开项目,生成

Hello World

vs2019 新建一个工程

第一步会生成lib,我的在这里
在这里插入图片描述
需要的头文件在这里
在这里插入图片描述
配置工程属性
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

添加附加库目录OpenMeshCored.lib和 OpenMeshToolsd.lib

打开项目属性-V/c+±预处理器,添加附加宏_USE_MATH_DEFINES

代码

#include
// -------------------- OpenMesh
#include <Core/IO/MeshIO.hh>
#include <Core/Mesh/PolyMesh_ArrayKernelT.hh>
using namespace std;

typedef OpenMesh::PolyMesh_ArrayKernelT<> MyMesh;
int main()
{
MyMesh mesh;
MyMesh::VertexHandle vhandle[8];
vhandle[0] = mesh.add_vertex(MyMesh::Point(-1, -1, 1));
vhandle[1] = mesh.add_vertex(MyMesh::Point(1, -1, 1));
vhandle[2] = mesh.add_vertex(MyMesh::Point(1, 1, 1));
vhandle[3] = mesh.add_vertex(MyMesh::Point(-1, 1, 1));
vhandle[4] = mesh.add_vertex(MyMesh::Point(-1, -1, -1));
vhandle[5] = mesh.add_vertex(MyMesh::Point(1, -1, -1));
vhandle[6] = mesh.add_vertex(MyMesh::Point(1, 1, -1));
vhandle[7] = mesh.add_vertex(MyMesh::Point(-1, 1, -1));
// generate (quadrilateral) faces
std::vectorMyMesh::VertexHandle face_vhandles;
face_vhandles.clear();
face_vhandles.push_back(vhandle[0]);
face_vhandles.push_back(vhandle[1]);
face_vhandles.push_back(vhandle[2]);
face_vhandles.push_back(vhandle[3]);
mesh.add_face(face_vhandles);

face_vhandles.clear();
face_vhandles.push_back(vhandle[7]);
face_vhandles.push_back(vhandle[6]);
face_vhandles.push_back(vhandle[5]);
face_vhandles.push_back(vhandle[4]);
mesh.add_face(face_vhandles);face_vhandles.clear();
face_vhandles.push_back(vhandle[1]);
face_vhandles.push_back(vhandle[0]);
face_vhandles.push_back(vhandle[4]);
face_vhandles.push_back(vhandle[5]);
mesh.add_face(face_vhandles);face_vhandles.clear();
face_vhandles.push_back(vhandle[2]);
face_vhandles.push_back(vhandle[1]);
face_vhandles.push_back(vhandle[5]);
face_vhandles.push_back(vhandle[6]);
mesh.add_face(face_vhandles);face_vhandles.clear();
face_vhandles.push_back(vhandle[3]);
face_vhandles.push_back(vhandle[2]);
face_vhandles.push_back(vhandle[6]);
face_vhandles.push_back(vhandle[7]);
mesh.add_face(face_vhandles);face_vhandles.clear();
face_vhandles.push_back(vhandle[0]);
face_vhandles.push_back(vhandle[3]);
face_vhandles.push_back(vhandle[7]);
face_vhandles.push_back(vhandle[4]);
mesh.add_face(face_vhandles);// write mesh to output.obj
try
{if (!OpenMesh::IO::write_mesh(mesh, "output.off")){std::cerr << "Cannot write mesh to file 'output.off'" << std::endl;return 1;}
}
catch (std::exception& x)
{std::cerr << x.what() << std::endl;return 1;
}return 0;

}

输出 "output.off 用meshlab打开

在这里插入图片描述

球的代码

#pragma once
// 生成球 n 最好输入偶数 10 或者 100
#include
#include <OpenMesh/Core/IO/MeshIO.hh>
#include <OpenMesh/Core/Mesh/TriMesh_ArrayKernelT.hh>
#include
#define pi 3.1415926
using namespace std;
typedef OpenMesh::TriMesh_ArrayKernelT<> sphereMesh;

void sphereDemo()
{
sphereMesh mesh;
int n, count = 10000, k = -1;
cout << “n:”;
cin >> n;
sphereMesh::VertexHandle* vhandle = new sphereMesh::VertexHandle[count];
std::vectorsphereMesh::VertexHandleface_vhandles;
for (int j = 0; j < n; j++) {
double distance = cos(j * pi / n);// 原先是 sin
double r_circle = sin(j * pi / n);
for (int i = 0; i < n; i++) {
++k;
vhandle[k] = mesh.add_vertex(sphereMesh::Point(r_circle * cos(2 * i * pi / n), r_circle * sin(2 * i * pi / n), distance));
// 对网格添加顶点
}
}
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n; j++) {
int topRight = i * n + j;
int topLeft = i * n + (j + 1) % n;
int bottomRight = (i + 1) * n + j;
int bottomLeft = (i + 1) * n + (j + 1) % n;
face_vhandles.clear();
face_vhandles.push_back(vhandle[bottomRight]);
face_vhandles.push_back(vhandle[bottomLeft]);
face_vhandles.push_back(vhandle[topRight]);
mesh.add_face(face_vhandles);

		face_vhandles.clear();face_vhandles.push_back(vhandle[bottomLeft]);face_vhandles.push_back(vhandle[topLeft]);face_vhandles.push_back(vhandle[topRight]);mesh.add_face(face_vhandles);}
}
//vhandle[k+1] = mesh.add_vertex(sphereMesh::Point(0, 0, 1));
vhandle[k + 1] = mesh.add_vertex(sphereMesh::Point(0, 0, -1));
for (int i = 0; i < n; i++) {//face_vhandles.clear();//////face_vhandles.push_back(vhandle[i]);//face_vhandles.push_back(vhandle[(i + 1) % n]);//face_vhandles.push_back(vhandle[k + 2]);//mesh.add_face(face_vhandles);face_vhandles.clear();face_vhandles.push_back(vhandle[k - i]);face_vhandles.push_back(vhandle[k - (i + 1) % n]);face_vhandles.push_back(vhandle[k + 1]);mesh.add_face(face_vhandles);
}
try
{if (!OpenMesh::IO::write_mesh(mesh, "sphereDemo .off")) {std::cerr << "Cannot write mesh to file ' output5 .off ' " << std::endl;return ;}
}
catch (std::exception& x) {std::cerr << x.what() << std::endl;return ;
}

}

在这里插入图片描述

参考

https://blog.csdn.net/qq_43331089/article/details/125087965#%E5%BF%83%E5%BE%97

meshlab使用教程: https://blog.csdn.net/qq_15262755/article/details/80352867

http://www.lryc.cn/news/400852.html

相关文章:

  • std::env是什么库?|Python一对一教学答疑
  • Go语言--广播式并发聊天服务器
  • Spring MVC 全注解开发
  • MQTT——Mosquitto使用(Linux订阅者+Win发布者)
  • ArcGIS识别不GDB文件地理数据库显示为空?
  • uniapp微信小程序 TypeError: $refs[ref].push is not a function
  • Django任务管理
  • Hive 常见问题
  • 51单片机(STC8H8K64U/STC8051U34K64)_RA8889驱动大屏_硬件SPI4_参考代码(v1.3)
  • 实习随笔【前端技术实现全局添加水印】
  • 【软件测试】编写测试用例篇
  • 转型AI产品经理需要掌握的硬知识(二):AI常见概念和算法梳理
  • mysql-connector-java 8.0.33 反序列化漏洞
  • 基于Faster R-CNN的安全帽目标检测
  • linux中vim切换输入中文
  • 嵌入式C++、Qt/QML和MQTT:智能工厂设备监控系统的全流程介绍(附代码示例)
  • 监控易V7.6.6.15升级详解8:机房动环管理功能
  • C++ | Leetcode C++题解之第232题用栈实现队列
  • Git-Updates were rejected 解决
  • Java常用的API_02(正则表达式、爬虫)
  • 2024最新图纸加密软件Top5排行榜
  • 每日一练 - IEEE 802.1Q中STP协议
  • 设计模式--工厂设计模式
  • 消息队列-MQ
  • 近源渗透简介
  • 13 IP层协议-网际控制报文协议ICMP
  • 第一节Linux常见指令
  • 嵌入式全栈设计思路:STM32G4+ChibiOS+FreeRTOS+PID控制+PFC算法构建高效智能电源管理系统(附代码示例)
  • Linux驱动开发-04LED灯驱动实验(直接操作寄存器)
  • Linux命令更新-sort 和 uniq 命令