CN104751494A - 一种OpenGL超大纹理的处理和绘制方法 - Google Patents

一种OpenGL超大纹理的处理和绘制方法 Download PDF

Info

Publication number
CN104751494A
CN104751494A CN201510204692.6A CN201510204692A CN104751494A CN 104751494 A CN104751494 A CN 104751494A CN 201510204692 A CN201510204692 A CN 201510204692A CN 104751494 A CN104751494 A CN 104751494A
Authority
CN
China
Prior art keywords
texture
rectangle
drafting
cutting
textures
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.)
Pending
Application number
CN201510204692.6A
Other languages
English (en)
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.)
State Grid Corp of China SGCC
State Grid Jiangsu Electric Power Co Ltd
Jiangsu Electric Power Information Technology Co Ltd
Original Assignee
State Grid Corp of China SGCC
State Grid Jiangsu Electric Power Co Ltd
Jiangsu Electric Power Information Technology Co Ltd
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 State Grid Corp of China SGCC, State Grid Jiangsu Electric Power Co Ltd, Jiangsu Electric Power Information Technology Co Ltd filed Critical State Grid Corp of China SGCC
Priority to CN201510204692.6A priority Critical patent/CN104751494A/zh
Publication of CN104751494A publication Critical patent/CN104751494A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Processing Or Creating Images (AREA)

Abstract

本发明公开了一种OpenGL超大纹理的处理和绘制方法,包括以下步骤:超大纹理预处理,则按预设的大小对原始文件进行裁切,并将裁切后的影像存储在本地; 确定纹理在平面上的绘制区域,使用列表将每个裁切矩形的信息记录下来;构造绘制纹理,将预处理生成的文件构造成OpenGL绘制的纹理,并按照切割顺序依次保存在列表中;绘制超大纹理,矩形确定了绘制的范围,纹理确定了表面的贴图,在指定的矩形区域内将对应纹理绘制出来。本发明对于单幅尺寸超过显卡限制的纹理自动进行处理,可以突破限制在平面上完整的绘制超大纹理。

Description

一种OpenGL超大纹理的处理和绘制方法
技术领域
本发明涉及一种超大纹理的处理和绘制方法,具体地说是一种OpenGL超大纹理的处理和绘制方法。
背景技术
在图形显示绘制的过程中,使用OpenGL可以充分地利用显卡的能力,大幅提高绘制的效率。OpenGL使用纹理来绘制面,而纹理的大小受制于显卡的能力。就一般应用而言,单张纹理不超过显卡的限制则加载绘制完全没有问题。对于某些特殊的应用,需要在一个面上绘制一个超大的纹理,如果纹理的大小超过了显卡的限制,则无法直接加载和绘制。
发明内容
为了克服现有技术存在的问题,本发明的目的在于提供一种OpenGL超大纹理的处理和绘制方法,该方法对于单幅尺寸超过显卡限制的纹理自动进行处理,可以突破限制在平面上完整的绘制超大纹理。
为了达到上述目的,本发明的技术方案是这样实现的:
一种OpenGL超大纹理的处理和绘制方法,其特征在于该方法包括以下步骤:
1)超大纹理预处理
读入纹理,获得纹理自身的尺寸,与预设的长宽值比较,如果超过了预设值,则按预设的大小对原始文件进行裁切,裁切后的影像按原始文件名加左上角坐标值的复合形式命名;检查本地是否有此文件存在,如果有则不作处理;如果没有则进行裁切,并将裁切后的影像存储在本地,以备后续建立纹理使用; 
具体如下:
11)从本地加载待绘制的原始图像,构造QImage对象以获得原始图像的宽高信息;将原始图像的宽高信息与预定义的绘制矩形大小比较,如果大于预定值则需要进行预处理,进入步骤12),如果不大于则直接进入步骤2);
12)通过原始图像的大小与预定义矩形的大小进行运算,确定需要裁切的矩形的行数和列数,然后通过循环依次构建用来裁切原始图像的裁切矩形,包含了裁切矩形的左上角点坐标以及矩形的宽高;
13)为了将裁切的图像存到本地,需要一个不重复的文件名,将原始文件名与裁切矩形左上角点坐标信息相结合,形成一个新的文件名,作为待用的文件名;利用这个新的文件名检查输出目录是否存在同样名称的文件,如果存在则不再重复裁切文件;如果不存在进行影像的裁切;
14)有了原始图像和裁切矩形后,调用QImage的copy方法,将矩形内的图像拷贝到内存中,形成一个新的QImage对象;接着调用QImage的save方法,使用步骤13)中构建的文件名将图像保存到本地;
2)  确定纹理在平面上的绘制区域
在确定切割矩形的过程中,使用列表将每个裁切矩形的信息记录下来,包含了切割矩形的位置信息和宽高信息,确定对应纹理的绘制范围;
为了后续的纹理绘制,将构建的裁切矩形位置信息保留下来;通过一个QList将所有构建的信息保存起来,这些矩形将会是后续的纹理绘制范围。
3)  构造绘制纹理
将预处理生成的文件构造成OpenGL绘制的纹理,并按照切割顺序依次保存在列表中,此列表的顺序与步骤2)中的裁切矩形的顺序一致;
调用AssureTexture方法,传入构建的文件名,形成一个新的纹理;如果不存在进行影像的裁切,则直接使用原始文件名形成新纹理;建立一个新的QList,将所有形成的纹理都保存在列表中,以备后续的绘制使用;QList中存入的纹理与步骤2)中的裁切矩形是一一对应的,即一个确定了绘制范围,另一个确定了表面的纹理。
4)  绘制超大纹理
步骤2)和步骤3)同步构造了矩形和纹理,矩形确定了绘制的范围,纹理确定了表面的贴图,调用OpenGL绘制方法,在指定的矩形区域内将对应纹理绘制出来;依次遍历列表,即在表面上完整的绘制原始的图案。
从矩形列表中取出一个矩形,调用它的translate方法将其变换到左上角的位置;然后再从纹理列表中取出对应的纹理,调用drawTexture方法,传入刚刚变换得到的范围将纹理绘制出来;待循环结束,整个表面已经被完整的纹理所覆盖。
本发明对于单幅尺寸超过显卡限制的纹理自动进行处理,可以突破限制在平面上完整的绘制超大纹理。
附图说明
图1是本发明的流程图。
具体实施方式
一种OpenGL超大纹理的处理和绘制方法,包括以下步骤:
1)  超大纹理预处理。
由于显卡的物理限制无法直接突破,因此需要对纹理进行绘制前的预处理。首先读入纹理,获得纹理自身的尺寸,与预设的长宽值比较确定是否要进行预处理。如果超过了预设值,则按预设的大小对原始文件进行裁切,裁切后的影像按原始文件名加左上角坐标值的复合形式命名。检查本地是否有此文件存在,如果有则不作处理;如果没有则进行裁切,并将裁切后的影像存储在本地,以备后续建立纹理使用。 
2)  确定纹理在平面上的绘制区域。
在进行纹理预处理时,如果超过预设值则进行原始文件的分块裁切。由于裁切后的文件需要绘制到指定的区域,所以此时裁切使用的多边形位置信息就十分重要,它确定了对应纹理的绘制范围。 在确定切割矩形的过程中,使用列表将每个裁切矩形的信息记录下来,包含了切割矩形的位置信息和宽高信息。
3)  构造绘制纹理。
如果不经过1的预处理,完全在代码中生成分块纹理也是可行的,但考虑到程序的执行效率,在程序首次运行时进行预处理将原始文件分块切割,并保存在本地。此时将预处理生成的文件构造成OpenGL绘制的纹理,并按照切割顺序依次保存在列表中,此列表的顺序与2中的裁切矩形的顺序是一致的。
4)  绘制超大纹理
在具体绘制执行的时候,由于2、3中同步构造了矩形和纹理,矩形确定了绘制的范围,纹理确定了表面的贴图,所以在过程中调用OpenGL绘制方法,在指定的矩形区域内将对应纹理绘制出来。依次遍历列表,即可在表面上完整的绘制原始的图案。
下面结合附图和具体实施例对本发明的技术方案进一步详细阐述,以Qt OpenGL绘制大分辨率的界面背景实现为例。
步骤1:从本地加载待绘制的原始图像,构造QImage对象以获得原始图像的宽高信息。将原始图像的宽高信息与预定义的绘制矩形大小比较,如果大于预定值则需要进行预处理,进入步骤2,如果不大于则直接进入步骤5。
步骤2:通过原始图像的大小与预定义矩形的大小进行运算,确定需要裁切的矩形的行数和列数,然后通过循环依次构建用来裁切原始图像的裁切矩形,包含了裁切矩形的左上角点坐标以及矩形的宽高。
步骤3:为了将裁切的图像存到本地,需要一个不重复的文件名。将原始文件名与裁切矩形左上角点坐标信息相结合,形成一个新的文件名,作为待用的文件名。利用这个新的文件名检查输出目录是否存在同样名称的文件,如果存在则不再重复裁切文件;如果不存在进行影像的裁切。
步骤4:有了原始图像和裁切矩形后可以调用QImage的copy方法,将矩形内的图像拷贝到内存中,形成一个新的QImage对象。接着调用QImage的save方法,使用步骤3中构建的文件名将图像保存到本地。
步骤5:为了后续的纹理绘制,需要将步骤2中构建的裁切矩形位置信息保留下来。通过一个QList将所有构建的信息保存起来,这些矩形将会是后续的纹理绘制范围。
步骤6:调用AssureTexture方法,传入步骤3中构建的文件名,形成一个新的纹理,如果没有经过步骤3,则直接使用原始文件名形成新纹理。建立一个新的QList,将所有形成的纹理都保存在列表中,以备后续的绘制使用。此处QList中存入的纹理与步骤5中的裁切矩形是一一对应的,即一个确定了绘制范围,另一个确定了表面的纹理。
步骤7:进入绘制过程中,遍历两个列表。从矩形列表中取出一个矩形,调用它的translate方法将其变换到左上角的位置;然后再从纹理列表中取出对应的纹理,调用drawTexture方法,传入刚刚变换得到的范围将纹理绘制出来。待循环结束,整个表面已经被完整的纹理所覆盖。
后续的重绘和刷新只要持续调用步骤7,则可以保证表面有正确的纹理绘制。

Claims (5)

1.一种OpenGL超大纹理的处理和绘制方法,其特征在于该方法包括以下步骤:
1)超大纹理预处理
读入纹理,获得纹理自身的尺寸,与预设的长宽值比较,如果超过了预设值,则按预设的大小对原始文件进行裁切,裁切后的影像按原始文件名加左上角坐标值的复合形式命名;检查本地是否有此文件存在,如果有则不作处理;如果没有则进行裁切,并将裁切后的影像存储在本地,以备后续建立纹理使用;
2)确定纹理在平面上的绘制区域
在确定切割矩形的过程中,使用列表将每个裁切矩形的信息记录下来,包含了切割矩形的位置信息和宽高信息,确定对应纹理的绘制范围;
3)构造绘制纹理
将预处理生成的文件构造成OpenGL绘制的纹理,并按照切割顺序依次保存在列表中,此列表的顺序与步骤2)中的裁切矩形的顺序一致;
4)绘制超大纹理
步骤2)和步骤3)同步构造了矩形和纹理,矩形确定了绘制的范围,纹理确定了表面的贴图,调用OpenGL绘制方法,在指定的矩形区域内将对应纹理绘制出来;依次遍历列表,即在表面上完整的绘制原始的图案。
2.根据权利要求1所述的OpenGL超大纹理的处理和绘制方法,其特征在于:步骤1)中,超大纹理预处理具体如下:
11)从本地加载待绘制的原始图像,构造QImage对象以获得原始图像的宽高信息;将原始图像的宽高信息与预定义的绘制矩形大小比较,如果大于预定值则需要进行预处理,进入步骤12),如果不大于则直接进入步骤2);
12)通过原始图像的大小与预定义矩形的大小进行运算,确定需要裁切的矩形的行数和列数,然后通过循环依次构建用来裁切原始图像的裁切矩形,包含了裁切矩形的左上角点坐标以及矩形的宽高;
13)为了将裁切的图像存到本地,需要一个不重复的文件名,将原始文件名与裁切矩形左上角点坐标信息相结合,形成一个新的文件名,作为待用的文件名;利用这个新的文件名检查输出目录是否存在同样名称的文件,如果存在则不再重复裁切文件;如果不存在进行影像的裁切;
14)有了原始图像和裁切矩形后,调用QImage的copy方法,将矩形内的图像拷贝到内存中,形成一个新的QImage对象;接着调用QImage的save方法,使用步骤13)中构建的文件名将图像保存到本地。
3.根据权利要求1所述的OpenGL超大纹理的处理和绘制方法,其特征在于:步骤2)中,为了后续的纹理绘制,将构建的裁切矩形位置信息保留下来;通过一个QList将所有构建的信息保存起来,这些矩形将会是后续的纹理绘制范围。
4.根据权利要求1所述的OpenGL超大纹理的处理和绘制方法,其特征在于:步骤3)中,调用AssureTexture方法,传入构建的文件名,形成一个新的纹理;如果不存在进行影像的裁切,则直接使用原始文件名形成新纹理;建立一个新的QList,将所有形成的纹理都保存在列表中,以备后续的绘制使用;QList中存入的纹理与步骤2)中的裁切矩形是一一对应的,即一个确定了绘制范围,另一个确定了表面的纹理。
5.根据权利要求1所述的OpenGL超大纹理的处理和绘制方法,其特征在于:步骤4)中,从矩形列表中取出一个矩形,调用它的translate方法将其变换到左上角的位置;然后再从纹理列表中取出对应的纹理,调用drawTexture方法,传入刚刚变换得到的范围将纹理绘制出来;待循环结束,整个表面已经被完整的纹理所覆盖。
CN201510204692.6A 2015-04-27 2015-04-27 一种OpenGL超大纹理的处理和绘制方法 Pending CN104751494A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510204692.6A CN104751494A (zh) 2015-04-27 2015-04-27 一种OpenGL超大纹理的处理和绘制方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510204692.6A CN104751494A (zh) 2015-04-27 2015-04-27 一种OpenGL超大纹理的处理和绘制方法

Publications (1)

Publication Number Publication Date
CN104751494A true CN104751494A (zh) 2015-07-01

Family

ID=53591113

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510204692.6A Pending CN104751494A (zh) 2015-04-27 2015-04-27 一种OpenGL超大纹理的处理和绘制方法

Country Status (1)

Country Link
CN (1) CN104751494A (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107463777A (zh) * 2017-07-28 2017-12-12 彭志勇 智能胶片切割显示方法
CN107590194A (zh) * 2017-08-14 2018-01-16 彭志勇 超大图像的切割加载显示方法
CN108765534A (zh) * 2018-05-24 2018-11-06 武汉斗鱼网络科技有限公司 一种图像渲染方法、装置、设备及存储介质
WO2018201993A1 (zh) * 2017-05-02 2018-11-08 腾讯科技(深圳)有限公司 图像绘制方法、终端及存储介质
CN109064543A (zh) * 2018-08-30 2018-12-21 十维度(厦门)网络科技有限公司 一种图形纹理加载渲染方法
CN110874856A (zh) * 2019-11-12 2020-03-10 广州银汉科技有限公司 一种基于gpu特性的实时渲染gui的优化方法
CN110942478A (zh) * 2019-11-18 2020-03-31 中国航空工业集团公司西安航空计算技术研究所 一种基于SystemC的纹理完整性计算方法及计算单元
CN113256782A (zh) * 2021-07-06 2021-08-13 武汉幻城经纬科技有限公司 三维模型的生成方法、装置、存储介质、电子设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101493528A (zh) * 2009-03-13 2009-07-29 中国海洋石油总公司 海量地震三维可视化显示方法
CN101604453A (zh) * 2009-07-08 2009-12-16 西安电子科技大学 基于分块策略的大规模数据场体绘制方法
WO2013114560A1 (ja) * 2012-01-31 2013-08-08 三菱電機株式会社 地図データ作成装置、地図データ作成方法および記憶媒体
CN103308942A (zh) * 2012-03-12 2013-09-18 中国石油天然气股份有限公司 一种可视化地震数据的方法及系统
CN104407384A (zh) * 2014-12-08 2015-03-11 中国石油天然气集团公司 地震剖面显示的方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101493528A (zh) * 2009-03-13 2009-07-29 中国海洋石油总公司 海量地震三维可视化显示方法
CN101604453A (zh) * 2009-07-08 2009-12-16 西安电子科技大学 基于分块策略的大规模数据场体绘制方法
WO2013114560A1 (ja) * 2012-01-31 2013-08-08 三菱電機株式会社 地図データ作成装置、地図データ作成方法および記憶媒体
CN103308942A (zh) * 2012-03-12 2013-09-18 中国石油天然气股份有限公司 一种可视化地震数据的方法及系统
CN104407384A (zh) * 2014-12-08 2015-03-11 中国石油天然气集团公司 地震剖面显示的方法

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108805945B (zh) * 2017-05-02 2019-10-18 腾讯科技(深圳)有限公司 一种图像绘制方法及终端
WO2018201993A1 (zh) * 2017-05-02 2018-11-08 腾讯科技(深圳)有限公司 图像绘制方法、终端及存储介质
CN108805945A (zh) * 2017-05-02 2018-11-13 腾讯科技(深圳)有限公司 一种图像绘制方法及终端
CN107463777A (zh) * 2017-07-28 2017-12-12 彭志勇 智能胶片切割显示方法
CN107590194A (zh) * 2017-08-14 2018-01-16 彭志勇 超大图像的切割加载显示方法
CN108765534A (zh) * 2018-05-24 2018-11-06 武汉斗鱼网络科技有限公司 一种图像渲染方法、装置、设备及存储介质
CN108765534B (zh) * 2018-05-24 2022-06-21 武汉斗鱼网络科技有限公司 一种图像渲染方法、装置、设备及存储介质
CN109064543A (zh) * 2018-08-30 2018-12-21 十维度(厦门)网络科技有限公司 一种图形纹理加载渲染方法
CN110874856A (zh) * 2019-11-12 2020-03-10 广州银汉科技有限公司 一种基于gpu特性的实时渲染gui的优化方法
CN110942478A (zh) * 2019-11-18 2020-03-31 中国航空工业集团公司西安航空计算技术研究所 一种基于SystemC的纹理完整性计算方法及计算单元
CN110942478B (zh) * 2019-11-18 2023-09-19 中国航空工业集团公司西安航空计算技术研究所 一种基于SystemC的纹理完整性计算方法及计算单元
CN113256782A (zh) * 2021-07-06 2021-08-13 武汉幻城经纬科技有限公司 三维模型的生成方法、装置、存储介质、电子设备
CN113256782B (zh) * 2021-07-06 2021-10-01 武汉幻城经纬科技有限公司 三维模型的生成方法、装置、存储介质、电子设备

Similar Documents

Publication Publication Date Title
CN104751494A (zh) 一种OpenGL超大纹理的处理和绘制方法
KR102215766B1 (ko) 합성 화상을 생성하는 방법 및 장치
CN110990516B (zh) 地图数据的处理方法、装置和服务器
JP5340088B2 (ja) 情報処理方法及び装置
CN106611401B (zh) 一种在纹理内存中存储图像的方法及装置
CN102254312A (zh) 地理瓦片图拼接方法
US20150062171A1 (en) Method and device for providing a composition of multi image layers
US10186068B2 (en) Method, apparatus and system for rendering an image
CN106569805B (zh) 一种画布存储、图形绘制方法和设备
CN112785710A (zh) Osgb三维模型建筑物快速单体化方法、系统、存储器及设备
JP5706754B2 (ja) データ処理装置及びデータ処理方法
KR101810019B1 (ko) 애니메이션 데이터 생성 방법, 장치, 및 전자 기기
CN111161127B (zh) 图片资源渲染优化方法
CN111091188B (zh) 神经网络的前向计算方法、装置及计算机可读存储介质
US8982134B2 (en) Area-based dependency chain analysis of shaders and command stream
CN101477674A (zh) 利用显卡协助运算资料的方法
US9715715B2 (en) Efficient cache preloading
CN112817972A (zh) 数据存储方法、数据查询方法、装置及电子设备
EP3929871A1 (en) Picture processing method, picture set processing method, computer device, and storage medium
CN111951367B (zh) 一种字符渲染方法、字符处理方法及装置
CN116912395B (zh) 基于OpenGL的图形混合渲染方法、装置及存储介质
CN112037114A (zh) 图片处理方法及相关装置
CN115984090A (zh) 一种图片处理方法、装置、电子设备及存储介质
CN111062856B (zh) 一种优化的OpenGL图形属性排布方法
CN117392251B (zh) Mesa 3D图形库中ASTC格式的纹理数据的解码性能优化方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
WD01 Invention patent application deemed withdrawn after publication
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20150701