发明内容
本发明实施例的目的在于提供一种投影确定方法、装置及设备,以减少计算资源浪费。具体技术方案如下:
本发明实施的一方面,提供了一种投影确定方法,所述方法包括:
确定场景中包含的各个投影面;
按照以下方式确定投影物包含的每一像素点的投影点,进而获取所述投影物在投影面上的投影:
将各个投影面中高度最高的投影面确定为目标投影面;
计算像素点相对于所述目标投影面的投影点;
判断计算得到的投影点是否位于所述目标投影面在二维空间的区域内;
若为是,确定计算得到的投影点为像素点的投影点;
若为否,将所述目标投影面更新为投影面中下一高度的投影面,并返回所述计算像素点相对于所述目标投影面的投影点的步骤,直至遍历每一投影面。
可选的,所述确定场景中包含的各个投影面,包括:
获得场景中所有投影面;
将第一投影面合并为一个投影面,得到第二投影面,其中,所述第一投影面为:所获得投影面中高度差小于预设阈值的投影面;
将第二投影面和第三投影面确定为场景中包含的投影面,其中,所述第三投影面为:所获得投影面中除第一投影面以外的投影面。
可选的,所述目标投影面在二维空间的区域是:利用世界矩阵、视图矩阵、投影矩阵对所述场景所处的模型空间进行空间转换得到的区域。
可选的,在所述确定计算得到的投影点为像素点的投影点之后,还包括:
根据计算得到的投影点的在所述场景中的位置,获得所确定投影点的哈希值;
确定像素点在所述场景中的位置、所获得哈希值和所述目标投影面的标识形成的对应关系;
存储所述对应关系。
可选的,所述方法还包括:
按照以下方式调整投影物包含的每一像素点的投影点的像素值:
根据像素点在所述场景中的位置和所述对应关系获取第一哈希值和第一标识,其中,所述第一哈希值为:像素点的投影点的哈希值,所述第一标识为:像素点的投影点所在的投影面的标识;
根据所述第一标识确定第一投影面,其中,所述第一投影面为:像素点的投影点所在的投影面;
根据所述第一哈希值确定像素点的投影点在所述第一投影面上的位置;
利用像素点的像素值,调整在所确定位置处像素点的像素值。
本发明实施的又一方面,还提供了一种投影确定装置,所述装置包括:
第一确定模块,用于确定场景中包含的各个投影面;
第二确定模块,用于确定投影物包含的每一像素点的投影点,进而获取所述投影物在投影面上的投影;
其中,所述第二模块,包括:
第一确定子模块,用于将各个投影面中高度最高的投影面确定为目标投影面;
计算子模块,用于计算像素点相对于所述目标投影面的投影点;
判断子模块,用于判断计算得到的投影点是否位于所述目标投影面在二维空间的区域内,若为是,触发第二确定子模块,若为否,触发更新子模块;
所述第二确定子模块,用于确定计算得到的投影点为像素点的投影点;
所述更新子模块,用于将所述目标投影面更新为投影面中下一高度的投影面,并触发所述计算子模块,直至遍历每一投影面。
可选的,所述第一确定模块,包括:
获得子模块,用于获得场景中所有投影面;
得到子模块,用于将第一投影面合并为一个投影面,得到第二投影面,其中,所述第一投影面为:所获得投影面中高度差小于预设阈值的投影面;
第二确定子模块,用于将第二投影面和第三投影面确定为场景中包含的投影面,其中,所述第三投影面为:所获得投影面中除第一投影面以外的投影面。
可选的,所述目标投影面在二维空间的区域是:利用世界矩阵、视图矩阵、投影矩阵对所述场景所处的模型空间进行空间转换得到的区域。
可选的,所述装置还包括:
获得模块,用于根据计算得到的投影点的在所述场景中的位置,获得所确定投影点的哈希值;
第三确定模块,用于确定像素点在所述场景中的位置、所获得哈希值和所述目标投影面的标识形成的对应关系;
存储模块,用于存储所述对应关系。
可选的,所述装置还包括:
调整模块,用于调整投影物包含的每一像素点的投影点的像素值;
其中,所述调整模块,包括:
获取子模块,用于根据像素点在所述场景中的位置和所述对应关系获取第一哈希值和第一标识,其中,所述第一哈希值为:像素点的投影点的哈希值,所述第一标识为:像素点的投影点所在的投影面的标识;
第三确定子模块,用于根据所述第一标识确定第一投影面,其中,所述第一投影面为:像素点的投影点所在的投影面;
第四确定子模块,用于根据所述第一哈希值确定像素点的投影点在所述第一投影面上的位置;
调整子模块,用于利用像素点的像素值,调整在所确定位置处像素点的投影点的像素值。
本发明实施的又一方面,还提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现上述任一所述的投影确定方法。
本发明实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一所述的投影确定方法。
本发明实施例提供的一种投影确定方法、装置及设备,可以在确定投影物包含的每一像素点的投影点时,在场景中包含的各个投影面中将高度最高的投影面作为目标投影面,计算像素点相对于目标投影面的投影点,并判断计算得到的投影点是否位于目标投影面在二维空间的区域内,如果是,则将计算得到的投影点作为像素点的投影点,如果否,则以下一高度的投影面作为目标投影面,继续计算像素点相对于目标投影面的投影点,直至遍历完每一投影面。应用本发明实施例提供的技术方案,在确定投影物包含的每一像素点的投影点时,当在高度高的投影面上确定像素点的投影点后,则不再继续确定像素点在高度低的投影面上的投影点,也就是只在高度高的投影面上确定像素点的投影点,从而能减少计算资源浪费。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参照图2,示出了本发明实施例提供的一种投影确定方法的流程示意图,该方法包括:
S200,确定场景中包含的各个投影面。
上述场景可以是游戏中的场景,动画中的场景等。
投影面可以包括场景中的水面、镜面等。
当两个投影面之间的高度差小于一定数值时,可以将两个投影面看做一个投影面,因此,为了减少后续确定投影物包含的每一像素点的投影点过程的迭代次数,本发明实施例一种实现方式中,在获得场景中所有投影面之后,可以将所获得投影面中高度差小于预设阈值的第一投影面合并为一个投影面,得到第二投影面;然后将第二投影面和所获得投影面中除第一投影面以外的第三投影面确定为场景中包含的投影面。其中,由于三维空间是对现实场景按照真实距离的映射,也就是三维图像中1m代表实际长度的1m,因此,可以利用实际长度单位来衡量两个投影面之间的高度差,比如两个投影面之间的高度差为 2m,相应地,预设阈值可以为1m、2m等。
S210,确定投影物包含的每一像素点的投影点,进而获取投影物在投影面上的投影。
具体的,可以按照图3所示的方式确定投影物包含的每一像素点的投影点。
S301:将各个投影面中高度最高的投影面确定为目标投影面。
具体的,在场景绘制的过程中,通常会设置一坐标原点,以原点的位置为基准来确定场景中的各个物体的位置,因此,可以根据各个投影面相对于场景中原点的距离确定各个投影面的高度,将各个投影面中高度最高的投影面确定为目标投影面。
S302:计算像素点相对于目标投影面的投影点。
一种实现方式中,可以利用反射原理计算像素点相对于目标投影面的投影点。具体的,如图4所示反射原理示意图中,像素点与投影面之间垂直距离为B,投影点在像素点与投影面之间垂线的延长线上,并且投影点与投影面之间的距离C等于距离B。
S303:判断计算得到的投影点是否位于目标投影面在二维空间的区域内,若为是,执行S304,若为否,执行S305。
一种实现方式中,目标投影面在二维空间的区域是利用世界矩阵、视图矩阵、投影矩阵对场景所处的模型空间进行空间转换得到的区域。
S304:确定计算得到的投影点为像素点的投影点。
S305:将目标投影面更新为投影面中下一高度的投影面,并返回计算像素点相对于目标投影面的投影点的步骤,直至遍历每一投影面。
比如,场景中包括10个投影面,将投影面按照高度由高到低的顺序进行排序,最高的称为投影面1依次类推最低的称为投影面10,先将投影面1作为目标投影面计算像素点相对于目标投影面的投影点,然后判断计算得到的投影点是否位于目标投影面在二维空间的区域内,如果是,确定计算得到的投影点为像素点的投影点,如果否,将投影面2作为目标投影面计算像素点相对于目标投影面的投影点,直至遍历完这10个投影面。
为了方便存储,本发明实施例一种实现方式中,在确定计算得到的投影点为像素点的投影点之后,可以根据计算得到的投影点的在场景中的位置,获得所确定投影点的哈希值;确定像素点在场景中的位置、所获得哈希值和目标投影面的标识形成的对应关系并存储对应关系。
其中,计算得到的投影点的在场景中的位置可以为在场景所处的模型空间进行空间转换为二维空间中的坐标,也可以是场景所处的模型空间中的三维坐标。相应地,在根据计算得到的投影点的在场景中的位置,获得所确定投影点的哈希值的过程中可以利用计算得到的投影点的坐标进行哈希运算得到投影点的哈希值,通过将位置转换为哈希值的形式以方便存储。
具体的,可以通过一个贴图也就是通常所说的投影贴图来存储各个像素点在场景中的位置、各个像素点的投影点的哈希值和各个像素点的投影点所在的投影面的标识之间的对应关系,实际应用中,针对每个贴图均会执行一次绘制过程,并且在每一次绘制时都需要调用一次图像绘制函数,也就是一次drawcall 的过程,而每次drawcall会包括很多相同的准备工作,比如:检测渲染状态、提交渲染数据、提交渲染状态等。因而如果多次drawcall则需要很多额外的计算资源用于进行相同的准备工作,基于此,本发明实施例提供的方案通过利用一个贴图执行一次drawcall即可实现将投影物投影到各个投影面上,从而减少计算资源。
一种实现方式中,可以按照以下方式调整投影物包含的每一像素点的投影点的像素值,以实现在投影面上投影该投影物:
根据像素点在场景中的位置在对应关系中查找第一哈希值和第一标识,其中,第一哈希值为:像素点的投影点的哈希值,第一标识为:像素点的投影点所在的投影面的标识;
然后,根据第一标识确定第一投影面,其中,第一投影面为:像素点的投影点所在的投影面;
接着,根据第一哈希值进行逆运算确定像素点的投影点在第一投影面上的位置;
最后,利用像素点的像素值,调整在所确定位置处像素点的投影点的像素值。
本发明实施例提供的各个方案中,投影确定方法可以在确定投影物包含的每一像素点的投影点时,当在高度高的投影面上确定像素点的投影点后,则不在继续确定像素点在高度低的投影面上的投影点,也就是只在高度高的投影面上确定像素点的投影点,从而能减少计算资源浪费。
参照图5,示出了本发明实施例提供的一种投影确定装置的结构示意图,该装置包括:
第一确定模块500,用于确定场景中包含的各个投影面;
第二确定模块510,用于确定投影物包含的每一像素点的投影点,进而获取所述投影物在投影面上的投影;
其中,所述第二模块,包括:
第一确定子模块,用于将各个投影面中高度最高的投影面确定为目标投影面;
计算子模块,用于计算像素点相对于所述目标投影面的投影点;
判断子模块,用于判断计算得到的投影点是否位于所述目标投影面在二维空间的区域内,
若为是,触发第二确定子模块,若为否,触发更新子模块;
所述第二确定子模块,用于确定计算得到的投影点为像素点的投影点;
所述更新子模块,用于将所述目标投影面更新为投影面中下一高度的投影面,并触发所述计算子模块,直至遍历每一投影面。
本发明实施例一种实现方式中,所述第一确定模块500,包括:
获得子模块,用于获得场景中所有投影面;
得到子模块,用于将第一投影面合并为一个投影面,得到第二投影面,其中,所述第一投影面为:所获得投影面中高度差小于预设阈值的投影面;
第二确定子模块,用于将第二投影面和第三投影面确定为场景中包含的投影面,其中,所述第三投影面为:所获得投影面中除第一投影面以外的投影面。
本发明实施例一种实现方式中,所述目标投影面在二维空间的区域是:利用世界矩阵、视图矩阵、投影矩阵对所述场景所处的模型空间进行空间转换得到的区域。
本发明实施例一种实现方式中,所述装置还包括:
获得模块,用于根据计算得到的投影点的在所述场景中的位置,获得所确定投影点的哈希值;
第三确定模块,用于确定像素点在所述场景中的位置、所获得哈希值和所述目标投影面的标识形成的对应关系;
存储模块,用于存储所述对应关系。
本发明实施例一种实现方式中,所述装置还包括:
调整模块,用于调整投影物包含的每一像素点的投影点的像素值;
其中,所述调整模块,包括:
获取子模块,用于根据像素点在所述场景中的位置和所述对应关系获取第一哈希值和第一标识,其中,所述第一哈希值为:像素点的投影点的哈希值,所述第一标识为:像素点的投影点所在的投影面的标识;
第三确定子模块,用于根据所述第一标识确定第一投影面,其中,所述第一投影面为:像素点的投影点所在的投影面;
第四确定子模块,用于根据所述第一哈希值确定像素点的投影点在所述第一投影面上的位置;
调整子模块,用于利用像素点的像素值,调整在所确定位置处像素点的投影点的像素值。
本发明实施例提供的各个方案中,投影确定设备可以在确定投影物包含的每一像素点的投影点时,当在高度高的投影面上确定像素点的投影点后,则不在继续确定像素点在高度低的投影面上的投影点,也就是只在高度高的投影面上确定像素点的投影点,从而能减少计算资源浪费。
本发明实施例还提供了一种电子设备,如图6所示,包括处理器001、通信接口002、存储器003和通信总线004,其中,处理器001,通信接口002,存储器003通过通信总线004完成相互间的通信,
存储器003,用于存放计算机程序;
处理器001,用于执行存储器003上所存放的程序时,实现本发明实施例提供的投影确定方法。
具体的,上述投影确定方法包括:
确定场景中包含的各个投影面;
按照以下方式确定投影物包含的每一像素点的投影点,进而获取所述投影物在投影面上的投影:
将各个投影面中高度最高的投影面确定为目标投影面;
计算像素点相对于所述目标投影面的投影点;
判断计算得到的投影点是否位于所述目标投影面在二维空间的区域内;
若为是,确定计算得到的投影点为像素点的投影点;
若为否,将所述目标投影面更新为投影面中下一高度的投影面,并返回所述计算像素点相对于所述目标投影面的投影点的步骤,直至遍历每一投影面。
需要说明的是,上述处理器001执行存储器003上所存放的程序实现投影确定方法的其他实施例,与前述方法实施例部分提供的实施例相同,这里不再赘述。
本发明实施例提供的各个方案中,电子设备可以在确定投影物包含的每一像素点的投影点时,当在高度高的投影面上确定像素点的投影点后,则不在继续确定像素点在高度低的投影面上的投影点,也就是只在高度高的投影面上确定像素点的投影点,从而能减少计算资源浪费。
上述电子设备提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessing,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array, FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,实现本发明实施例提供的投影确定方法。
具体的,上述投影确定方法包括:
确定场景中包含的各个投影面;
按照以下方式确定投影物包含的每一像素点的投影点,进而获取所述投影物在投影面上的投影:
将各个投影面中高度最高的投影面确定为目标投影面;
计算像素点相对于所述目标投影面的投影点;
判断计算得到的投影点是否位于所述目标投影面在二维空间的区域内;
若为是,确定计算得到的投影点为像素点的投影点;
若为否,将所述目标投影面更新为投影面中下一高度的投影面,并返回所述计算像素点相对于所述目标投影面的投影点的步骤,直至遍历每一投影面。
需要说明的是,通过上述计算机可读存储介质实现投影确定方法的其他实施例,与前述方法实施例部分提供的实施例相同,这里不再赘述。
本发明实施例提供的各个方案中,通过运行上述计算机可读存储介质中存储的指令,可以在确定投影物包含的每一像素点的投影点时,当在高度高的投影面上确定像素点的投影点后,则不在继续确定像素点在高度低的投影面上的投影点,也就是只在高度高的投影面上确定像素点的投影点,从而能减少计算资源浪费。
在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,实现本发明实施例提供的投影确定方法。
具体的,上述投影确定方法包括:
确定场景中包含的各个投影面;
按照以下方式确定投影物包含的每一像素点的投影点,进而获取所述投影物在投影面上的投影:
将各个投影面中高度最高的投影面确定为目标投影面;
计算像素点相对于所述目标投影面的投影点;
判断计算得到的投影点是否位于所述目标投影面在二维空间的区域内;
若为是,确定计算得到的投影点为像素点的投影点;
若为否,将所述目标投影面更新为投影面中下一高度的投影面,并返回所述计算像素点相对于所述目标投影面的投影点的步骤,直至遍历每一投影面。
需要说明的是,通过上述计算机程序产品实现投影确定方法的其他实施例,与前述方法实施例部提供的实施例相同,这里不再赘述。
本发明实施例提供的各个方案中,通过运行上述包含指令的计算机程序产品,可以在确定投影物包含的每一像素点的投影点时,当在高度高的投影面上确定像素点的投影点后,则不在继续确定像素点在高度低的投影面上的投影点,也就是只在高度高的投影面上确定像素点的投影点,从而能减少计算资源浪费。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、电子设备、计算机可读存储介质和计算机程序产品实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。