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.mzph.cn/pingmian/46791.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PE73_E6_BLE

PE73_E6_BLE 产品参数 产品型号 PE73_E6_BLE 尺寸(mm) 180*130*13mm 显示技术 电子墨水屏 显示区域(mm) 163.2(H) * 97.92(V) 分辨率(像素) 800*480 像素尺寸(mm) 0.204*0.204 显示颜色 黑/白/红/黄/橙/蓝/绿 视觉角度 180 工作温度 0-50℃ …

前端开发(基础)

目录 一、Web前端项目初始化 环境准备 创建项目 前端工程化配置 引入组件库 开发规范 全局通用布局 基础布局结构 全局底部栏 动态替换内容 全局顶部栏 通用路由菜单 支持多套布局 请求 请求工具库 全局自定义请求 自动生成请求代码 全局状态管理 全局权限管…

Ti_MSPM0开发环境搭建(keil版本)

一&#xff1a;基础软件下载 开发MSPM0的软件组合方式有很多&#xff0c;但是最常见的就是keilsysSDK或者CCSsysSDK,这里先明确一下几个软件是干什么的&#xff0c;SDK文件里面提供了Ti的案例&#xff0c;驱动等我们可以理解为他的开发环境都是基于SDK的所以这个SDK是必须要下载…

【C++航海王:追寻罗杰的编程之路】智能指针

目录 1 -> 为什么需要智能指针&#xff1f; 2 -> 内存泄漏 2.1 ->什么是内存泄漏&#xff0c;以及内存泄漏的危害 2.2 -> 内存泄漏分类 2.3 -> 如何避免内存泄漏 3 -> 智能指针的使用及原理 3.1 -> RAII 3.2 -> 智能指针的原理 3.3 -> std…

台达DVP系列串口驱动全面解析

1 驱动简介 台达DVP系列PLC&#xff08;包括ES2、SS、EX等&#xff09;使用串口通讯&#xff0c;外部设备可通过此口采集与PLC进行数据交互。网关使用台达DVP系列驱动&#xff0c;按照下述过程操作即可实现网关与PLC直接通讯 默认串口参数&#xff1a;9600/7/偶/1。 串口号&…

聚鼎装饰画:装饰画行业还有前景吗未来

在这个快速变化的时代&#xff0c;人们对于美的追求与日俱增。装饰画作为家居和公共空间美化的重要元素&#xff0c;其市场前景一直受到业界和消费者关注。但问题随之而来&#xff0c;装饰画行业在未来是否还有发展前景?本文将从多个角度进行分析。 从文化层面看&#xff0c;装…

【iOS】——MRC

一、引用计数 内存管理的核心是引用计数器&#xff0c;用一个整数来表示对象被引用的次数&#xff0c;系统需要根据引用计数器来判断对象是否需要被回收。 在每次 RunLoop 迭代结束后&#xff0c;都会检查对象的引用计数器&#xff0c;如果引用计数器等于 0&#xff0c;则说明…

面对人工智能发展的伦理挑战:应对策略与未来方向

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

手写new

手写new new是什么执行new会发生什么实现new new是什么 new 操作符是可以创建一个用户定义的对象的实例或具有构造函数的内置对象的实例 function Car (make, model, year) {this.make makethis.model modelthis.year year } Car.prototype.running function () {return …

[Linux]添加sudoers

之前我们讲过sudo这个命令,它可以让我们普通用户进行短暂的提权,上回我们讲完了vim 本篇是个短篇,目的就是让我们之后的学习中可以使用sudo命令。 首先我们先登录root用户 ls /etc/sudoer 我们需要改的就是上面的这个文件 vim /etc/sudoers 我们用vim打开 把光标移动到这…

微信小程序实现和AI语音对话功能

1.效果 微信小程序与AI语音对话 2.效果主要实现技术 ①AI语音合成&#xff08;阿里云平台&#xff09; ②微信小程序同声传译功能 ③本功能是用原生微信小程序实现的&#xff08;可自行转成uniapp代码&#xff09; 3.同声传译 进入微信服务市场&#xff0c;搜索同声传译就能找…

python关于excel常用函数(pandas篇)

iterrows函数&#xff1a; Pandas的基础数据结构可以分为两种&#xff1a;DataFrame和Series。不同于Series的是&#xff0c;Dataframe不仅有行索引还有列索引 。df.iterrows( )函数&#xff1a;可以返回所有的行索引&#xff0c;以及该行的所有内容。 pd.read_excel&#xf…

小型数控车床对现代制造业的影响

小型数控车床作为现代制造业的重要生产工具&#xff0c;集成了计算机控制、精密机械、电子技术和自动化技术&#xff0c;为各种复杂零件的加工&#xff0c;在生产效率和精度上带来了显著提升&#xff0c;它是制造业中不可或缺的基础装备&#xff0c;在金属切削加工领域发挥着关…

车间数据采集网关的工作原理和应用场景-天拓四方

在智能制造日益盛行的今天&#xff0c;车间数据采集作为整个生产流程中的关键环节&#xff0c;其重要性愈发凸显。数据采集网关作为这一环节的核心设备&#xff0c;扮演着承上启下的重要角色。本文旨在深入探讨车间数据采集网关的工作原理和应用场景。 一、数据采集网关的工作…

Java基础知识——继承

目录 一、什么是继承 二、类的继承格式 三、继承的特点 四、继承的类型 五、继承的关键字 六、为什么使用继承 一、什么是继承 继承是面向对象编程&#xff08;OOP&#xff09;的四大基本原则之一&#xff0c;它允许我们创建一个新类&#xff0c;继承并扩展现有类的属性和…

【HarmonyOS学习】Calendar Kit日历管理

简介 Calendar Kit提供日历与日程管理能力&#xff0c;包括日历的获取和日程的创建能力。 Calendar Kit为用户提供了一系列接口来获取日历账户&#xff0c;并使用特定的接口向日历账户中写入日程。 如果写入的日程带有提醒时间则系统会在时间到达时向用户发送提醒。 约束点…

eclipse 新建类class文件增加copyright版权信息

1、Window -> Preferences 2、输入code,找到code templates Java > Code Style > Code Templates 比如进行如何的设置&#xff1a; 3、新增类文件&#xff0c;会自动增加版权&#xff1a;

2024.7.12单片机PWM

遇到了一个光标变成下划线的问题&#xff1a; Keil5光标变下划线&#xff0c;变回来的方法_keil5光标是下划线-CSDN博客 这里是用了输入捕获&#xff08;IC&#xff1a;input capture&#xff09;&#xff0c;输出比较&#xff08;OC:Output Compare&#xff09;区别 学到这…

解析DDD开发框架Axon

在微服务架构盛行的当下&#xff0c;领域驱动设计&#xff08;DDD&#xff09;也得到了崭新的发展。在DDD中包含了聚合、领域事件等核心概念&#xff0c;也需要引入CQRS、事件溯源等架构模式。对于开发人员而言&#xff0c;如何简单而高效的实现这些核心概念和架构模式是一大痛…

集群节点状态异常的解决方式

文章目录 集群节点状态异常的解决方式问题概述解决方式1.关闭所有服务2.对所有集群删除Hadoop相关文件2.1 删除Hadoop系统运行时创建的临时数据和文件2.2 删除Hadoop的数据文件 3.重新对Hadoop节点进行初始化和启用4.重启服务&#xff0c;检查节点状态 集群节点状态异常的解决方…