CN109634611B - 基于OpenGL的移动端三维模型ply文件解析与展示方法 - Google Patents
基于OpenGL的移动端三维模型ply文件解析与展示方法 Download PDFInfo
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 41
- 238000004458 analytical method Methods 0.000 title claims abstract description 19
- 230000006870 function Effects 0.000 claims abstract description 77
- 239000012634 fragment Substances 0.000 claims abstract description 9
- 230000008569 process Effects 0.000 claims description 12
- 238000009877 rendering Methods 0.000 claims description 8
- 239000003086 colorant Substances 0.000 claims description 7
- 238000004040 coloring Methods 0.000 claims description 6
- 230000006386 memory function Effects 0.000 claims description 5
- 238000012545 processing Methods 0.000 claims description 5
- 230000000694 effects Effects 0.000 claims description 4
- 230000007547 defect Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000003672 processing method Methods 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012800 visualization Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/38—Creation or generation of source code for implementing user interfaces
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three 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文件解析与展示方法。
背景技术
随着移动设备硬件性能的发展,人们对移动终端的图形交互体验的需求逐步提高,越来越多的三维场景的应用由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文件的绘制。
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)
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)
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)
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 |
-
2019
- 2019-01-03 CN CN201910003358.2A patent/CN109634611B/zh not_active Expired - Fee Related
Patent Citations (2)
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)
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 |