Opengl学习笔记:(一).Ply文件文件格式和文件读取

2023-11-02

转载自:http://blog.csdn.net/lxfyzx/article/details/4997627
http://blog.csdn.net/lxfyzx/article/details/4997780

一、Ply简介

  • 这次实验老师要求用opengl读取.ply文件,个人理解,ply里面存储的是多边形模型的数据,包括一些点、面、材质、颜色等属性。

  • 比较严谨的解释:

    • PLY作为一种多边形模型数据格式,不同于三维引擎中常用的场景图文件格式和脚本文件,每个PLY文件只用于描述一个多边形模型对象(Object),该模型对象可以通过诸如顶点、面等数据进行描述,每一类这样的数据被称作一种元素(Element)。相比于现代的三维引擎中所用到的各种复杂格式,PLY实在是种简单的不能再简单的文件格式,但是如果仔细研究就会发现,就像设计者所说的,这对于绝大多数的图形应用来说已经是足够用了。

二、Ply中的结构

1、PLY的文件结构:

 文件头加上元素数据列表。其中文件头中以行为单位描述文件类型、格式与版本、元素类型、元素的属性等,然后就根据在文件头中所列出元素类型的顺序及其属性,依次记录各个元素的属性数据。

2、 典型的PLY文件结构:

  • 1、 头部
  • 2、顶点列表
  • 3、面片列表
  • 4、 其他元素列表

3、简单举例

  • 1) 头部

    • a.头部是一系列以回车结尾的文本行,用来描述文件的剩余部分。
    • b. 头部包含一个对每个元素类型的描述,包括元素名(如“边”),元素的数量,以及一个与这个元素关联的不同属性的列表。
    • c.头部还说明这个文件是二进制的或者是ASCII的。
    • d.头部后面的是一个每个元素类型的元素列表,按照在头部中描述的顺序出现。
    • e.文件中的注释一般在 “comment”开始的关键词定义行里。
  • 2) 举例:下面是一个立方体的完整ASCII描述。大括号中的注释不是文件的一部分,它们是这个例子的注解。

    • a.头部的每个部分都是一个以关键词开头,以回车结尾的ASCII串。
    • b.”ply”是文件的头四个字符。
    • c.关键词“format”及其后面的是一个特定的ASCII或者二进制的格式,接下来是一个版本号。
    • d.end_header 头文件结束
    • f.再下面是多边形文件中每个元素的描述,在每个元素里还有多属性的说明。一般元素以下面的格式描述:
      element <元素名> <在文件中的个数>
      property <数据类型> <属性名-1>
      property <数据类型> <属性名-2>
      property <数据类型> <属性名-3>
ply 
format   ascii   1.0   {   ascii/二进制,格式版本数   } 
comment   made   by   anonymous   {   注释关键词说明,像其他行一样   } 
comment   this   file   is   a   cube 
element   vertex   8   {   定义“vertex”(顶点)元素,在文件中有8个   } 
property   float32   x   {   顶点包含浮点坐标“x”} 
property   float32   y   {   y   坐标同样是一个顶点属性   } 
property   float32   z   {   z   也是坐标   } 
element   face   6   {   在文件里有6个“face”(面片)   } 
property   list   uint8   int32   vertex_index   {   “vertex_indices”(顶点素引)是一列整数   } 
end_header   {   划定头部结尾   } 
0   0   0   {   顶点列表的开始   } 
0   0   1 
0   1   1 
0   1   0 
1   0   0 
1   0   1 
1   1   1 
1   1   0 
4   0   1   2   3   {   面片列表开始   } 
4   7   6   5   4 
4   0   4   5   1 
4   1   5   6   2 
4   2   6   7   3 
4   3   7   4   0 
  • 3) 其他说明
    • 属性罗列在“element”(元素)行后面定义,既包含属性的数据类型,也包含属性在每个元素中出现的次序。一个属性可以有三种数据类型:标量,字符串和列表。属性可能具有的标量数据类型列表如下。
    • 这些字节计数很重要,而且在实现过程中不能修改以使这些文件可移植。
    • 使用列表数据类型的属性定义有一种特殊的格式:property list <数值类型> <数值类型> <属性名> ,这种格式,一个非负字符表示在属性里包含多少索引,接下来是一个列表包含许多整数。在这个边长列表里的每个整数都是一个顶点的索引。
          名称      类型           字节数 
         ------------------------------- 
         int8        字符          1 
         uint8      非负字符        1 
         int16      短整型          2 
         uint16    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Opengl学习笔记:(一).Ply文件文件格式和文件读取 的相关文章

  • 从文件中读取 GLSL 着色器

    我正在尝试从如下所示的文件中读取顶点和片段着色器 version 330 core in vec3 ourColor out vec4 color void main color vec4 ourColor 1 0f but when i
  • OpenGL Z 偏置(多边形偏移)限制

    我有两个共面的多边形 我尝试做 glEnable GL POLYGON OFFSET FILL glPolygonOffset 0 1 并期望其中一个明显 位于 另一个之上 这种情况直到大约 70 75 个单位之外 近剪裁平面为 1 远剪裁
  • 交错顶点提交如何提高性能?

    我已经阅读并看到了其他问题 这些问题通常都指向将顶点位置和颜色等交错到一个数组中的建议 因为这可以最大限度地减少从 cpu 发送到 gpu 的数据 我不清楚的是 即使使用交错数组 您仍然必须对位置和颜色指针进行单独的 GL 调用 OpenG
  • OpenGL 说“from_param 收到了一个不连续的数组”

    安装 Yosemite 后 我必须升级 numpy PyOpenGL 等 现在 以前运行的程序给了我以下堆栈跟踪 file latebind pyx line 44 in OpenGL accelerate latebind Curry c
  • 在 OpenGL 中,为什么 glVertexAttribPointer 要求“指针”参数以 void* 形式传入?

    规格为glVertexAttribPointer如下 void glVertexAttribPointer GLuint index GLint size GLenum type GLboolean normalized GLsizei s
  • OpenGL:调试“单通道线框渲染”

    我正在尝试实现论文 单通道线框渲染 它看起来很简单 但它给了我所期望的厚暗值 论文没有给出计算海拔高度的确切代码 所以我按照自己认为合适的方式进行了操作 代码应该将三个顶点投影到视口空间中 获取它们的 高度 并将它们发送到片段着色器 片段着
  • 我的绘图存在坐标/glortho 问题

    I have made a bit of a change to my code in the last couple of hours as everything was messy with my grid so I made it i
  • 使用 glDrawElements 时在 OpenGL 核心配置文件中选取三角形

    我正在使用 glDrawElements 绘制三角形网格 并且希望能够使用鼠标单击来拾取 选择三角形 三角形的网格可以很大 在固定功能 OpenGL 中 可以使用 GL SELECT http content gpwiki org inde
  • openGL转png

    我正在尝试将包含大量纹理 没有移动 的 openGL 编辑 我画的卡片 thx unwind 转换为一个 PNG 文件 我可以在框架的另一部分中使用该文件我正在与 有 C 库可以做到这一点吗 thanks 如果您的意思只是 获取由 Open
  • glEnableVertexAttribArray 中“index”参数的含义以及(可能)OS X OpenGL 实现中的错误

    1 我是否正确理解 要使用顶点数组或VBO进行绘制 我需要所有属性在着色器程序链接之前调用glBindAttribLocation 或者在着色器程序成功链接后调用glGetAttribLocation 然后使用glVertexAttribP
  • 简单的线框格式?

    我正在寻找一种用于线框模型的简单文件格式 我知道 VRML u3D 等 但这些对于我的需求来说似乎很重要 我的标准是 必须有明确的规格 要么是开放的 要么是非常完善 记录的 我只需要 想要 简单的模型 顶点和边 我不想处理面孔或物体 如果格
  • 如何在 GTX 560 及更高版本上使用 OpenGL 进行立体 3D?

    我正在使用在 Windows 7 上运行的开源触觉和 3D 图形库 Chai3D 我重写了该库以使用 Nvidia nvision 执行立体 3D 我将 OpenGL 与 GLUT 一起使用 并使用 glutInitDisplayMode
  • 为什么OpenGL使用float而不是double? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 将带有 glut 的点击坐标添加到向量链接列表中

    我想创建一个向量链接列表 并在 GLUT 库的帮助下获取点击的位置并将它们附加到链接列表中 这些是我写的结构 typedef struct vector int x int y Vector typedef struct VectorLis
  • OpenGL - 两个纹理的幂

    OpenGL 使用二次幂纹理 这是因为由于 MipMapping 某些 GPU 只接受 2 的幂纹理 当绘制比实际更大的纹理时 使用这些二次方纹理会导致问题 我想到了一种方法来解决这个问题 即仅在我们使纹理小于实际大小时使用 PO2 比率
  • 存储 OpenGL 状态

    假设我正在尝试用 C 制作某种小型 opengl 图形引擎 我读过通过访问 opengl 状态glGet 函数可能非常昂贵 虽然访问 opengl 状态似乎是一个经常操作 并且强烈建议将 opengl 状态的副本存储在具有快速读 写访问权限
  • 使用 JOGL 和 Android OpenGL 编写可移植 Java 应用程序

    我计划编写一款可以在 PC 和 Android 上运行的 Java 3D 游戏 不幸的是 这两个平台似乎没有通用的 OpenGL API API 是否有显着差异 有没有办法在两个版本中使用相同的 3D 代码 这是不是一个好主意 Androi
  • OpenGL 3.1 中已弃用 glLineStipple

    glLineStipple在最新的 OpenGL API 中已被弃用 它被替换成什么 如果不更换 怎样才能达到类似的效果呢 我当然不想使用兼容性配置文件 抱歉 它还没有被任何东西取代 我想到的第一个模拟它的想法是几何着色器 您向几何着色器提
  • gldrawarrays 不绘制任何东西

    我正在尝试用 VBO 绘制一个三角形 我在窗口上没有看到任何像素 我也没有看到任何 GL ERROR 这是我尝试运行的代码 include
  • 如何使用边缘和内部镶嵌因子完成三角形面片镶嵌?

    I am just learning tessellation and i came across with below example for triangle patch tessellation but i am not sure h

随机推荐

  • 斐波那契数列求和——C语言(小白版)

    斐波那契数列求和 C语言 小白版 题目要求 斐波那契数列 1 1 2 3 5 8 13 21 34 不难发现当n gt 2时 an an 1 an 2 要求 当屏幕输入n n gt 2 时 输出前n项以及前n项的和 注意 我们不使用递归 也
  • 使用Qt创建模拟时钟

    main cpp include
  • Java的数据结构之枚举、向量、栈、字典

    Java工具包提供了强大的数据结构 在Java中的数据结构主要包括以下几种接口和类 枚举 Enumeration 位集合 BitSet 向量 Vector 栈 Stack 字典 Dictionary 哈希表 Hashtable 属性 Pro
  • Java Character 类

    Character 类用于对单个字符进行操作 Character 类在对象中包装一个基本类型 char 的值 实例 char ch a Unicode 字符表示形式 char uniChar u039A 字符数组 char charArra
  • 实战演习(五)——人脸识别(CNN)简单演练

    笔者是一个痴迷于挖掘数据中的价值的学习人 希望在平日的工作学习中 挖掘数据的价值 找寻数据的秘密 笔者认为 数据的价值不仅仅只体现在企业中 个人也可以体会到数据的魅力 用技术力量探索行为密码 让大数据助跑每一个人 欢迎直筒们关注我的公众号
  • 运输层协议概述

    紫色代表一级目录 粉红代表二级目录 蓝色代表三级目录 红色代表关键字 橙色代表说明 运输层协议概述 进程之间的通信 从通信的角度看 运输层向它上面的应用层提供通信服务 它属于面向通信部分的最高层 从信息处理的角度看 运输层是用户功能中的最低
  • 【陈工笔记】# LaTeX中,单元格数据居中方式 #

    良好的习惯 才不会让努力白白浪费 第一种方式 使用 p 1 5cm lt centering 指定单元格大小并设置对齐 其中p 1 5cm 指定大小 lt centering 指定对齐方式 使用 lt centering 时 需引入宏包 u
  • 点云学习---入门

    1 点云数据格式 常见的点云格式包括 las 用于激光雷达点云及其他任何三维xyz元组 是一种用于交换三维点数据的公共文件格式 文件主要由4部分组成 包括公共头块 包含版本号 缩放因子 偏移值 时间 范围等 变长记录 包含变长类型数据 坐标
  • Windows环境Mycat数据库分库分表中间件部署

    Windows环境Mycat数据库分库分表中间件部署 标签 数据库中间件mycat分布式集群 2016 08 23 00 17 957人阅读 评论 0 收藏 举报 分类 分布式开发技术 12 版权声明 本文为博主原创文章 未经博主允许不得转
  • 基于hadoop的电影推荐系统的实现

    1 设计任务 通过编写代码 设计一个基于Hadoop的电影推荐系统 通过此推荐系统的编写 掌握在Hadoop平台上的文件操作 数据处理的技能 工程文件放在百度网盘了 运行run py即可启动程序 由于代码年份久远 我已尽量打了注释 大家可以
  • mysql wait_timeout=_Mysql的wait_timeout解决_MySQL

    bitsCN com Mysql的wait timeout解决 问题 ssh mysql项目 数据源为dbcp 隔夜后访问会出现下列错误 1 Could not open Hibernate Session for transaction
  • Mac系统下vscode快捷键打开控制台?

    调试控制台 command shift Y 终端 control
  • 『PyQt5-Qt Designer篇』| 09 Qt Designer中分割线和间隔如何使用?

    09 Qt Designer中分割线和间隔如何使用 1 间隔 1 1 水平间隔 1 2 垂直间隔 2 分割线 2 1 水平线 2 2 垂直线 3 保存并执行 1 间隔 间隔有水平间隔和垂直间隔 1 1 水平间隔 拖动4个按钮 并设置为水平布
  • 分布式架构知识体系必读

    1 问题 1 何为分布式何为微服务 2 为什么需要分布式 3 分布式核心理论基础 节点 网络 时间 顺序 一致性 4 分布式是系统有哪些设计模式 5 分布式有哪些类型 6 如何实现分布式 2 关键词 节点 时间 一致性 CAP ACID B
  • MFC入门基础(十)静态文本框()、编辑框(Edit Control)

    一 静态文本框的使用 1 如何动态创建静态文本框 不是使用对话框模板进行拖动 而是手动代码进行创建 先看下 函数Create CStatic类的方法Create virtual BOOL Create LPCTSTR lpszText 静态
  • 实战:Springboot集成Sentinel实现流量控制、熔断降级、负载保护

    文章目录 前言 知识积累 流量控制 负载保护 熔断降级 官方文档 实战演练 部署sentinel dashboard 直接jar包部署 docker compose编排 springboot集成sentinel 基础架构搭建 sentine
  • 【RPA技术】UI分析器与可视化树:解决界面元素获取难题

    一般人在使用计算机的时候 都是在和操作系统的图形界面打交道 图形界面各有各的特色 当我们用鼠标点击时 其实鼠标下面都是一个小的图形部件 我们把这些图形部件称为 界面元素 在UiBot中 界面元素的作用 就是作为 有目标 的命令中的目标使用
  • CTF show WEB13

    题目地址 http ctf show 进入题目是个文件上传的题目 尝试了一番文件上传漏洞利用的方法后 没有啥突破 可能有啥隐藏的目录 尝试源码泄露利用的方法 在输入upload php bak时成功下载下来源码 bak文件是备份文件 这里列
  • Mysql中用SQL增加、删除字段,修改字段名、字段类型、注释,调整字段顺序总结

    1 增加一个字段 代码如下 复制代码 增加一个字段 默认为空alter table user add COLUMN new1 VARCHAR 20 DEFAULT NULL 增加一个字段 默认不能为空alter table user add
  • Opengl学习笔记:(一).Ply文件文件格式和文件读取

    转载自 http blog csdn net lxfyzx article details 4997627 http blog csdn net lxfyzx article details 4997780 一 Ply简介 这次实验老师要求