CN104751494A - 一种OpenGL超大纹理的处理和绘制方法 - Google Patents
一种OpenGL超大纹理的处理和绘制方法 Download PDFInfo
- 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
Links
Landscapes
- Processing Or Creating Images (AREA)
Abstract
本发明公开了一种OpenGL超大纹理的处理和绘制方法,包括以下步骤:超大纹理预处理,则按预设的大小对原始文件进行裁切,并将裁切后的影像存储在本地; 确定纹理在平面上的绘制区域,使用列表将每个裁切矩形的信息记录下来;构造绘制纹理,将预处理生成的文件构造成OpenGL绘制的纹理,并按照切割顺序依次保存在列表中;绘制超大纹理,矩形确定了绘制的范围,纹理确定了表面的贴图,在指定的矩形区域内将对应纹理绘制出来。本发明对于单幅尺寸超过显卡限制的纹理自动进行处理,可以突破限制在平面上完整的绘制超大纹理。
Description
技术领域
本发明涉及一种超大纹理的处理和绘制方法,具体地说是一种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方法,传入刚刚变换得到的范围将纹理绘制出来;待循环结束,整个表面已经被完整的纹理所覆盖。
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)
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)
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 | 中国石油天然气集团公司 | 地震剖面显示的方法 |
-
2015
- 2015-04-27 CN CN201510204692.6A patent/CN104751494A/zh active Pending
Patent Citations (5)
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)
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 |