一种3d应用的显示刷新方法及系统的制作方法_2

文档序号:9727126阅读:来源:国知局
300、根据所述矩形区域设置视口的偏移大小,重新计算投影矩阵,对所述矩形区域进行绘制,并将绘制结果生成对应的更新纹理;
步骤S400、将所述更新纹理与源纹理混合,绘制到所述视口,并更新显示所述屏幕显示,以完成3D应用的显示刷新。
[0023]下面结合具体的实施例对上述步骤进行详细的描述。
[0024]所述3D应用是基于OpenGL ES的应用,一般都是整个屏幕在不停的刷新。OpenGL(全写Open Graphics Library)是个定义了一个跨编程语言、跨平台的编程接口的规格,它用于三维图像(二维的亦可)。OpenGL是个专业的图形程序接口,是一个功能强大,调用方便的底层图形库。OpenGL绘图时,会分配前后两个缓冲区,以避免绘图过程中窗口出现的闪烁现象。前缓冲区用于屏幕刷新,后缓冲区用于绘图,当调用Swap Buffer (交换缓冲区)的时候,将前后缓冲区进行交换,即前缓冲区变成后缓冲区,后缓冲区变成前缓冲区。一般情况下,OpenGL会一直调用刷新接口,即每帧视口中内容全部刷新。这样不管视口内容是否变化,都要占用CPU和GPU (Graphic Processing Unit,图形处理器)的资源进行绘制,这样就导致嵌入式平台的功耗大大增加,机身发热。本发明提供的基于OpenGL ES的3D应用刷新方法,是一种局部刷新方法,也就是说那里有变化就刷新那里,OpenGL是3D空间坐标系的绘制API (Applicat1n Programming Interface,应用程序编程接口),绘制的物体是空间的,而不是屏幕的像素坐标。
[0025]首先对本发明的原理进行说明。请参阅图2,图2为本发明提供的3D应用的显示刷新方法的原理示意图。本发明提供的3D应用显示刷新方法,先保存图2a所示的源屏幕,也就是3D应用上一次显示的渲染结果。然后找出3D应用当前屏幕显示与上一次屏幕显示相比屏幕发生变化的矩形区域,具体如图2b的矩形框所示。最后,只对显示界面有所改动的矩形框进行3D绘制,并刷新,具体如图2c所示。也就是说,本发明不需要对整个屏幕的画面进行全绘制,只绘制需要刷新的局部区域,从而,提高了系统性能和用户交互的响应速度,较大程度的降低了 GPU的占用率,平衡CPU和GPU的负载,提高了嵌入式系统的有效使用率。
[0026]本发明提供的基于OpenGL ES的3D应用的显示刷新方法,首先将OpenGL ES对3D应用进行显示的上一次渲染结果保存,并根据所述上一次显示的渲染结果生成对应的源纹理。具体来说,就是先创建一与终端显示屏幕大小一样、用于保存所述终端显示屏幕显示3D应用的上一次渲染结果的ΡΒ0,然后保存3D应用进行显示的上一次渲染结果至所述ΡΒ0中,并将所述ΡΒ0保存的上一次渲染结果生成对应的源纹理。所述PBO (Pixel BufferObject) B卩为OpenGL像素缓冲区,也是用于GPU的扩展(ARB_vertex_buffer_object)。这里的缓存当然就是GPU的缓存。ΡΒ0与VB0扩展类似,只不过它存储的是像素数据而不是顶点数据。在实际应用时,ΡΒ0不仅保存上一次渲染的结果,还保存第一次初始化拷贝屏幕显示的内容。使用ΡΒ0的好处是快速的像素数据传递,它采用了一种叫DMA (Direct MemoryAccess)的技术,无需CPU介入。另一个PBO的优点是,这种DMA是异步的。用传统的方法从图像源(如图像文件或视频)载入图像数据到纹理对象的过程。像素数据首先存到系统内存中,接着使用glTeXImage2D将数据从系统内存拷贝到纹理对象,包含的两个子过程均需要有CPU执行。像素数据直接载入到ΡΒ0中,这个过程仍需要CPU来执行,但是从数据从ΡΒ0到纹理对象的过程则由GPU来执行DMA,而不需要CPU参与。而且opengl可安排异步DMA,不必马上进行像素数据的传递。
[0027]在步骤S200中,计算所述3D应用的当前屏幕显示与上一次屏幕显示相比屏幕发生变化的矩形区域。具体来说,将所述3D应用的当前屏幕显示与上一次屏幕显示进行对t匕,将3D应用显示的3D空间有变化的区域映射到屏幕的2D坐标;根据所述屏幕的2D坐标生成对应的矩形区域。本发明总,渲染物体采用父子节点层次化组织结构,由于逻辑控制导致的物体位置、大小、材质发生变化后,将重新计算映射到屏幕发生变化的矩形区域。在实际应用时,嵌入式设备上运行3D应用时,会接收用户的操作,譬如拖动操作等,所述3D应用也会自己播放动画等视频。根据3D应用的逻辑操作,计算屏幕上此次屏幕显示与上次屏幕显示相比屏幕发生变化的矩形区域,也就是上一帧屏幕显示的内容与下一帧屏幕显示的内容有变化的区域,取变化范围的矩形区域,并确定所述矩形区域的大小。由于OpenGL是3D空间坐标系的绘制API,绘制的物体是空间的,而不是屏幕的像素坐标,因此本发明需要将空间变化的区域映射到2D屏幕坐标,根据所述2D屏幕坐标形成对应的矩形区域。
[0028]在步骤S300中,根据所述矩形区域设置视口的偏移大小,重新计算投影矩阵,对所述矩形区域进行绘制,并将绘制结果生成对应的更新纹理。具体来说,所述步骤S300具体包括:S310、调整视口的偏移大小到所述矩形区域中;S320、确定视点的位置,采用近切面的偏移以及大小计算投影矩阵,根据投影矩阵确定投影的范围,透视除法后获取到规范化坐标[_1,1]之间;S330、将所述投影矩阵缩小至需要更新的矩形区域中,OpenGL绘制所述矩形区域对应的显示界面;S340、获取视口绘制的矩形区域对应的绘制结果,并生成对应的更新纹理。
[0029]请一并参阅图3和图4,图3和图4为在投影矩阵形成的视景体,分别为全景投影矩阵和局部投影矩阵。在实际应用时,调整视口的大小偏移到步骤S200计算的2D矩形区域中,然后对所述矩形区域进行对应的OpenGL绘制。在绘图前,先确定视点的位置,视点决定观测物体的大小,正反面,光影效果等。再根据所述矩形区域,可采用近切面的偏移以及大小计算投影矩阵。然后根据投影矩阵确定投影的范围,透视除法后获取到规范化坐标[_1,1]之间。根据动态投影矩阵原理,将所述投影矩阵缩小至需要更新的矩形区域中,OpenGL绘制所述矩形区域对应的显示界面,也就是3D绘制显示界面有变化的矩形区域。通过gl Read Pixels获取视口绘制的与下一帧所述矩形区域对应的新内容,并将其包装为一块更新纹理。
[0030]在步骤S400中,将所述更新纹理与源纹理混合,绘制到所述视口,并更新显示所述屏幕显示,以完成3D应用的显示刷新。具体来说,先将所述更新纹理与源纹理混合,并绘制到所述视口 ;在上一次屏幕显示的基础上更新显示所述屏幕显示,以完成3D应用的显示刷新,并将刷新后的当前屏幕显示结果发送至ΡΒ0保存。也就是说,根据上一帧和下一帧的屏幕显示内容,只针对下一帧屏幕显示的3D界面有所改动的矩形区域进行刷新,从而提高了系统性能和用户交互的响应速度,较大程度的降低了 GPU的占用率,平衡CPU和GPU的负载,提高了嵌入式系统的有效使用率。
[0031]本发明提供的基于OpenGL ES的3D应用的显示刷新方法,通过动态投影矩阵的计算,确定了界面有所改动的区域局部刷新的窗口大小,再只针对修改的区域进行刷新,从而完成了 3D应用的刷新显示,提高了系统性能和用户交互的响应速度,较大程度的降低了GPU的占用率,平衡CPU和GPU的负载,提高了嵌入式系统的有效使用率,节约了嵌入式设备的电量。
[0032]基于上述的3D应用的显示刷新方法,本发明还提供了一种3D应用的显示刷新方法,如图5所示,包括:
源纹理生成模块10,用于保存3D应用进行显示的上一次渲染结果,并根据所述上一次渲染结果生成对应的源纹理;具体如步骤S100所述;
矩形区域计算模块20,用于计算所述3D应用的当前屏幕显示与上一次屏幕显示相比屏幕发生变化的矩形区域;具体如步骤S200所述;
更新纹理生成模块30,用于根据所述矩形区域设置视口的偏移大小,重新计算投影矩阵,对所述矩形区域进行绘制,并将绘制结果生成对应的更新纹理;具体如步骤S300所述;纹理混合显示模块40,用于将所述更新纹理与源纹理混合,绘制到所述视口,并更新显示所述屏幕显示,以完成3D应用的显示刷新;具体如步骤S4
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1