一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于ARM指令集CPU实现三维渲染的方法与流程

2022-11-19 10:59:01 来源:中国专利 TAG:

一种基于arm指令集cpu实现三维渲染的方法
技术领域
1.本发明涉及计算机技术领域,尤其涉及一种基于arm指令集cpu实现三维渲染的方法。


背景技术:

2.随着科技的发展,现今的三维动画可以通过计算机生成,从制作方式到观念,都产生了革命性的变化;三维动画不仅摆脱了繁重的手工制作,并以其简便、高效、更具表现力的特点得到越来越广泛的应用;其中,三维动画更是动画业的骄傲;它主要依靠电脑图像技术,在虚拟的三维空间中,建造模型,设置色彩与材质,模拟真实灯光,并使这些物体在三维空间中动起来,通过虚拟摄像机设定拍摄整个运动过程,渲染和生成视觉真实的三维画面;与二维动画相比大大减少了重复劳动;画面效果不仅真实、生动,更能展现现实所无法模拟的魔幻场面,深受观众的喜爱,所带来的经济效益也是非常巨大的;然而目前国产arm指令集cpu无法满足三维场景渲染效果,易出现卡顿,黑屏,死机现象的问题;因此,使三维应用软件成功的运行在国产cpu下的需求便应运而生;
3.因此,亟需发明一种基于arm指令集cpu实现三维渲染的方法以解决上述问题。


技术实现要素:

4.本发明的目的是为了解决现有技术中存在的缺陷,而提出的一种基于arm指令集cpu实现三维渲染的方法。
5.为了实现上述目的,本发明采用了如下技术方案:
6.一种基于arm指令集cpu实现三维渲染的方法,包括如下步骤:
7.步骤1:安装cpu和gpu,并在自主研发os3通用操作系统中安装自主研发i3d三维交互式应用引擎的扩展程序;
8.步骤2:通过所述cpu获取图像处理需求的arm指令集,并通过os3通用操作系统启动所述i3d三维交互式应用引擎,利用所述i3d三维交互式应用引擎对opengl es图形应用编程接口进行调用,将所述arm指令集转化为opengl指令集;
9.步骤3:根据所述opengl指令集驱动所述gpu;
10.步骤4:将所述cpu结合所述gpu进行图形渲染,以运用光栅化方法实现对三维空间的渲染,以获取渲染结果;
11.步骤5:通过所述自主研发os3通用操作系统接收并展示通过所述光栅化方法实现的渲染结果。
12.进一步地,所述cpu具体为国产飞腾cpu腾锐d2000/8core,其采用arm架构;所述gpu具体为至少8gb以上的独立显卡。
13.进一步地,所述opengl es图形应用编程接口同时兼容opengl es2.0和opengl es3.0。
14.进一步地,所述根据所述opengl指令集驱动所述gpu,包括:
15.将主存的处理数据复制到显存中;
16.cpu指令驱动gpu;
17.gpu中的每个运算单元并行处理;
18.gpu将处理后的显存结果传回主存。
19.进一步地,所述cpu结合所述gpu进行图形渲染,基于六个阶段实现,其分别为顶点着色器、形状装配、几何着色器、光栅化、片段着色器和测试与混合。
20.进一步地,所述光栅化,即运用光栅化方法实现对三维空间的渲染,包括:
21.三角形设置,获取整个三角网格对像素的覆盖情况,并计算所述三角形网格表示数据;
22.三角形遍历,检查判断每个像素是否被一个三角网格所覆盖,若被覆盖,则生成一个片元;
23.片元着色器,处理由光栅化阶段生成的每个片元,最终计算出每个像素的最终颜色;
24.逐片元操作,所述逐片元操作,包括:
25.决定每个所述片元的可见性,以进行深度测试和模板测试;
26.对通过测试的每个所述片元的颜色值和已经存储在颜色缓冲区的颜色进行混合合并。
27.相比于现有技术,本发明的有益效果在于:
28.(1)本技术采用risc架构的arm处理器,其固定长度的指令格式,指令归整、简单、基本寻址方式有2~3种;使用单周期指令,便于流水线操作执行;且其大量使用寄存器,数据处理指令只对寄存器进行操作,只有加载/存储指令可以访问存储器,以提高指令的执行效率,此外其arm指令为32位的长度,thumb指令为16位长度;thumb指令集为arm指令集的功能子集,但与等价的arm代码相比较,可节省30%~40%以上的存储空间,同时具备32位代码的所有优点;arm体系结构在保证高性能的前提下尽量缩小芯片的面积,并降低功耗;所有的arm指令都可根据前面的执行结果决定是否被执行,从而提高指令的执行效率;可用加载/存储指令批量传输数据,以提高数据的传输效率;可在一条数据处理指令中同时完成逻辑处理和移位处理。
29.(2)本技术基于arm架构下自主研发的os3通用操作系统,使用国产飞腾cpu硬件芯片,同时通过对自主研发的i3d三维交互式应用引擎的优化,突破arm指令集cpu下显卡性能到8gb显存以上,保障了大型三维场景实时渲染的可能性,流畅性和高性能输出;且解决了普通arm指令集下的cpu无法满足三维场景渲染效果,出现卡顿,黑屏,死机现象的问题;此外,通过研发国产飞腾cpu 8gb独立显卡的图形工作站,搭载自主研发的os3通用操作系统,完美的运行i3d三维交互式应用引擎的过程,弥补了国产操作系统架构上无法使用三维应用软件的空白。
附图说明
30.附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。
31.图1为本发明提出的一种基于arm指令集cpu实现三维渲染的方法的整体架构示意
图;
32.图2为本发明提出的一种基于arm指令集cpu实现三维渲染的方法中cpu gpu os3 i3d的结构示意图;
33.图3为本发明实施例中arm线程模式工作原理的示意图;
34.图4为本发明实施例中cpu-gpu的工作流程示意图;
35.图5为本发明实施例中cpu结合gpu进行图形渲染的流程图;
36.图6为本发明实施例中运用光栅化方法的流程图。
具体实施方式
37.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。
38.在本发明的描述中,需要理解的是,术语“上”、“下”、“前”、“后”、“左”、“右”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
39.参照图1-2,本实施例公开了一种基于arm指令集cpu实现三维渲染的方法,包括如下步骤:
40.步骤1:安装cpu和gpu,并在自主研发os3通用操作系统中安装自主研发i3d三维交互式应用引擎的扩展程序;
41.具体的,所述cpu具体为国产飞腾cpu腾锐d2000/8core,其采用arm架构;所述gpu具体为至少8gb以上的独立显卡;
42.在这需要说明的是:如图3显示的arm线程模式工作原理图,arm架构相较复杂指令集cisc而言,以risc为架构体系的arm指令集的指令格式统一、种类少、寻址方式少,简单的指令意味着相应硬件线路可以尽量做到最佳化,从而提高执行速率;arm架构的优势是体积小、低功耗、低成本、高性能,支持thumb(16位)/arm(32位)双指令集,能很好的兼容8位/16位器件,大量使用寄存器,并且大多数数据操作都在寄存器中完成,指令执行速度更快,寻址方式灵活简单,执行效率高,指令长度固定,可以通过多流水线方式提高处理效率;因此,我们提出的一种基于arm指令集cpu实现三维渲染的方法,能够有效提高渲染的处理效率。
43.步骤2:通过所述cpu获取图像处理需求的arm指令集,并通过os3通用操作系统启动所述i3d三维交互式应用引擎,利用所述i3d三维交互式应用引擎对opengl es图形应用编程接口进行调用,将所述arm指令集转化为opengl指令集;
44.具体的,所述opengl es图形应用编程接口同时兼容opengl es2.0和opengl es3.0。
45.步骤3:根据所述opengl指令集驱动所述gpu;
46.具体的,如图4所述示,所述根据所述opengl指令集驱动所述gpu,包括:
47.将主存的处理数据复制到显存中;
48.cpu指令驱动gpu;
49.gpu中的每个运算单元并行处理;
50.gpu将处理后的显存结果传回主存。
51.步骤4:将所述cpu结合所述gpu进行图形渲染,以运用光栅化方法实现对三维空间的渲染,以获取渲染结果;
52.在一个实施例中,如图5所示,所述cpu结合所述gpu进行图形渲染,基于六个阶段实现,包括:
53.第一阶段是顶点着色器,该阶段的输入是顶点数据,例如,以数组的形式传递三个三维坐标以表示三角形,顶点数据是一组顶点;顶点着色器的主要目的是将三维坐标转换为另一种三维坐标,顶点着色器可以对顶点属性执行一些基本处理;
54.第二阶段是形状(元素)装配,在此阶段,顶点着色器输出的所有顶点都用作输入,所有点都组装成指定实体的形状,图中是一个三角形;基本体用于表示如何渲染顶点数据,例如点、线和三角形。
55.第三个阶段是几何体着色器,在这一阶段中,以基本体形式的一系列顶点集作为输入,它可以通过生成新的顶点来生成其他形状,从而生成新的(或其他)基本体,在本例中,它生成了另一个三角形;
56.第四阶段是光栅化,在此阶段,图元将映射到最终屏幕上的相应像素以生成片段,片段是渲染像素所需的所有数据;
57.第五阶段是片段着色器,在此阶段,将首先剪裁输入剪辑,裁剪会丢弃视图之外的所有像素,以提高执行效率;
58.第六阶段是测试和混合,该阶段将检测段的相应深度值(z坐标),判断该像素是在其他对象之前还是之后,并决定是否应丢弃该像素,此外,该阶段还检查alpha值(定义对象的透明度),以便混合对象,因此,即使在片段着色器中计算像素的输出颜色,在渲染多个三角形时,最终像素颜色也可能完全不同。
59.在一个实施例中,如图6所示,所述光栅化,即运用光栅化方法实现对三维空间的渲染,包括:
60.三角形设置:
61.屏幕映射是几何阶段的最后一个环节,会把相关的数据数值传送给光栅化的第一个阶段:三角形设置,从上一个阶段输出的信息是屏幕坐标系下的顶点的位置以及和他们相关的额外信息如:深度值,法线方向,视角方向等,光栅化阶段有两个最重要的目标:计算每个图元覆盖了哪些像素,以及为这些像素计算他们的颜色;
62.三角形设置这个阶段会计算光栅化一个三角网格所需的信息;具体来说,上一个阶段输出的都是三角网格的顶点,即我们得到的是三角网格每条边的两个端点;但是如果要得到整个三角网格对像素的覆盖情况,我们就必须计算每条边上的像素坐标,为了能够计算边界像素坐标信息,我们就需要得到三角形边界的表示方式,这样一个计算三角形网格表示数据的过程就叫做三角形设置;
63.三角形遍历:
64.三角形遍历阶段会检查每个像素是否被一个三角网格所覆盖。如果被覆盖的话,就会生成一个片元;而这样一个找到哪些被像素被三角网格覆盖的过程就是三角形遍历,也叫做扫描变化;三角形遍历阶段会根据上一个阶段的计算结果来判断一个三角网格覆盖了哪些像素,并使用三角网格3个顶点的顶点信息对整个覆盖区域的像素进行插值,如下图三角形遍历阶段展示;
65.这一步的输出就是得到一个片元序列,需要注意的是一个片元序列并不是真正意义上的像素,而是包含了很多状态集合,这些状态用于计算每个像素的最终颜色,这些状态包括但不限于它的屏幕坐标,深度信息,以及他从几何阶段输出的顶点信息,如法线,纹理坐标de等;
66.片元着色器:
67.片元着色器在directx中也被称作像素着色器,但是片元着色器更合适,因为此时的片元并不是一个真正意义上的像素;前面的光栅化阶段实际上并不会影响屏幕上每个像素的颜色值,而是会产生一系列的数据信息,用来表述一个三角形网格是怎样覆盖每个像素的;而每个片元就负责存储这样一系列数据;真正会对像素产生影响的阶段是下一个流水线阶段——逐片元操作;片元着色器的输入是上一个阶段对顶点信息差值得到的结果,更具体地说是根据那些从顶点着色器中输出的数据差值得到的;而它输出的是一个或多个颜色值如图5:
68.虽然片元做色器可以完成很多重要效果,但他的局限性在于,它仅可以影响单个片元,也就是说当执行片元着色器时,它不可以将自己的任何结果直接发送给相邻片元,有一种情况例外就是片元着色器可以访问到导数信息(gradient,or derivative);
69.逐片元操作:
70.这个阶段负责执行很多重要操作,例如修改颜色,深度缓冲,进行混合,他是不可编程的但是有很高的可配置性,逐片元操作是opengl中的说法,在directx中这一阶段被称作输出合并阶段,这一阶段由几个主要任务;
71.决定每个片元的可见性,这涉及很多测试工作,深度测试,模板测试等;
72.如果一个片元着色器通过了所有测试,就需要把这个片元的颜色值和已经存储在颜色缓冲区的颜色进行混合或者说合并。
73.步骤5:通过所述自主研发os3通用操作系统接收并展示通过所述光栅化方法实现的渲染结果。
74.以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献