CN109634611B - 基于OpenGL的移动端三维模型ply文件解析与展示方法 - Google Patents

基于OpenGL的移动端三维模型ply文件解析与展示方法 Download PDF

Info

Publication number
CN109634611B
CN109634611B CN201910003358.2A CN201910003358A CN109634611B CN 109634611 B CN109634611 B CN 109634611B CN 201910003358 A CN201910003358 A CN 201910003358A CN 109634611 B CN109634611 B CN 109634611B
Authority
CN
China
Prior art keywords
function
creating
vertex
calling
dimensional model
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN201910003358.2A
Other languages
English (en)
Other versions
CN109634611A (zh
Inventor
魏泽伟
张键驰
贾奎
陈泽康
马小琦
谢裕麟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
South China University of Technology SCUT
Original Assignee
South China University of Technology SCUT
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by South China University of Technology SCUT filed Critical South China University of Technology SCUT
Priority to CN201910003358.2A priority Critical patent/CN109634611B/zh
Publication of CN109634611A publication Critical patent/CN109634611A/zh
Application granted granted Critical
Publication of CN109634611B publication Critical patent/CN109634611B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/38Creation or generation of source code for implementing user interfaces
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Graphics (AREA)
  • Geometry (AREA)
  • Human Computer Interaction (AREA)
  • Image Generation (AREA)

Abstract

本发明公开了一种基于OpenGL的移动端三维模型ply文件解析与展示方法,包括以下步骤:读取ply文件;创建与ply文件信息对应的解析类;创建解析类对象从输入流中读取模型文件信息;创建Buffer缓存点、面颜色信息,以及Vertex与Fragement Shader;在java层调用OpenGL接口编写绘制函数;创建Renderer类调用绘制函数渲染出三维模型。本发明利用基本程序语言解析文件对于点、面和颜色数据,结合OpenGL语言实现模型数据与底层GPU的相互链接,从而实现了三维模型在移动端的呈现,提高了移动平台上三维模型的绘制效率。

Description

基于OpenGL的移动端三维模型ply文件解析与展示方法
技术领域
本发明涉及图形处理技术领域,具体涉及一种基于OpenGL的移动端三维模型ply文件解析与展示方法。
背景技术
随着移动设备硬件性能的发展,人们对移动终端的图形交互体验的需求逐步提高,越来越多的三维场景的应用由PC端转向移动终端设备。但现有的移动可视化软件大多只支持二维图形的展示,且对于一些比较大型的三维模型而言,在移动终端上其解析和绘制需要经过大量复杂的计算,效率不高。
在图形显示方面,Android系统采用基于嵌入式3D图形算算法标注OpenGL实现三维图形的绘制。而OpenGL是一个跨平台的底层3D图形库,提供了功能完善的3D图形应用程序接口API,通过编写访问图形硬件的底层代码实现程序高效运行。Android 3D引擎采用的是OpenGL ES,它是OpenGL用于手机等嵌入式设备的API子集。为实现物体三维可视化,其通过一个拥有合适长度单位和坐标轴方向的坐标来显示三维物体数字化,便于计算机处理。
为了更具直观性和真实地展示三维模型,本发明通过研究三维建模软件中的模型信息,并对其模型ply文件进行解析,最后基于Open GL的三维模型绘制技术将其展示在Andriod移动终端上,此方法提高了移动平台上三维模型的绘制效率。但是目前基于OpenGL的研究多用于静态模型的渲染,存在数据量小,对实时性要求不高等缺点。
发明内容
本发明的目的是为了解决现有技术中的上述缺陷,提供一种基于OpenGL的移动端三维模型ply文件解析与展示方法。
本发明的目的可以通过采取如下技术方案达到:
一种基于OpenGL的移动端三维模型ply文件解析与展示方法,所述的方法包括以下步骤:
S1、创建InputStream读取ply文件,其中,ply文件是指ply格式文件;
S2、创建与ply文件信息对应的解析类;
S3、在mesh类中创建解析类对象,从输入流中读取模型文件信息,以获得ply文件的点、面与颜色信息;
S4、创建Buffer缓存获取的点、面与颜色信息,以及通过OpenGL绘制Vertexshader与Fragement Shader,其中,Vertex shader用于绘制点、面,Fragement Shader用于着色;
S5、在java层调用OpenGL接口编写绘制函数;
S6、创建Renderer类调用绘制函数渲染出三维模型。
进一步地,所述的PLY文件结构包括:(1)头部、(2)顶点列表、(3)面片列表,其中,
(1)头部:①头部是一系列以回车结尾的文本行,用来描述文件的剩余部分,②头部包含一个对每个元素类型的描述,包括元素名,元素的数量,以及一个与这个元素关联的不同属性的列表,③头部说明这个文件是二进制的或者是ASCII的,④头部后面的是一个每个元素类型的元素列表,按照在头部中描述的顺序出现,⑤文件中的注释一般在comment开始的关键词定义行里;
(2)顶点列表包含X、Y、Z坐标,朝向坐标nx、ny、nz,颜色RGB的值,以及表示透明度的alpha值;
(3)面片列表格式如下:<组成面的端点数N><端点1的索引><端点2的索引>...<端点N的索引>。
进一步地,所述的步骤S1过程如下:
S101、在Android工程项目Main文件下创建Assets文件夹,并且放入ply文件,以便输入流获取数据;
S102、通过调用Android函数context.getAssets().open()获取输入流。同时为了对读取过程可能出现的IO异常进行处理,确保执行处理过程稳健。处理方法为使用try/catch语句处理IOException。
进一步地,所述的步骤S2过程如下:
S201、定义私有类属性,其中,私有类属性包括:
用于判断头部是否读取完毕的布尔类型inHeader,用于存储顶点坐标的浮点数组vertices,用于存储各顶点颜色的浮点数组colors,用于存储朝向坐标的浮点数组Normal,用于存储颜色属性总数RGBA的整型colorSize,用于存储顶点总数的整型vertexCount,用于存储面总数的整型faceCount,用于从输入流读解析行数据的BufferReader;
S202、定义PlyParse类函数,其中,PlyParse类函数包括:
函数ReadHeader,用于读取ply文件头部信息;函数ReadData,用于读取ply顶点与面信息;函数ScaleData用于将顶点颜色坐标归一化;函数getVertices,该函数无需输入参数,调用可返回顶点数据;函数getColors,该函数无需输入参数,调用可返回颜色信息;函数getVertexCount,该函数无需输入参数,调用返回整型顶点总数;函数getFaces,该函数无需输入参数,调用可返回浮点数组面总数;定义函数getFaceCount,该函数无需输入参数,调用返回整型面总数。
进一步地,所述的步骤S3过程如下:
S301、设置mesh类构造函数参数,使之接受参数InputSteam得到ply文件输入流;
S302、创建解析类对象并传入输入流,获得解析后的数据。
进一步地,所述的步骤S4过程如下:
S401、创建FloatBuffer对象将内存复制到本地堆,因为解析后的点、面以及颜色信息均在java堆中,它运行于虚拟机上。一个java的浮点为32bit,而一个字节(byte)只有8位精度。为了不被垃圾回收期管理,使用ByteBuffer.allocateDirect()分配本地内存。如下:
创建MeshBuffer,MeshBuffer通过ByteBuffer.allocateDirect(n),其中,ByteBuffer.allocateDirect(n)为申请内存函数传入n,申请内存,并通过函数asFloatBuffer(),无需输入参数,调用返回MeshBuffer,其中,n代表顶点字节数;
创建colorBuffer,colorBuffer通过ByteBuffer.allocateDirect(x),其中,ByteBuffer.allocateDirect(x)为申请内存函数传入x,申请内存,并通过函数asFloatBuffer(),无需输入参数,调用返回colorBuffer,其中,x代表颜色字节数;
创建FaceBuffer,FaceBuffer通过ByteBuffer.allocateDirect(y),其中,ByteBuffer.allocateDirect(y)为申请内存函数传入y,申请内存,并通过函数asFloatBuffer(),无需输入参数,调用返回FaceBuffer,其中,y代表面信息字节数。
S402、将解析后的数据放入申请的本地内存中,如下
MeshBuffer调用函数put(x1).position(0),colorBuffer调用函数put(x2).position(0),FaceBuffer调用函数put(x3).position(0),输入顶点、颜色、面数参数,无返回值,作用是将数据放入内存,其中x1代表顶点信息,x2代表颜色信息,x3代表面信息。
S403、创建着色器VerTexShader对象和FragmentShader对象,通过函数GLES20.glCreateShader(x1),输入x1,返回VerTexShader对象,再通过函数GLES20.glCreateShader(x2),输入x2,返回FragmentShader对象,其中,x1代表着色器VertexShaer,x2代表着色器FragmentShader;
S404、在步骤S403中,用GLSL语言分别定义顶点着色器与片段着色器,将其加载到内存中,通过调用GLES20.glShaderSource(xi,yi),输入着色器对象xi和着色代码yi,再通过调用GLES20.glCompileShader(xi),输入着色器对象,返回编译结果。
S405、把着色器一起链接到OpenGL中。
新建program,调用函数GLES20.glAttachShader(program,fragmentShader),输入program对象mProgram和着色器对象fragmentShader,再通过函数GLES20.glLinkProgram(mProgram),传入program对象,完成链接操作。
进一步地,所述的步骤S5过程如下:
S501、在开始绘制之前,需要调用glEnableVerTexAttribArray函数,让OpenGl知道如何寻找所需数据;
S502、关联属性与顶点、面、颜色数据的数组,首先调用Buffer.position(0)使指针指向缓冲区数据开头的位置,调用函数GLES20.glVertexAttribPointer(index,size,type,normalized,stride),其中,index为整型,代表属性位置,获取引用,size为整型,代表每个属性单一数据的分量计数,type代表数据类型,normalized为布尔类型,传false,stride为整型,传0。
进一步地,所述的步骤S6过程如下:
S601、创建Renderer类继承GLSurfaceView.Renderer,其接口方法如下:当创建Surface的时候,通过GLSurfaceView调用onSurfaceCreated(),执行创建操作,其中,onSurfaceCreated(),无输入参数;
在创建Surface以后,每次Surface尺寸变化时,调用onSurfaceChanged(),其中,onSurfaceChanged(),无输入参数;
当绘制一帧时,调用onDrawFrame(),其中,onDrawFrame()无输入参数;
S602、创建mesh对象,传入解析类对象,完成ply文件的绘制。
本发明相对于现有技术具有如下的优点及效果:
1)、本发明通过研究三维建模软件中的模型信息,并对其模型ply文件进行解析,最后基于OpenGL的三维模型绘制技术将其展示在Andriod移动终端上,此方法提高了移动平台上三维模型的绘制效率。
2)、本发明利用基本程序语言解析文件对于点、面和颜色数据,结合OpenGL语言实现模型数据与底层GPU的相互链接,从而实现了三维模型在移动端的呈现。
附图说明
图1是本发明中基于OpenGL的移动端三维模型ply文件解析与展示的流程步骤图;
图2是本发明中OpenGL ES绘制流程步骤图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例
如附图1所示,本实施例公开了一种基于opengl的三维模型ply文件解析与渲染方法,包括以下步骤:
S1、创建InputStream读取ply文件。
具体步骤如下:
首先,在Android工程项目Main文件下创建Assets文件夹,并且放入ply文件,以便输入流获取数据。
然后,调用Android函数context.getAssets().open()获取输入流。同时为了对读取过程可能出现的IO异常进行处理,确保执行处理过程稳健。处理方法为使用try/catch语句处理IOException。
S2、创建与ply文件信息对应的解析类。具体步骤如下:
首先,定义私有类属性,私有类属性包括:
用于判断头部是否读取完毕的布尔类型inHeader,用于存储顶点坐标的浮点数组vertices,用于存储各顶点颜色的浮点数组colors,用于存储朝向坐标的浮点数组Normal,用于存储颜色属性总数RGBA的整型colorSize,用于存储顶点总数的整型vertexCount,用于存储面总数的整型faceCount,用于从输入流读解析行数据的BufferReader。
然后,定义PlyParse类函数,如下:
定义函数ReadHeader,用于读取ply文件头部信息;定义函数ReadData,用于读取ply顶点与面信息;定义函数ScaleData,用于将顶点颜色坐标归一化;定义函数getVertices,该函数无需输入参数,调用可返回顶点数据;定义函数getColors,该函数无需输入参数,调用可返回颜色信息;定义函数getVertexCount,该函数无需输入参数,调用返回整型顶点总数;定义函数getFaces,该函数无需输入参数,调用可返回浮点数组面总数;定义函数getFaceCount,该函数无需输入参数,调用返回整型面总数。
S3、在mesh类中创建解析类对象从输入流中读取模型文件信息,以获得ply的点、面与颜色信息。设置mesh类构造函数参数,使之接受参数InputSteam得到ply文件输入流。然后创建解析类对象并传入输入流,获得解析后的数据。
S4、创建Buffer缓存获取的点、面以及颜色信息,以及OpenGL绘制所必需的Vertexshader与Fragement Shader,前者用于绘制点、面,后者用于着色;
所述的步骤S4过程如下:
S401、创建FloatBuffer对象将内存复制到本地堆,因为解析后的点、面以及颜色信息均在java堆中,它运行于虚拟机上。一个java的浮点为32bit,而一个字节(byte)只有8位精度。为了不被垃圾回收期管理,使用ByteBuffer.allocateDirect()分配本地内存。如下:
创建MeshBuffer,MeshBuffer通过申请内存函数ByteBuffer.allocateDirect(n),传入n,申请内存,并通过函数asFloatBuffer(),无需输入参数,调用返回MeshBuffer,其中,n代表顶点字节数;
创建colorBuffer,colorBuffer通过申请内存函数ByteBuffer.allocateDirect(x),传入x,申请内存,并通过函数asFloatBuffer(),无需输入参数,调用返回colorBuffer,其中,x代表颜色字节数;
创建FaceBuffer,FaceBuffer通过申请内存函数ByteBuffer.allocateDirect(y),传入y,申请内存,并通过函数asFloatBuffer(),无需输入参数,调用返回FaceBuffer,其中,y代表面信息字节数。
S402、将解析后的数据放入申请的本地内存中,如下:
MeshBuffer调用函数put(x1).position(0),colorBuffer调用函数put(x2).position(0),FaceBuffer调用函数put(x3).position(0),输入顶点、颜色、面数参数,无返回值,作用是将数据放入内存,其中x1代表顶点信息,x2代表颜色信息,x3代表面信息。
S403、创建着色器VerTexShader对象和FragmentShader对象,通过函数GLES20.glCreateShader(x1),输入x1,返回VerTexShader对象,再通过函数GLES20.glCreateShader(x2),输入x2,返回FragmentShader对象,其中,x1代表着色器VertexShaer,x2代表着色器FragmentShader;
S404、在步骤S403中,用GLSL语言分别定义了顶点着色器与片段着色器,将其加载到内存中,通过调用GLES20.glShaderSource(xi,yi),输入着色器对象xi和着色代码yi,再通过调用GLES20.glCompileShader(xi),输入着色器对象,返回编译结果。
S405、把着色器一起链接到OpenGL中。
新建program,调用函数GLES20.glAttachShader(program,fragmentShader),输入program对象mProgram和着色器对象fragmentShader,再通过函数GLES20.glLinkProgram(mProgram),传入program对象,完成链接操作。
S5、在java层调用OpenGL接口编写绘制函数
首先,在开始绘制之前,需要调用函数glEnableVerTexAttribArray,无需输入参数,让OpenGL知道如何寻找所需数据。
然后,关联属性与顶点、面、颜色数据的数组。
接着,调用Buffer.position(0)使指针指向缓冲区数据开头的位置,否则它会读取缓冲区结尾后面的内容,导致程序崩溃。调用函数GLES20.glVertexAttribPointer(index,size,type,normalized,stride),其中,index为整型,代表属性位置,获取引用;size为整型,代表每个属性单一数据的分量计数;type代表数据类型;normalized为布尔类型,一般传false;stridew为整型,一般传0。
S6、创建Renderer类继承GLSurfaceView.Renderer。其接口方法如下:onSurfaceCreated(),无输入参数,执行创建操作,当Surface被创建的时候,GLSurfaceView会调用此方法;onSurfaceChanged(),无输入参数,在Surface被创建以后,每次Surface尺寸变化时,这个方法都会被调用;onDrawFrame(),无输入参数,当绘制一帧时,这个方法会被调用。
上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。

Claims (9)

1.一种基于OpenGL的移动端三维模型ply文件解析与展示方法,其特征在于,所述的方法包括以下步骤:
S1、创建InputStream读取ply文件;
S2、创建与ply文件信息对应的解析类;
S3、在mesh类中创建解析类对象,从输入流中读取模型文件信息,以获得ply文件的点、面与颜色信息;
S4、创建Buffer缓存获取的点、面与颜色信息,以及通过OpenGL绘制Vertex shader与Fragement Shader,其中,Vertex shader用于绘制点、面,Fragement Shader用于着色;其中,所述的步骤S4过程如下:
S401、创建FloatBuffer对象将内存复制到本地堆,使用ByteBuffer.allocateDirect()申请分配本地内存,其中,FloatBuffer对象包括MeshBuffer、colorBuffer和FaceBuffer:
S402、将解析后的数据放入申请的本地内存中,如下:
MeshBuffer调用函数put(x1).position(0),colorBuffer调用函数put(x2).position(0),FaceBuffer调用函数put(x3).position(0),分别输入顶点、颜色、面数参数,无返回值,作用是将数据放入内存,其中x1代表顶点信息,x2代表颜色信息,x3代表面信息;
S403、创建着色器VerTexShader对象和FragmentShader对象,通过函数GLES20.glCreateShader(x1),输入x1,返回VerTexShader对象,再通过函数GLES20.glCreateShader(x2),输入x2,返回FragmentShader对象,其中,x1代表着色器VertexShaer,x2代表着色器FragmentShader;
S404、通过调用GLES20.glShaderSource(xi,yi),输入着色器对象xi和着色代码yi,再通过调用GLES20.glCompileShader(xi),输入着色器对象,返回编译结果;
S405、把着色器一起链接到OpenGL中;
S5、在java层调用OpenGL接口编写绘制函数;
S6、创建Renderer类调用绘制函数渲染出三维模型。
2.根据权利要求1所述的基于OpenGL的移动端三维模型ply文件解析与展示方法,其特征在于,所述的PLY文件结构包括:头部、顶点列表、面片列表,其中,
所述的头部:①头部是一系列以回车结尾的文本行,用来描述文件的剩余部分,②头部包含一个对每个元素类型的描述,包括元素名,元素的数量,以及一个与这个元素关联的不同属性的列表,③头部说明这个文件是二进制的或者是ASCII的,④头部后面的是一个每个元素类型的元素列表,按照在头部中描述的顺序出现,⑤文件中的注释一般在comment开始的关键词定义行里;
所述的顶点列表包含X、Y、Z坐标,朝向坐标nx、ny、nz,颜色RGB的值,以及表示透明度的alpha值;
所述的面片列表格式如下:<组成面的端点数N><端点1的索引><端点2的索引>...<端点N的索引>。
3.根据权利要求1所述的基于OpenGL的移动端三维模型ply文件解析与展示方法,其特征在于,所述的步骤S1过程如下:
S101、在Android工程项目Main文件下创建Assets文件夹,并且放入ply文件,以便输入流获取数据;
S102、通过调用Android函数context.getAssets().open()获取输入流,同时为了对读取过程可能出现的IO异常进行处理,确保执行处理过程稳健,使用try/catch语句处理IOException。
4.根据权利要求1所述的基于OpenGL的移动端三维模型ply文件解析与展示方法,其特征在于,所述的步骤S2过程如下:
S201、定义私有类属性,其中,私有类属性包括:
用于判断头部是否读取完毕的布尔类型inHeader,用于存储顶点坐标的浮点数组vertices,用于存储各顶点颜色的浮点数组colors,用于存储朝向坐标的浮点数组Normal,用于存储颜色属性总数RGBA的整型colorSize,用于存储顶点总数的整型vertexCount,用于存储面总数的整型faceCount,用于从输入流读解析行数据的BufferReader;
S202、定义PlyParse类函数,其中,PlyParse类函数包括:
函数ReadHeader,用于读取ply文件头部信息;函数ReadData,用于读取ply顶点与面信息;函数ScaleData用于将顶点颜色坐标归一化;函数getVertices,该函数无需输入参数,调用可返回顶点数据;函数getColors,该函数无需输入参数,调用可返回颜色信息;函数getVertexCount,该函数无需输入参数,调用返回整型顶点总数;函数getFaces,该函数无需输入参数,调用可返回浮点数组面总数;定义函数getFaceCount,该函数无需输入参数,调用返回整型面总数。
5.根据权利要求1所述的基于OpenGL的移动端三维模型ply文件解析与展示方法,其特征在于,所述的步骤S3过程如下:
S301、设置mesh类构造函数参数,使之接受参数InputSteam得到ply文件输入流;
S302、创建解析类对象并传入输入流,获得解析后的数据。
6.根据权利要求1所述的基于OpenGL的移动端三维模型ply文件解析与展示方法,其特征在于,所述的步骤S401具体如下:
创建MeshBuffer,MeshBuffer通过ByteBuffer.allocateDirect(n),其中,ByteBuffer.allocateDirect(n)为申请内存函数传入n,申请内存,并通过函数asFloatBuffer(),无需输入参数,调用返回MeshBuffer,其中,n代表顶点字节数;
创建colorBuffer,colorBuffer通过ByteBuffer.allocateDirect(x),其中,ByteBuffer.allocateDirect(x)为申请内存函数传入x,申请内存,并通过函数asFloatBuffer(),无需输入参数,调用返回colorBuffer,其中,x代表颜色字节数;
创建FaceBuffer,FaceBuffer通过ByteBuffer.allocateDirect(y),其中,ByteBuffer.allocateDirect(y)为申请内存函数传入y,申请内存,并通过函数asFloatBuffer(),无需输入参数,调用返回FaceBuffer,其中,y代表面信息字节数。
7.根据权利要求1所 述的基于OpenGL的移动端三维模型ply文件解析与展示方法,其特征在于,所述的步骤S405具体如下:
新建program,调用函数GLES20.glAttachShader(program,fragmentShader),输入program对象mProgram和着色器对象fragmentShader,再通过函数GLES20.glLinkProgram(mProgram),传入program对象,完成链接操作。
8.根据权利要求1所述的基于OpenGL的移动端三维模型ply文件解析与展示方法,其特征在于,所述的步骤S5过程如下:
S501、调用glEnableVerTexAttribArray函数,寻找OpenGl所需数据;
S502、关联属性与顶点、面、颜色数据的数组,首先调用Buffer.position(0)使指针指向缓冲区数据开头的位置,调用函数GLES20.glVertexAttribPointer(index,size,type,normalized,stride),其中,index为整型,代表属性位置,获取引用,size为整型,代表每个属性单一数据的分量计数,type代表数据类型,normalized为布尔类型,stride为整型。
9.根据权利要求1所述的基于OpenGL的移动端三维模型ply文件解析与展示方法,其特征在于,所述的步骤S6过程如下:
S601、创建Renderer类继承GLSurfaceView.Renderer,其接口方法如下:
当创建Surface的时候,通过GLSurfaceView调用onSurfaceCreated(),执行创建操作,其中,onSurfaceCreated(),无输入参数;
在创建Surface以后,每次Surface尺寸变化时,调用onSurfaceChanged(),其中,onSurfaceChanged(),无输入参数;
当绘制一帧时,调用onDrawFrame(),其中,onDrawFrame()无输入参数;
S602、创建mesh对象,传入解析类对象,完成ply文件的绘制。
CN201910003358.2A 2019-01-03 2019-01-03 基于OpenGL的移动端三维模型ply文件解析与展示方法 Expired - Fee Related CN109634611B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910003358.2A CN109634611B (zh) 2019-01-03 2019-01-03 基于OpenGL的移动端三维模型ply文件解析与展示方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910003358.2A CN109634611B (zh) 2019-01-03 2019-01-03 基于OpenGL的移动端三维模型ply文件解析与展示方法

Publications (2)

Publication Number Publication Date
CN109634611A CN109634611A (zh) 2019-04-16
CN109634611B true CN109634611B (zh) 2021-08-10

Family

ID=66056567

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910003358.2A Expired - Fee Related CN109634611B (zh) 2019-01-03 2019-01-03 基于OpenGL的移动端三维模型ply文件解析与展示方法

Country Status (1)

Country Link
CN (1) CN109634611B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110232718B (zh) * 2019-05-10 2021-01-08 西安航天动力试验技术研究所 一种三维瀑布图渲染颜色定制化方法
CN114356295B (zh) * 2021-12-24 2023-05-26 北京有竹居网络技术有限公司 三维模型构建方法、装置和电子设备
CN114596347A (zh) * 2022-03-14 2022-06-07 西南交通大学 基于移动摄影图像的滑坡体三维重建与体积计算方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101593345A (zh) * 2009-07-01 2009-12-02 电子科技大学 基于gpu加速的三维医学图像显示方法
CN103268626A (zh) * 2013-04-11 2013-08-28 江苏省在这里数字科技有限公司 基于gpu的地图线形符号绘制方法及系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140063024A1 (en) * 2012-12-19 2014-03-06 Iowa State University Research Foundation, Inc. Three-dimensional range data compression using computer graphics rendering pipeline

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101593345A (zh) * 2009-07-01 2009-12-02 电子科技大学 基于gpu加速的三维医学图像显示方法
CN103268626A (zh) * 2013-04-11 2013-08-28 江苏省在这里数字科技有限公司 基于gpu的地图线形符号绘制方法及系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于NPR的线条提取算法的GPU实现;袁健;《中国优秀硕士学位论文全文数据库信息科技辑》;20121115;正文第18-45页 *

Also Published As

Publication number Publication date
CN109634611A (zh) 2019-04-16

Similar Documents

Publication Publication Date Title
CN108765534B (zh) 一种图像渲染方法、装置、设备及存储介质
WO2020156264A1 (zh) 渲染方法及装置
US9715750B2 (en) System and method for layering using tile-based renderers
US8675000B2 (en) Command buffers for web-based graphics rendering
KR102003655B1 (ko) 그래픽 프로세싱에서 셰도우 레이들에 대한 트리 횡단을 위한 시작 노드 결정
US9069567B1 (en) High performance execution environment
CN109634611B (zh) 基于OpenGL的移动端三维模型ply文件解析与展示方法
US9495722B2 (en) Developer controlled layout
Cozzi et al. OpenGL insights
US11094036B2 (en) Task execution on a graphics processor using indirect argument buffers
US11727632B2 (en) Shader binding management in ray tracing
EP3005081A1 (en) Shader function linking graph
CN107450897B (zh) 图形引擎的跨平台移植方法和装置
US10319068B2 (en) Texture not backed by real mapping
WO2023197762A1 (zh) 图像渲染方法、装置、电子设备、计算机可读存储介质及计算机程序产品
US20210383591A1 (en) Bounded volume hierarchy (bvh) tree traversal using spatial division
CN114663272B (zh) 一种图像处理方法及电子设备
CN116863052A (zh) 基于分布式操作系统绘制地图的方法及装置
CN114359454A (zh) 一种图形绘制设备、方法及装置
EP3834080B1 (en) Static reconcilliation of application view hierarchies
CN110930499B (zh) 一种3d数据处理方法及装置
CN113822980A (zh) 一种去除图像黑边的方法、装置、电子设备及存储介质
CN105183491A (zh) 跨平台的桌面gis系统及其启动方法
CN116521165A (zh) 一种跨端渲染方法、系统及电子设备
Wang XNA-like 3D Graphics Programming on the Raspberry Pi

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20210810

CF01 Termination of patent right due to non-payment of annual fee