CN109544433A - 水印嵌入方法、装置、终端及存储介质 - Google Patents
水印嵌入方法、装置、终端及存储介质 Download PDFInfo
- Publication number
- CN109544433A CN109544433A CN201811198415.9A CN201811198415A CN109544433A CN 109544433 A CN109544433 A CN 109544433A CN 201811198415 A CN201811198415 A CN 201811198415A CN 109544433 A CN109544433 A CN 109544433A
- Authority
- CN
- China
- Prior art keywords
- data
- index
- dimensional
- target
- vertex
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/0021—Image watermarking
- G06T1/0028—Adaptive watermarking, e.g. Human Visual System [HVS]-based watermarking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/0021—Image watermarking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T19/00—Manipulating 3D models or images for computer graphics
- G06T19/20—Editing of 3D images, e.g. changing shapes or colours, aligning objects or positioning parts
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/04—Indexing scheme for image data processing or generation, in general involving 3D image data
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Graphics (AREA)
- Software Systems (AREA)
- Geometry (AREA)
- Architecture (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Image Processing (AREA)
- Editing Of Facsimile Originals (AREA)
Abstract
本申请提供了一种水印嵌入方法、装置、终端及存储介质,属于信息技术领域。本申请提供一种适用于3D领域的水印嵌入方法,通过合并原始三维模型以及三维水印的顶点数据,合并原始三维模型以及三维水印的材质数据,可以将原始三维模型以及三维水印合成为一个三维模型,从而实现将三维水印无缝嵌入到原始三维模型的效果,同时嵌入水印前后,原始三维模型的外观能够保持不变,从而避免水印的嵌入对三维模型的外观以及使用价值造成的影响,保证三维模型的显示效果。进一步地,可以实现加密嵌入三维水印的功能,无法轻易地去除或修改三维水印,有效的保证三维模型的版权,从而更好地推广三维模型这种数字资产。
Description
技术领域
本申请涉及信息技术领域,特别涉及一种水印嵌入方法、装置、终端及存储介质。
背景技术
随着信息技术的发展,可以采用嵌入水印的方式,将制作者、版权所有者等信息作为水印,按照一定规则嵌入到图像、视频、文档等数字载体中,以使数字载体携带水印,该水印可以供用户识别和辨认,从而保护数字载体的版权,并且不影响数字载体本身的使用价值。
对于数字载体为图像的情况,可以采用拼布(英文:Patchwork)算法,向原始二维图像嵌入二维水印。具体来说,会从原始二维图像中随机选择出像素点A以及像素点B,将像素点A的亮度值ai增加d,将像素点B的亮度值bi减少d。之后重复执行上述步骤N次,当N很大时,原始二维图像会被修改,从而达到嵌入水印的效果。
上述方法仅适用于二维图像中,而目前亟需提供一种适用于为三维模型嵌入水印的方案。
发明内容
本申请实施例提供了一种水印嵌入方法、装置、终端及存储介质。所述技术方案如下:
第一方面,提供了一种水印嵌入方法,所述方法包括:
获取原始三维模型以及三维水印;
对所述原始三维模型的第一顶点数据以及所述三维水印的第二顶点数据进行合并,得到目标顶点数据,所述目标顶点数据包括所述第一顶点数据以及所述第二顶点数据;
对所述原始三维模型的第一材质数据以及所述三维水印的第二材质数据进行合并,得到目标材质数据,所述目标材质数据包括所述第一材质数据以及所述第二材质数据;
根据所述目标顶点数据以及所述目标材质数据,生成目标三维模型,所述目标三维模型包括所述原始三维模型以及所述三维水印。
本实施例提供的方法,提供了一种适用于3D领域的水印嵌入方法,提供一种适用于3D领域的水印嵌入方法,通过合并原始三维模型以及三维水印的顶点数据,合并原始三维模型以及三维水印的材质数据,可以将原始三维模型以及三维水印合成为一个三维模型,从而实现将三维水印无缝嵌入到原始三维模型的效果,同时嵌入水印前后,原始三维模型的外观能够保持不变,从而避免水印的嵌入对三维模型的外观以及使用价值造成的影响,保证三维模型的显示效果。
可选地,所述对所述原始三维模型的第一顶点数据以及所述三维水印的第二顶点数据进行合并,包括:
将所述三维水印的第二顶点数据插入至所述原始三维模型的第一顶点数据中。
基于这种方式,达到的效果至少可以包括:
通过将第二顶点数据插入至原始三维模型的第一顶点数据,一方面,可以实现对原始三维模型的顶点数据以及水印模型的顶点数据进行合并的功能,后续根据目标顶点数据生成目标三维模型时,目标三维模型会包含原始三维模型中每个顶点,因此可以保证在显示目标三维模型时,可以同时显示完整的原始三维模型,从而保证原始三维模型外观完整,不至由于顶点数据的丢失而影响到原始三维模型的外观。另一方面,无需改变原始三维模型的顶点数据,不至由于顶点数据的改变而影响到原始三维模型的外观,也就避免了水印的嵌入对原始三维模型的外观造成的影响,从而避免了水印的嵌入对原始三维模型本身的使用价值造成损失,保证原始三维模型的显示效果。再一方面,无需修改三维水印本身的顶点数据,从而保证三维水印在嵌入到三维模型前后,外观能够保持一致,不至由于顶点数据的改变而影响到三维水印的外观。也即是,可以实现将三维水印无缝嵌入到原始三维模型的效果。
可选地,所述将所述三维水印的第二顶点数据插入至所述原始三维模型的第一顶点数据中,包括:
将所述三维水印的第二顶点数据随机插入至所述原始三维模型的第一顶点数据中。
可选地,所述将所述三维水印的第二顶点数据随机插入至所述原始三维模型的第一顶点数据中,包括:
从所述原始三维模型的第一数组中,随机选取两个相邻位置,所述第一数组中的每个位置用于存储所述第一顶点数据中的每个数据;
从所述三维水印的第二数组中,读取所述第二顶点数据中的任一数据,所述第二数组中的每个位置用于存储所述第二顶点数据中的每个数据;
将所述数据插入至所述两个相邻位置之间。
通过随机插入三维水印的顶点的数据,达到的效果至少可以包括:
首先,通过将三维水印的第二数组中的数据插入到原始三维模型的第一数组中,可以达到将第一数组和第二数组合并的功能,也就达到了将第一顶点数据和第二顶点数据合并的功能。以插入数据后的第一数组称为第一目标数组为例,由于第一目标数组中既存储了原始三维模型的顶点的数据,也存储了三维水印的顶点的数据,后续基于第一目标数组显示目标三维模型时,既可以显示出原始三维模型的顶点,也可以显示出三维水印的顶点,从而呈现嵌入了三维水印的原始三维模型的显示效果。其次,三维水印中每个顶点的数据在目标顶点数据中的位置具有随机性,因此,无法轻易从目标三维模型中去除或修改三维水印。并且,一旦从目标三维模型中去除或修改三维水印失败,会导致目标三维模型中不同顶点的数据相互错位,导致目标三维模型的数据混乱,也就导致目标三维模型无法正常显示,因此能够防止从目标三维模型中去除三维水印或修改三维水印。综上所述,可以实现加密嵌入三维水印的功能,有效的保证原始三维模型的版权,从而更好地推广三维模型这种数字资产。
可选地,所述对所述原始三维模型的第一顶点数据以及所述三维水印的第二顶点数据进行合并之后,所述方法还包括:
根据所述目标顶点数据、所述第一顶点数据对应的第一索引数据以及所述第二顶点数据对应的第二索引数据,生成所述目标顶点数据对应的第一目标索引数据;
其中,所述第一目标索引数据中任一第一目标索引指向的数据,与所述第一索引数据中对应的第一索引指向的数据相同,或者与所述第二索引数据中对应的第二索引指向的数据相同。
当第一目标索引数据中任一第一目标索引指向的数据,与该第一索引数据中对应的第一索引指向的数据相同时,达到的效果至少可以包括:由于第一目标索引数据中的第一目标索引指向的数据与第一索引数据中对应的第一索引指向的数据相同,那么后续生成目标三维模型后,在根据第一目标索引数据显示目标三维模型时,通过第一目标索引查询到的数据,会与通过对应的第一索引查询到的数据相同,则根据该第一目标索引查询到的数据进行绘制时,会与根据该第一索引查询到的数据进行绘制时,绘制效果会一致,则显示效果也会一致,那么目标三维模型中的原始三维模型的外观也就可以和原始三维模型本身的外观保持一致,从而避免影响原始三维模型的视觉效果,避免原始三维模型由于水印的嵌入而破坏原有的使用价值。
当第一目标索引数据中的索引指向的数据与第二索引数据中对应索引指向的数据相同时,达到的效果至少可以包括:由于第一目标索引数据中的第一目标索引指向的数据与第二索引数据中对应的第二索引指向的数据相同,通过第一目标索引查找到的数据,会与通过第二索引查找到的数据相同。那么生成的目标三维模型在实现嵌入三维水印的功能的基础上,避免了对三维水印的顶点数据的修改,那么目标三维模型中的顶点的数据可以和三维水印中顶点的数据保持一致,目标三维模型中的三维水印的外观也就可以和三维水印本身的外观保持一致,从而避免影响三维水印的视觉效果,避免三维水印由于水印的嵌入而破坏原有的使用价值。
可选地,所述根据所述目标顶点数据、所述第一顶点数据对应的第一索引数据以及所述第二顶点数据对应的第二索引数据,生成所述目标顶点数据对应的第一目标索引数据,包括:
对所述第一索引数据以及所述第二索引数据进行合并,得到第一候选目标索引数据,所述第一候选目标索引数据包括所述第一索引数据以及所述第二索引数据;
根据所述目标顶点数据,对所述第一候选目标索引数据进行更新,得到所述第一目标索引数据。
可选地,所述根据所述目标顶点数据,对所述第一候选目标索引数据进行更新,包括:
对于所述第一索引数据中的任一第一索引,根据所述第一索引指向的数据,获取所述数据在所述目标顶点数据中的第一位置;将所述第一候选目标索引数据中所述第一索引对应的第一候选索引更新为标识所述第一位置的索引;或者,
对于所述第二索引数据中的任一第二索引,根据所述第二索引指向的数据,获取所述数据在所述目标顶点数据中的第二位置;将所述第一候选目标索引数据中所述第二索引对应的第一候选索引更新为标识所述第二位置的索引。
可选地,所述对所述原始三维模型的第一材质数据以及所述三维水印的第二材质数据进行合并,包括:
将所述三维水印的第二材质数据插入至所述原始三维模型的第一材质数据中。
基于这种方式,达到的效果至少可以包括:
通过将第二材质数据插入至原始三维模型的第一材质数据,一方面,可以实现对原始三维模型的材质数据以及水印模型的材质数据进行合并的功能,后续根据目标材质数据生成目标三维模型时,目标三维模型会包含原始三维模型中每种材质,因此可以保证在显示目标三维模型时,可以同时显示完整的原始三维模型,从而保证原始三维模型外观完整,不至由于材质数据的丢失而影响到原始三维模型的外观。另一方面,无需改变原始三维模型的材质数据,不至由于材质数据的改变而影响到原始三维模型的外观,也就避免了水印的嵌入对原始三维模型的外观造成的影响,从而避免了水印的嵌入对原始三维模型本身的使用价值造成损失,保证原始三维模型的显示效果。再一方面,无需修改三维水印本身的材质数据,从而保证三维水印在嵌入到三维模型前后,外观能够保持一致,不至由于材质数据的改变而影响到三维水印的外观。也即是,可以实现将三维水印无缝嵌入到原始三维模型的效果。
可选地,所述将所述三维水印的第二材质数据插入至所述原始三维模型的第一材质数据中,包括:
将所述三维水印的第二材质数据随机插入至所述原始三维模型的第一材质数据中。
通过随机插入三维水印的材质数据,达到的效果至少可以包括:首先,通过将三维水印的第四数组中的数据插入到原始三维模型的第三数组中,可以达到将第三数组和第四数组合并的功能,也就达到了将第一材质数据和第二材质数据合并的功能。以插入数据后的第三数组称为第三目标数组为例,由于第三目标数组中既存储了原始三维模型的材质数据,也存储了三维水印的材质数据,后续基于第三目标数组显示目标三维模型时,既可以显示出原始三维模型的材质,也可以显示出三维水印的材质,从而呈现嵌入了三维水印的原始三维模型的显示效果。其次,三维水印中每个纹理数据在目标材质数据中的位置具有随机性,因此,无法轻易从目标三维模型中去除或修改三维水印。并且,一旦从目标三维模型中去除或修改三维水印失败,会导致目标三维模型中不同材质数据错位,导致目标三维模型的数据混乱,因此能够防止从目标三维模型中去除或修改三维水印。综上,可以实现加密嵌入三维水印的功能,有效的保证原始三维模型的版权,从而更好地推广三维模型这种数字资产。
可选地,所述将所述三维水印的第二材质数据随机插入至所述原始三维模型的第一材质数据中,包括:
从所述原始三维模型的第三数组中,随机选取两个相邻位置,所述第三数组中的每个位置用于存储所述第一材质数据中的每个数据;
从所述三维水印的第四数组中,读取所述第二材质数据中的任一数据,所述第四数组中的每个位置用于存储所述第二材质数据中的每个数据;
将所述数据插入至所述两个相邻位置之间。
可选地,所述对所述原始三维模型的第一材质数据以及所述三维水印的第二材质数据进行合并,包括:
对所述原始三维模型的第一贴图以及所述三维水印的第二贴图进行拼接,得到目标贴图;
根据所述目标贴图,对所述原始三维模型的第一纹理数据以及所述三维水印的第二纹理数据进行更新;
对更新后的第一纹理数据以及更新后的第二纹理数据进行合并,得到目标纹理数据,所述目标纹理数据包括所述更新后的第一纹理数据以及所述更新后的第二纹理数据。
可选地,所述对所述原始三维模型的第一材质数据以及所述三维水印的第二材质数据进行合并之后,所述方法还包括:
根据所述目标材质数据、所述第一材质数据对应的第三索引数据以及所述第二材质数据对应的第四索引数据,生成所述目标材质数据对应的第二目标索引数据;
其中,所述第二目标索引数据中任一第二目标索引指向的数据,与所述第三索引数据中对应的第三索引指向的数据相同,或者与所述第四索引数据中对应的第四索引指向的数据相同。
当第二目标索引数据中的索引指向的数据与第三索引数据中对应索引指向的数据相同时,达到的效果至少可以包括:由于第二目标索引数据中的第二目标索引指向的数据与第三索引数据中对应的第三索引指向的数据相同,通过第二目标索引查找到的数据,会与通过第三索引查找到的数据相同。那么生成的目标三维模型在实现嵌入三维水印的功能的基础上,避免了对原始三维模型的材质数据的修改,那么目标三维模型中的顶点的材质数据可以和原始三维模型中顶点的材质数据保持一致,目标三维模型中的原始三维模型的外观也就可以和原始三维模型本身的外观保持一致,从而避免影响原始三维模型的视觉效果,避免原始三维模型由于水印的嵌入而破坏原有的使用价值。
当第二目标索引数据中的索引指向的数据与第四索引数据中对应索引指向的数据相同时,达到的效果至少可以包括:由于第二目标索引数据中的第二目标索引指向的数据与第四索引数据中对应的第四索引指向的数据相同,通过第二目标索引查找到的数据,会与通过对应的第四索引查找到的数据相同,则目标三维模型中对应顶点的材质会与三维水印中对应顶点的材质相同。那么生成的目标三维模型在实现嵌入三维水印的功能的基础上,避免了对三维水印的材质数据的修改,那么目标三维模型中的顶点的数据可以和三维水印中顶点的数据保持一致,目标三维模型中的三维水印的外观也就可以和三维水印本身的外观保持一致,从而避免影响三维水印的视觉效果,避免三维水印由于水印的嵌入而破坏原有的使用价值。
可选地,所述根据所述目标材质数据、所述第一材质数据对应的第三索引数据以及所述第二材质数据对应的第四索引数据,生成所述目标材质数据对应的第二目标索引数据,包括:
对所述第三索引数据以及所述第四索引数据进行合并,得到第二候选目标索引数据,所述第二候选目标索引数据包括所述第三索引数据以及所述第四索引数据;
根据所述目标材质数据,对所述第二候选目标索引数据进行更新,得到所述第二目标索引数据。
可选地,所述根据所述目标材质数据,对所述第二候选目标索引数据进行更新,得到所述第二目标索引数据,包括:
对于所述第三索引数据中的任一第三索引,根据所述第三索引指向的数据,获取所述数据在所述目标材质数据中的第三位置;将所述第二候选目标索引数据中所述第三索引对应的第二候选索引更新为标识所述第三位置的索引;或者,
对于所述第四索引数据中的任一第四索引,根据所述第四索引指向的数据,获取所述数据在所述目标材质数据中的第四位置;将所述第二候选目标索引数据中所述第四索引对应的第二候选索引更新为标识所述第四位置的索引。
可选地,所述生成目标三维模型之后,所述方法还包括下述至少一个步骤:
根据所述目标顶点数据以及所述目标材质数据,在屏幕中显示所述目标三维模型;
当接收到分享指令时,将所述目标三维模型发送给分享对象;
将目标三维模型转换为二进制格式。
通过对目标三维模型进行格式转换,可以减少目标三维模型的数据量,提高分享目标三维模型的速度。
第二方面,提供了一种水印嵌入装置,用于执行第一方面或第一方面的任一种可选方式中的水印嵌入方法。具体地,该水印嵌入装置包括用于执行上述第一方面或第一方面的任一种可选方式中的方法的功能模块。
第三方面,提供了一种终端,所述终端包括处理器和存储器,所述存储器中存储有至少一条指令,所述指令由所述处理器加载并执行以实现上述第一方面或第一方面的任一种可选方式中的水印嵌入方法。
第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序由处理器加载并执行以实现上述第一方面或第一方面的任一种可选方式中的水印嵌入方法。
第五方面,提供了一种芯片,所述芯片包括处理器和/或程序指令,当所述芯片运行时,实现上述第一方面或第一方面的任一种可选方式中的水印嵌入方法。
第六方面,提供了一种包含指令的计算机程序产品,当其在终端上运行时,使得该终端能够实现上述第一方面或第一方面的任一种可选方式所述的水印嵌入方法所执行的操作。
附图说明
图1是本申请实施例提供的一种终端的结构示意图;
图2是本申请实施例提供的一种水印嵌入方法的流程图;
图3是本申请实施例提供的一种原始三维模型的示意图;
图4是本申请实施例提供的一种三维水印的示意图;
图5是本申请实施例提供的一种第一顶点数据的示意图;
图6是本申请实施例提供的一种第一数组的示意图;
图7是本申请实施例提供的一种将第二顶点数据插入至第一顶点数据的示意图;
图8是本申请实施例提供的一种将第二顶点数据插入至第一顶点数据的示意图;
图9是本申请实施例提供的一种第五数组的示意图;
图10是本申请实施例提供的一种更新顶点数据的索引的示意图;
图11是本申请实施例提供的一种更新顶点数据的索引的示意图;
图12是本申请实施例提供的一种原始三维模型的贴图的示意图;
图13是本申请实施例提供的一种原始三维模型的纹理数据的示意图;
图14是本申请实施例提供的一种第三数组的示意图;
图15是本申请实施例提供的一种三维水印的贴图的示意图;
图16是本申请实施例提供的一种目标三维模型的贴图的示意图;
图17是本申请实施例提供的一种将第二材质数据插入至第一材质数据的示意图;
图18是本申请实施例提供的一种将第二材质数据插入至第一材质数据的示意图;
图19是本申请实施例提供的一种更新纹理数据的索引的示意图;
图20是本申请实施例提供的一种目标三维模型的示意图;
图21是本申请实施例提供的一种目标三维模型的示意图;
图22是本申请实施例提供的一种水印嵌入方法的应用场景的示意图;
图23是本申请实施例提供的一种水印嵌入装置的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
图1是本申请实施例提供的一种终端的结构示意图。该终端可以用于实施下述实施例所示出的水印嵌入方法中的终端所执行的功能。具体来讲:
终端100可以包括射频(Radio Frequency,以下简称:RF)电路110、包括有一个或一个以上计算机可读存储介质的存储器120、输入单元130、显示单元140、传感器150、音频电路160、传输模块170、包括有一个或者一个以上处理核心的处理器180、以及电源190等部件。本领域技术人员可以理解,图1中示出的终端结构并不构成对终端的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
RF电路110可用于收发信息或通话过程中,信号的接收和发送,特别地,将基站的下行信息接收后,交由一个或者一个以上处理器180处理;另外,将涉及上行的数据发送给基站。通常,RF电路110包括但不限于天线、至少一个放大器、调谐器、一个或多个振荡器、用户身份模块(SIM)卡、收发信机、耦合器、低噪声放大器(Low Noise Amplifier,以下简称:LNA)、双工器等。此外,RF电路110还可以通过无线通信与网络和其他终端通信。该无线通信可以使用任一通信标准或协议,包括但不限于全球移动通讯系统(Global System ofMobile communication,以下简称:GSM)、通用分组无线服务(General Packet RadioService,以下简称:GPRS)、码分多址(Code Division Multiple Access,以下简称:CDMA)、宽带码分多址(Wideband Code Division Multiple Access,以下简称:WCDMA)、长期演进(Long Term Evolution,以下简称:LTE)、电子邮件、短消息服务(Short MessagingService,以下简称:SMS)等。
存储器120可用于存储软件程序以及模块,如上述示例性实施例所示出的终端所对应的软件程序以及模块,处理器180通过运行存储在存储器120的软件程序以及模块,从而执行各种功能应用以及数据处理,如实现基于视频的交互等。存储器120可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据终端100的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器120可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器120还可以包括存储器控制器,以提供处理器180和输入单元130对存储器120的访问。
输入单元130可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。具体地,输入单元130可包括触敏表面131以及其他输入终端132。触敏表面131,也称为触摸显示屏或者触控板,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触敏表面131上或在触敏表面131附近的操作),并根据预先设定的程式驱动相应的链接装置。可选的,触敏表面131可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器180,并能接收处理器180发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触敏表面131。除了触敏表面131,输入单元130还可以包括其他输入终端132。具体地,其他输入终端132可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
显示单元140可用于显示由用户输入的信息或提供给用户的信息以及终端100的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。显示单元140可包括显示面板141,可选的,可以采用液晶显示器(Liquid CrystalDisplay,以下简称:LCD)、有机发光二极管(Organic Light-Emitting Diode,以下简称:OLED)等形式来配置显示面板141。进一步的,触敏表面131可覆盖显示面板141,当触敏表面131检测到在其上或附近的触摸操作后,传送给处理器180以确定触摸事件的类型,随后处理器180根据触摸事件的类型在显示面板141上提供相应的视觉输出。虽然在图1中,触敏表面131与显示面板141是作为两个独立的部件来实现输入和输出功能,但是在某些实施例中,可以将触敏表面131与显示面板141集成而实现输入和输出功能。
终端100还可包括至少一种传感器150,比如光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板141的亮度,接近传感器可在终端100移动到耳边时,关闭显示面板141和/或背光。作为运动传感器的一种,重力加速度传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;至于终端100还可配置的陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。
音频电路160、扬声器161,传声器162可提供用户与终端100之间的音频接口。音频电路160可将接收到的音频数据转换后的电信号,传输到扬声器161,由扬声器161转换为声音信号输出;另一方面,传声器162将收集的声音信号转换为电信号,由音频电路160接收后转换为音频数据,再将音频数据输出处理器180处理后,经RF电路110以发送给比如另一终端,或者将音频数据输出至存储器120以便进一步处理。音频电路160还可能包括耳塞插孔,以提供外设耳机与终端100的通信。
终端100通过传输模块170可以帮助用户收发电子邮件、浏览网页和访问流式媒体等,它为用户提供了无线或有线的宽带互联网访问。虽然图1示出了传输模块170,但是可以理解的是,其并不属于终端100的必须构成,完全可以根据需要在不改变发明的本质的范围内而省略。
处理器180是终端100的控制中心,利用各种接口和线路链接整个手机的各个部分,通过运行或执行存储在存储器120内的软件程序和/或模块,以及调用存储在存储器120内的数据,执行终端100的各种功能和处理数据,从而对手机进行整体监控。可选的,处理器180可包括一个或多个处理核心;优选的,处理器180可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器180中。
终端100还包括给各个部件供电的电源190(比如电池),优选的,电源可以通过电源管理系统与处理器180逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源190还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
尽管未示出,终端100还可以包括摄像头、蓝牙模块等,在此不再赘述。具体在本实施例中,终端100的显示单元是触摸屏显示器,终端100还包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行上述一个或者一个以上程序包含用于实施下述实施例中终端所执行操作的指令。
在示例性实施例中,还提供了一种计算机可读存储介质,例如包括指令的存储器,上述指令可由终端中的处理器执行以完成下述实施例中的水印嵌入方法。例如,计算机可读存储介质可以是只读存储器(Read-Only Memory,简称:ROM)、随机存取存储器(RandomAccess Memory,简称:RAM)、只读光盘(Compact Disc Read-Only Memory,简称:CD-ROM)、磁带、软盘和光数据存储设备等。
图2是本申请实施例提供的一种水印嵌入方法的流程图,该方法的执行主体可以是终端,该方法包括:
201、终端获取原始三维模型以及三维水印。
原始三维模型是指待嵌入水印的三维(英文:three-dimensional,缩写:3D)模型,可以为一种数字资产。原始三维模型可以包括人物模型、动物模型、物品模型以及场景模型等。示例性地,原始三维模型可以如图3所示。三维水印可以为待嵌入到原始三维模型的三维模型。可选地,三维水印可以携带版权信息,该版权信息可以包括原始三维模型的版权者、创建者或所有者的标识,该标识可以包括商标(英文:logo)、名称或其他信息。示例性地,三维水印可以为原始三维模型的版权者的商标经过三维建模后得到的模型,举例来说,三维水印可以如图4所示。
关于获取原始三维模型以及三维水印的方式,在一种可能的实现中,可以通过建模,以生成原始三维模型;在一种可能的实现中,可以对原始三维模型扫描,以获取原始三维模型;在一种可能的实现中,可以读取已经存储的原始三维模型;在一种可能的实现中,可以从某一网站或数据库中下载原始三维模型;当然,还可以采用其他方式获取原始三维模型,本实施例对此不做限定。另外,获取三维水印的方式与获取原始三维模型的方式同理,在此不做赘述。
可选地,原始三维模型以及三维水印可以封装在文件中,相应地,获取原始三维模型以及三维水印可以包括:获取原始三维模型的文件以及三维水印的文件。其中,该文件可以包括obj格式的文件、GLB格式的文件以及gltf格式的文件等,当然,文件也可以根据需求或经验配置为其他格式,本实施例对此不做限定。当然,文件仅是原始三维模型以及三维水印的存储结构的一种示例,原始三维模型以及三维水印也可以封装在文件以外的存储结构中,例如数据块或对象中,本实施例对此不做限定。
202、终端对原始三维模型的第一顶点数据以及三维水印的第二顶点数据进行合并,得到目标顶点数据。
第一顶点数据是指原始三维模型的顶点数据。原始三维模型可以包括至少一个顶点,相应地,第一顶点数据可以包括原始三维模型的至少一个顶点的数据。可选地,顶点的数据可以包括位置坐标。该位置坐标用于标识对应顶点在空间中的位置,可以为三维坐标,该位置坐标的数据格式可以为(x,y,z)。可选地,第一顶点数据中的数据可以按行排列,第一顶点数据中的每一行是一个数据,对应原始三维模型的一个顶点,包括顶点的位置坐标,当然还可以包括注释内容或者其他内容。
可选地,若原始三维模型封装在文件中,则获取第一顶点数据的过程可以包括:解析原始三维模型的文件,得到文件中的第一顶点数据。具体来说,以原始三维模型为obj格式的文件为例,在obj格式的文件中,通常使用行头v来标识顶点数据,则获取第一顶点数据的过程可以包括:确定原始三维模型的obj格式的文件中以v为行头的每行数据,将得到的至少一行数据作为第一顶点数据。
在一个示例性实例中,假设原始三维模型包括顶点a1、顶点b1和顶点c1,参见图5,图5为第一顶点数据的示意图,第一顶点数据可以包括3行数据,第1行数据是顶点a1的数据,第2行数据是顶点b1的数据,第3行数据是顶点c1的数据。以顶点的数据为位置坐标为例,图5中的第1行数据为v 2.59562-10.0518 3.48815,表示顶点a1的位置坐标为(2.59562,-10.0518,3.48815),其中x坐标为2.59562,y坐标为-10.0518,z坐标为3.48815,其他顶点的数据与此例同理。
可选地,第一顶点数据可以存储在数组中。具体来讲,以存储第一顶点数据的数组称为第一数组为例,第一数组可以包括至少一个位置,第一顶点数据的任一数据可以存储在第一数组的任一位置中。第一数组可以当获取到原始三维模型时,缓存在内存中,第一数组可以占用连续的内存空间。示例性地,参见图6,第一数组可以如图6所示,其中,ver(1)为第一数组的第1个位置,ver(2)为第一数组的第2个位置,以此类推。当然,第一顶点数据也可以存储在数组以外的存储结构中,例如哈希表、链表、红黑树或其他存储结构中,本实施例对此不做限定。
第二顶点数据是指三维水印的顶点数据。三维水印可以包括至少一个顶点,相应地,第二顶点数据可以包括三维水印的至少一个顶点的数据。可选地,第二顶点数据中的数据可以按行排列,第二顶点数据中的每一行是一个数据,对应三维水印的一个顶点,包括顶点的位置坐标,当然还可以包括注释内容或者其他内容。
可选地,若三维水印封装在文件中,则获取第二顶点数据的过程可以包括:解析三维水印的文件,得到文件中的第二顶点数据。具体来说,以三维水印为obj格式的文件为例,获取第二顶点数据的过程可以包括:确定三维水印的obj格式的文件中以v为行头的每行数据,将得到的至少一行数据作为第二顶点数据。
可选地,第二顶点数据可以存储在数组中。具体来讲,以存储第二顶点数据的数组称为第二数组为例,第二数组可以包括至少一个位置,第二顶点数组的任一数据可以存储在第二数组的任一位置中。第二数组的结构与上述第一数组的结构同理,在此不做赘述。当然,第二顶点数据也可以存储在数组以外的存储结构中,本实施例对此不做限定。
目标顶点数据是指目标三维模型的顶点数据。该目标三维模型是指向原始三维模型嵌入了三维水印后得到的三维模型,可以看作合并了原始三维模型以及三维水印的模型。目标三维模型可以包括至少一个顶点,相应地,目标顶点数据可以包括目标三维模型的至少一个顶点的数据。可选地,目标顶点数据中的数据可以按行排列,目标顶点数据中的每一行是一个数据,对应目标三维模型的一个顶点。
目标顶点数据包括第一顶点数据以及第二顶点数据,可以看作第一顶点数据和第二顶点数据的组合。作为一个示例,假设某个原始三维模型的第一顶点数据包括n个顶点的数据,某个三维水印包括m个顶点的数据,则向原始三维模型嵌入该三维水印后得到的目标三维模型中,目标顶点数据可以包括(m+n)个顶点数据。其中,m和n均为正整数。
可选地,目标顶点数据可以存储在数组中。具体来讲,以存储目标顶点数据的数组称为第一目标数组为例,第一目标数组可以包括至少一个位置,目标顶点数据中的任一数据可以存储在第一目标数组的任一位置中。第一目标数组可以由终端生成。第一目标数组可以存储第一数组中每个位置存储的数据以及第二数组中每个位置存储的数据,从而存储原始三维模型的每个顶点的数据以及三维水印的每个顶点的数据。
对第一顶点数据以及第二顶点数据进行合并的效果至少可以包括:
由于目标顶点数据包括原始三维模型中每个顶点的数据以及三维水印中每个顶点的数据,后续根据目标顶点数据生成目标三维模型时,目标三维模型会包含原始三维模型中每个顶点,因此可以保证在显示目标三维模型时,可以同时显示完整的原始三维模型,从而保证原始三维模型外观完整,不至由于顶点数据的丢失而影响到三维模型的外观。同时,无需修改原始三维模型本身的顶点数据,从而保证原始三维模型在嵌入三维水印前后,外观能够保持一致,不至由于顶点数据的改变而影响到三维模型的外观。同理地,可以保证在显示目标三维模型时,可以同时显示完整的三维水印,从而保证三维水印外观完整,不至由于顶点数据的丢失而影响到三维水印的外观。同时,无需修改三维水印本身的顶点数据,从而保证三维水印在嵌入到三维模型前后,外观能够保持一致,不至由于顶点数据的改变而影响到三维水印的外观。也即是,可以实现将三维水印无缝嵌入到原始三维模型的效果。
关于合并第一顶点数据和第二顶点数据的方式,可选地,终端可以将三维水印的第二顶点数据插入至原始三维模型的第一顶点数据中,得到目标顶点数据。相应地,目标顶点数据为插入了第二顶点数据的第一顶点数据。具体来讲,对于第二顶点数据中的任一数据,可以将该数据插入到第一顶点数据中的不同数据之间。其中,若第一顶点数据中的每个数据按行排列,则将数据插入到第一顶点数据的不同数据之间,可以包括:将数据作为第一顶点数据中新增的行,插入到第一顶点数据的任两行之间。若第一顶点数据中的每个数据存储在第一数组中,则将数据插入到第一顶点数据的不同数据之间,可以包括:从原始三维模型的第一数组中,选取两个相邻位置;将三维水印的任一顶点的数据插入至该第一数组的两个相邻位置之间。
关于获取第二顶点数据中任一数据的方式,若第二顶点数据可以存储在数组中,并假设存储第二顶点数据的数组称为第二数组,可以从第二数组中的任一位置读取第二顶点数据中的任一数据,例如通过数组下标查询到数组中的位置,进而从该位置读取数据。当然,第二顶点数据也可以存储在数组以外的存储结构中,则可以从数组以外的存储结构中读取第二顶点数据中的任一数据。
示例性地,请参见图7,原始三维模型的第一顶点数据包括3行数据,第1行数据是顶点a1的数据,第2行数据是顶点b1的数据,第3行数据是顶点c1的数据,可以将三维水印的第二顶点数据中的第1行数据,即顶点a2的数据,插入到第一顶点数据的第2行数据和第3行数据之间。那么,插入后得到的目标顶点数据中,第3行数据是顶点a2的数据,第4行数据是顶点c1的数据。以此类推,假设第一顶点数据包括n行数据,第二顶点数据包括m行数据,将第二顶点数据插入至第一顶点数据后,第一顶点数据可以包括m+n行数据,其中,m和n是正整数。
可选地,将第二顶点数据插入至第一顶点数据,可以指将第二顶点数据插入至原始三维模型本身具有的第一顶点数据,也可以指生成第一顶点数据的副本,将第二顶点数据插入至第一顶点数据的副本,本实施例对此不做限定。
可选地,插入顶点数据时可以采用随机插入的方式,可以将三维水印的第二顶点数据随机插入至原始三维模型的第一顶点数据中,得到目标顶点数据。那么,目标顶点数据为随机插入了第二顶点数据的第一顶点数据。具体来讲,对于第二顶点数据中的任一数据,可以将该数据随机插入到第一顶点数据中的不同数据之间。其中,若第一顶点数据中的每个数据按行排列,则将数据插入到第一顶点数据的不同数据之间,可以包括:将数据作为第一顶点数据中新增的行,随机插入到第一顶点数据的任两行之间。若第一顶点数据中的每个数据存储在第一数组中,则将数据插入到第一顶点数据的不同数据之间,具体可以包括以下步骤一至步骤三:
步骤一、从原始三维模型的第一数组中,随机选取两个相邻位置。
可以采用任一种随机选取方式,从第一数组的所有位置中选取两个相邻位置,本实施例对此不做限定。举例来说,可以确定第一数组中的第一个位置以及最后一个位置,将第一个位置至最后一个位置作为取值范围,生成一个属于该取值范围的随机数,将该随机数作为选取的一个位置,将该位置的相邻位置作为选取的另一个位置,得到两个相邻位置。
步骤二、从三维水印的第二数组中,读取第二顶点数据中的任一数据。
关于从第二数组中读取任一数据的方式,可以按照任一种预设策略读取数据,本实施例对此不做限定。举例来说,可以按照第二数组中位置的顺序,依次从第二数组读取每个数据。例如,先从第二数组中第一个位置读取数据,再从第二数组中第二个位置读取数据,直至从第二数组中最后一个位置读取到数据位置。以数学的方式表达,假设第二数组为ver(1)至ver(n),可以先读取ver(1)的数据,再读取ver(2)的数据,直至读取ver(n)的数据。
步骤三、将数据插入至两个相邻位置之间。
可以在第一数组的两个相邻位置之间新增一个位置,将第二顶点数据中的数据插入到该第一数组的新增的位置中,以使第一数组存储该第二顶点数据中的数据。
举例来说,参见图8,图8中加粗黑框表示待插入的第二顶点数据中的数据。可以从原始三维模型的第一数组中随机选取第5个位置和第6个位置,从三维水印的第二数组中读取ver(1),将ver(1)插入到第一数组的第5个位置和第6个位置之间。同理地,从原始三维模型的第一数组中随机选取第8个位置和第9个位置,从三维水印的第二数组中读取ver(2),将ver(2)插入到第一数组的第8个位置和第9个位置之间。
通过随机插入三维水印的顶点的数据,达到的效果至少可以包括:
首先,通过将三维水印的第二数组中的数据插入到原始三维模型的第一数组中,可以达到将第一数组和第二数组合并的功能,也就达到了将第一顶点数据和第二顶点数据合并的功能。插入数据后的第一数组即为上文所述的第一目标数组,由于第一目标数组中既存储了原始三维模型的顶点的数据,也存储了三维水印的顶点的数据,后续基于第一目标数组显示目标三维模型时,既可以显示出原始三维模型的顶点,也可以显示出三维水印的顶点,从而呈现嵌入了三维水印的原始三维模型的显示效果。
其次,三维水印中每个顶点的数据在目标顶点数据中的位置具有随机性,例如顶点a2的数据位于第2行,顶点b2位于第10行,顶点c2位于第8行,因此,无法轻易从目标三维模型中去除或修改三维水印。并且,一旦从目标三维模型中去除或修改三维水印失败,会导致目标三维模型中不同顶点的数据相互错位,导致目标三维模型的数据混乱,也就导致目标三维模型无法正常显示,因此能够防止从目标三维模型中去除三维水印或修改三维水印。综上所述,可以实现加密嵌入三维水印的功能,有效的保证原始三维模型的版权,从而更好地推广三维模型这种数字资产。
可选地,插入顶点数据时可以采用离散插入的方式,可以将三维水印的第二顶点数据离散插入至原始三维模型的第一顶点数据中,得到目标顶点数据。具体来说,可以将第二顶点数据中的不同数据插入到第一顶点数据中的不同位置,以使第二顶点数据中的多个数据尽量在第一顶点数据中不相邻。另外,可以每次从第二顶点数据中选取预设数量的顶点的数据,将这些顶点的数据,插入到第一顶点数据中,该预设数量可以比较小,例如为1,来实现离散插入的功能。
需要说明的第一点是,随机插入可以是插入水印模型的第二顶点数据的可选方式,而非必选方式。可选地,也可以采用随机插入以外的其他方式来插入水印模型的第二顶点数据。举例来说,将第二数组中的每个数据依次插入到第一数组中每两个相邻位置之间,例如依次插入到第一数组中的第1个位置和第2个位置之间、第2个位置和第3个位置之间,直至第二顶点数据插入结束为止。当然也可以按照其他方式插入第二顶点数据,本实施例对将第二顶点数据插入至第一顶点数据的方式不做限定。
需要说明的第二点是,插入水印模型的第二顶点数据可以仅是合并两种三维模型的顶点数据的可选方式,而非必选方式。可选地,也可以采用插入第二顶点数据以外的其他方式来合并两种三维模型的顶点数据。例如,可以按照任一种预设策略,对三维水印的第二顶点数据以及原始三维模型的第一顶点数据进行排序和组合,得到目标顶点数据,可以将第一顶点数据和第二顶点数据顺序拼接为目标顶点数据,又如可以按照第一数组中位置从先至后的顺序,依次将第二数组中的每个数据依次插入到每两个相邻位置之间,当然也可以按照其他方式插入第二顶点数据,本实施例对合并第一顶点数据以及第二顶点数据的方式不做限定。
203、终端根据目标顶点数据、第一顶点数据对应的第一索引数据以及第二顶点数据对应的第二索引数据,生成目标顶点数据对应的第一目标索引数据。
第一索引数据用于查询原始三维模型中对应顶点的数据。第一顶点数据可以包括原始三维模型的至少一个顶点的数据,相应地,第一索引数据可以包括原始三维模型的至少一个顶点的索引。以第一索引数据中的任一索引称为第一索引为例,每个第一索引和第一顶点数据中的每个顶点一一对应,任一第一索引用于查询该第一索引对应的原始三维模型的顶点的数据。可选地,若第一顶点数据中每个顶点的数据占一行,相应地,第一索引可以为对应顶点的数据所处的行的行标识。该行标识用于标识顶点的数据所处的行,可以为行号。
可选地,可以将面作为原始三维模型的组成元素,原始三维模型可以包括至少一个面,每个面包括至少三个顶点。相应地,第一索引数据可以是面索引数据,第一索引数据可以包括原始三维模型的至少一个面中顶点的索引。进一步地,可以将三角面作为原始三维模型的组成元素,原始三维模型可以包括至少一个三角面,每个三角面包括三个顶点。相应地,第一索引数据可以包括原始三维模型的至少一个三角面中顶点的索引。
举例来说,参见图5,假设原始三维模型的某个三角面包括顶点a1、顶点b1和顶点c1,顶点a1的数据位于第一顶点数据中的第1行,顶点b1的数据位于第一顶点数据中的第2行,顶点c1的数据位于第一顶点数据中的第3行,第一索引数据中该三角面对应的索引可以是f1 2 3,其中1为顶点a1的索引,是第一顶点数据中第1行的行标识,能够索引至第1行,从而查询到顶点a1的数据,2为顶点b1的索引,是第一顶点数据中第2行的行标识,能够索引至第2行,从而查询到顶点b1的数据。依次类推,假设原始三维模型包括n个顶点,第一顶点数据包括n行,第一索引数据可以包括1至n。其中,n为正整数。
可选地,若原始三维模型封装在文件中,则获取第一索引数据的过程可以包括:解析原始三维模型的文件,得到文件中的第一索引数据。以原始三维模型为obj格式的文件为例,在obj格式的文件中,通常使用行头f来标识索引数据,则可以确定obj格式的文件中以f为行头的每行数据,将得到的至少一行数据作为第一索引数据。
可选地,第一索引数据可以存储在数组中。具体来讲,以存储第一索引数据的数组称为第五数组为例,第五数组可以包括至少一个位置,任一第一索引可以存储在第五数组的任一位置中。第五数组可以当获取到原始三维模型时,缓存在内存中,第五数组可以占用连续的内存空间。示例性地,参见图9,第五数组可以如图9所示,其中,“index”表示索引,index(1)为第五数组的第1个位置,index(2)为第五数组的第2个位置,以此类推。当然,第一索引数据也可以存储在数组以外的存储结构中,本实施例对此不做限定。
第二索引数据用于查询三维水印中对应顶点的数据。第二顶点数据可以包括三维水印的至少一个顶点的数据,相应地,第二索引数据可以包括三维水印的至少一个顶点的索引。以第二索引数据中的任一索引称为第二索引为例,每个第二索引和第二顶点数据中的每个顶点一一对应,任一第二索引用于查询该第二索引对应的三维水印的顶点的数据。可选地,若第二顶点数据中的每个数据占一行,相应地,每个第二索引可以为行标识。该行标识用于标识对应数据所处的行,可以为行号。
可选地,可以将面作为三维水印的组成元素,三维水印可以包括至少一个面,每个面包括至少三个顶点。相应地,第二索引数据可以是面索引数据,第二索引数据可以包括三维水印的至少一个面中顶点的索引。进一步地,可以将三角面作为三维水印的组成元素,三维水印可以包括至少一个三角面,每个三角面包括三个顶点。相应地,第二索引数据可以包括三维水印的至少一个三角面中顶点的索引。
举例来说,假设三维水印的某个三角面包括顶点a2、顶点b2和顶点c2,顶点a2的数据位于第二顶点数据中的第1行,顶点b2的数据位于第二顶点数据中的第2行,顶点c2的数据位于第二顶点数据中的第3行,第二索引数据中该三角面对应的索引可以是f 1 2 3,其中1为顶点a2的索引,是第二顶点数据中第1行的行标识,能够索引至第1行,从而查询到顶点a2的数据,2为顶点b2的索引,是第二顶点数据中第2行的行标识,能够索引至第2行,从而查询到顶点b2的数据。依次类推,假设三维水印包括k个顶点,第二顶点数据包括k行,第二索引数据可以包括1至k。其中,k为正整数。
可选地,若三维水印封装在文件中,则获取第二索引数据的过程可以包括:解析三维水印的文件,得到文件中的第二索引数据。以三维水印为obj格式的文件为例,在obj格式的文件中,通常使用行头f来标识索引数据,则可以确定obj格式的文件中以f为行头的每行数据,将得到的至少一行数据作为第二索引数据。
可选地,第二索引数据可以存储在数组中。具体来讲,以存储第二索引数据的数组称为第六数组为例,第六数组可以包括至少一个位置,第二索引数据中的任一索引可以存储在第六数组的任一位置中。第六数组可以当获取到三维水印时,缓存在内存中,第六数组可以占用连续的内存空间。当然,第二索引数据也可以存储在数组以外的存储结构中,本实施例对此不做限定。
第一目标索引数据用于查询目标三维模型中对应顶点的数据。目标顶点数据可以包括目标三维模型的至少一个顶点的数据,相应地,第一目标索引数据可以包括目标三维模型的至少一个顶点的索引,第一目标索引数据中的每个索引和目标顶点数据中的每个顶点一一对应,任一索引用于查询该索引对应的顶点的数据。可选地,若目标顶点数据中的每个数据占一行,相应地,第一目标索引数据中的每个索引可以为行标识。该行标识用于标识对应数据所处的行,可以为行号。
可选地,可以将面作为目标三维模型的组成元素,目标三维模型可以包括至少一个面,每个面包括至少三个顶点。相应地,第一目标索引数据可以是面索引数据,第一目标索引数据可以包括目标三维模型的至少一个面中顶点的索引。进一步地,可以将三角面作为目标三维模型的组成元素,目标三维模型可以包括至少一个三角面,每个三角面包括三个顶点。相应地,第一目标索引数据可以包括目标三维模型的至少一个三角面中顶点的索引。
可选地,第一目标索引数据可以存储在数组中。具体来讲,以存储第一目标索引数据的数组称为第二目标数组为例,第二目标数组可以包括至少一个位置,第一目标索引数据中的任一索引可以存储在第二目标数组的任一位置中。第二目标数组可以根据第五数组以及第六数组合并得到,例如可以将插入了第六数组中的索引的第五数组,作为第二目标数组。第二目标数组可以占用连续的内存空间。当然,第一目标索引数据也可以存储在数组以外的存储结构中,本实施例对此不做限定。
以第一目标索引数据中的任一索引称为第一目标索引为例,第一目标索引数据中第一目标索引指向的数据可以包括以下情况(1)至情况(2)中的任一项:
情况(1)第一目标索引指向的数据与第一索引数据中对应的第一索引指向的数据相同。
第一目标索引指向的数据可以是目标顶点数据中的数据。第一索引指向的数据可以是第一顶点数据中的数据。关于第一目标索引和第一索引之间的对应关系,任一第一目标索引和任一第一索引对应,可以指这两个索引对应的三角面以及该三角面上的顶点相同。示例性地,若第一索引为原始三维模型第m个三角面的第p个顶点的索引,则若第一目标索引为目标三维模型第m个三角面的第p个顶点的索引,则可以称第一目标索引与第一索引对应。其中,m和p为正整数。
可选地,第一目标索引在第一目标索引数据中的位置可以和第一索引在第一索引数据中的位置相同。具体来讲,若索引数据按行排列,每行包括多个索引,则第一目标索引和第一索引对应,可以指第一目标索引在第一目标索引数据中所处的行以及在该行中所处的位置,和第一索引在第一索引数据中所处的行以及在该行中所处的位置相同。另外,若索引数据存储在数组中,则第一目标索引和第一索引对应,可以指第一目标索引在第二目标数组中的位置与第一索引在第五数组中的位置相同。例如,第一目标索引在第二目标数组的数组下标与第一索引在第五数组的数组下标相同。
举例来说,参见图10,假设第一索引数据为f 1 2 3,其中1指向第一顶点数据的第1行数据v 2.59562-10.0518 3.48815,2指向第一顶点数据的第2行数据v 1.94055-9.517563.4141,3指向第一顶点数据的第3行数据v 3.75161-9.23498 3.01049,第一目标索引数据为f 1 2 4,其中1指向目标顶点数据中的第1行数据v 2.59562-10.05183.48815,2指向目标顶点数据中的第2行数据v1.94055-9.51756 3.4141,4指向目标顶点数据中的第4行数据v 3.75161-9.23498 3.01049。则第一目标索引数据中的1与第一索引数据中的1对应,第一目标索引数据中的2与第一索引数据中的2对应,第一目标索引数据中的4与第一索引数据中的3对应。
在情况(1)中达到的效果至少可以包括:
由于第一目标索引数据中的第一目标索引指向的数据与第一索引数据中对应的第一索引指向的数据相同,那么后续生成目标三维模型后,在根据第一目标索引数据显示目标三维模型时,通过第一目标索引查询到的数据,会与通过对应的第一索引查询到的数据相同,则根据该第一目标索引查询到的数据进行绘制时,会与根据该第一索引查询到的数据进行绘制时,绘制效果会一致,则显示效果也会一致,那么目标三维模型中的原始三维模型的外观也就可以和原始三维模型本身的外观保持一致,从而避免影响原始三维模型的视觉效果,避免原始三维模型由于水印的嵌入而破坏原有的使用价值。
情况(2)第一目标索引指向的数据与对应的第二索引指向的数据相同。
关于第一目标索引和第二索引之间的对应关系,任一第一目标索引和任一第二索引对应,可以指这两个索引对应的三角面以及该三角面上的顶点相同。示例性地,若第二索引为三维水印中第m个三角面的第p个顶点的索引,则若第一目标索引为目标三维模型中第m个三角面的第p个顶点的索引,则可以称第一目标索引与第二索引对应。其中,m和p为正整数。
可选地,第一目标索引在第一目标索引数据中的位置可以和第二索引在第二索引数据中的位置相同。具体来讲,若索引数据按行排列,每行包括多个索引,则第一目标索引和第二索引对应,可以指第一目标索引在第一目标索引数据中所处的行以及在该行中所处的位置,和第二索引在第二索引数据中所处的行以及在该行中所处的位置相同。另外,若索引数据存储在数组中,则第一目标索引和第二索引对应,可以指第一目标索引在第二目标数组中的位置与第二索引在第六数组中的位置相同。例如,第一目标索引在第二目标数组中的数组下标与第二索引在第六数组的数组下标相同。
在情况(2)中达到的效果至少可以包括:
由于第一目标索引数据中的第一目标索引指向的数据与第二索引数据中对应的第二索引指向的数据相同,通过第一目标索引查找到的数据,会与通过第二索引查找到的数据相同。那么生成的目标三维模型在实现嵌入三维水印的功能的基础上,避免了对三维水印的顶点数据的修改,那么目标三维模型中的顶点的数据可以和三维水印中顶点的数据保持一致,目标三维模型中的三维水印的外观也就可以和三维水印本身的外观保持一致,从而避免影响三维水印的视觉效果,避免三维水印由于水印的嵌入而破坏原有的使用价值。
可选地,生成第一目标索引数据的过程可以包括以下步骤一至步骤二:
步骤一、对第一索引数据以及第二索引数据进行合并,得到第一候选目标索引数据。
第一候选目标索引数据是指第一索引数据以及第二索引数据合并后得到的数据,第一候选目标索引数据包括第一索引数据以及第二索引数据。其中,合并第一索引数据以及第二索引数据的方式可以和合并第一顶点数据和第二顶点数据的方式同理。具体来说,可以将第二索引数据插入至第一索引数据中。例如,插入任一第二索引的过程可以包括:从原始三维模型的第五数组中,选取两个相邻位置;从三维水印的第六数组中,读取第二索引数据中的任一第二索引;将该第二索引插入至第五数组的两个相邻位置之间。
进一步地,第二索引数据的插入位置可以和第二顶点数据的插入位置对应。具体来说,对于第二索引数据中的任一第二索引来说,为插入该第二索引选取的第五数组中的两个相邻位置,可以和为插入该第二索引指向的三维水印的顶点的数据时,选取的第一数组中的两个相邻位置相同,则该第二索引在第五数组中插入的位置与第二索引指向的数据在第一数组中插入的位置对应。举例来说,假设将三维水印的顶点ver(m)的数据插入到原始三维模型的第一数组的第3个位置和第4个位置之间,则插入顶点ver(m)的数据的索引index(m)时,可以将index(m)插入到原始三维模型的第五数组的第3个位置和第4个位置之间。
步骤二、根据目标顶点数据,对第一候选目标索引数据进行更新,得到第一目标索引数据。
可选地,对第一候选目标索引数据进行更新的过程可以包括以下步骤(1.1)至步骤(1.2)。
步骤(1.1)对于该第一索引数据中的任一第一索引,根据该第一索引指向的数据,获取该数据在该目标顶点数据中的第一位置。
第一位置是指第一顶点数据中的任一数据在目标顶点数据中所处的位置,第一索引可以用于标识该第一位置。其中,若目标顶点数据中每个数据占一行,则获取第一顶点数据中的数据在目标顶点数据中的第一位置,可以指获取第一顶点数据中的数据在目标顶点数据中所处的行。另外,若目标顶点数据存储在第一目标数组中,则获取数据在目标顶点数据中的第一位置,可以指获取数据在第一目标数组中所处的位置,例如获取数据在第一目标数组的数组下标。
步骤(1.2)将该第一候选目标索引数据中该第一索引对应的第一候选索引更新为标识该第一位置的索引。
其中,由于第一候选索引在第一候选目标索引数据中所处的行以及在该行中所处的位置,和步骤(1.1)中的第一索引在第一索引数据中所处的行以及在该行中所处的位置相同。通过更新第一候选索引,可以令第一候选索引指向该第一索引指向的数据,即令目标三维模型的顶点的索引指向原始三维模型的顶点的数据,因此可以达到刷新第一候选目标索引数据的功能。另外,将第一候选索引更新为标识该第一位置的索引后,可以将更新了的第一候选索引作为上文中的第一目标索引,依次类推,将包含了每个第一候选索引的第一候选目标索引,即更新了的第一候选目标索引数据作为第一目标索引数据。
举例来说,参见图10,假设第一索引数据中第一行索引为:f 1 2 3。针对这一行索引中的第3个索引“3”,可以根据3指向的数据v 3.75161-9.23498 3.01049,获取该数据在目标顶点数据中的第一位置,得到第4行,则将第一候选目标索引数据中的第一行索引中的第3个索引从“3”更新为“4”。
可选地,可以判断第一候选索引是否为标识第一位置的索引,当第一候选索引不是标识第一位置的索引时,则将第一候选索引更新为标识第一位置的索引,当第一候选索引是标识第一位置的索引时,则无需更新第一候选索引。举例来说,参见图10,假设第一索引数据中第一行索引为:f 1 2 3。针对这一行索引中的第2个索引“2”,可以根据2指向的数据v 1.94055-9.51756 3.4141,获取该数据在目标顶点数据中的第一位置,得到第2行,由于2已经是标识第2行的索引,则无需更新2。依次类推,可以将第一索引数据中第一行索引更新为f 1 24。
可选地,对第一候选目标索引数据进行更新的过程可以包括以下步骤(2.1)至步骤(2.1)。
步骤(2.1)对于第二索引数据中的任一第二索引,根据第二索引指向的数据,获取数据在目标顶点数据中的第二位置。
第二位置是指第二顶点数据中的任一数据在目标顶点数据中所处的位置,第二索引可以用于标识该第二位置。其中,若目标顶点数据中每个数据占一行,则获取第二顶点数据中的数据在目标顶点数据中的第二位置,可以指获取第二顶点数据中的数据在目标顶点数据中所处的行。另外,若目标顶点数据存储在第一目标数组中,则获取数据在目标顶点数据中的第二位置,可以指获取数据在第一目标数组中所处的位置,例如获取数据在第一目标数组的数组下标。
步骤(2.2)将第一候选目标索引数据中第二索引对应的第一候选索引更新为标识第二位置的索引。
其中,由于第一候选索引在第一候选目标索引数据中所处的行以及在该行中所处的位置,和步骤(2.1)中的第二索引在第二索引数据中所处的行以及在该行中所处的位置相同。通过更新第一候选索引,可以令第一候选索引指向该第二索引指向的数据,即令目标三维模型的顶点的索引指向三维水印的顶点的数据,因此可以达到刷新第一候选目标索引数据的功能。另外,将第一候选索引更新为标识该第二位置的索引后,可以将更新了的第二候选索引作为上文中的第一目标索引,依次类推,将包含了每个第一候选索引的第一候选目标索引,即更新了的第一候选目标索引数据作为第一目标索引数据。
可选地,可以判断第一候选索引是否为标识第二位置的索引,当第一候选索引不是标识第二位置的索引时,则将第一候选索引更新为标识第二位置的索引,当第一候选索引是标识第二位置的索引时,则无需更新第一候选索引。
可选地,可以择一执行本步骤203中的步骤(1.1)至步骤(1.2)或上述步骤(2.1)至步骤(2.2),也可以执行本步骤203中的上述步骤(1.1)至步骤(1.2)以及上述步骤(2.1)至步骤(2.2),本实施例对此不做限定。
综上所述,参见图11,当生成目标顶点数据后,可以将目标顶点数据中的每个顶点的数据在目标顶点数据中的索引(第一目标索引)一一映射到第二目标数组中,以使第二目标数组存储了目标三维模型中每个顶点的索引。
204、终端对原始三维模型的第一材质数据以及三维水印的第二材质数据进行合并,得到目标材质数据。
第一材质数据是指原始三维模型的材质数据。其中,材质是指用来确定原始三维模型的一个或多个面的属性,材质可以决定面在着色时的特性,如颜色,光亮程度,自发光度及不透明度等。
具体来讲,第一材质数据可以包括第一贴图以及第一纹理数据。第一贴图是指原始三维模型的贴图(英文:map),即绘制原始三维模型时贴到该原始三维模型的每个面上的图像。举例来说,参见图3和图12,假设原始三维模型如图3所示,该原始三维模型的第一贴图可以如图12所示。第一纹理数据是指原始三维模型的纹理数据。该第一纹理数据可以包括原始三维模型的至少一个顶点的纹理坐标。其中,该纹理坐标也称贴图坐标,纹理坐标用于指示绘制对应顶点时使用的纹理像素。具体来说,在绘制三维模型中任一顶点时,会根据该顶点的纹理坐标,在贴图中查找到纹理坐标对应的纹理像素,使用该纹理像素在屏幕中绘制该顶点。其中,该纹理坐标可以包括至少一个维度,例如可以包括1个维度至4个维度。举例来说,该纹理坐标的数据格式可以为(s,t)。可选地,纹理坐标中x坐标以及y坐标的取值范围可以属于[0,1]。
可选地,参见图13,第一纹理数据中的纹理坐标可以按行排列,第一纹理数据中的每一行是一个纹理坐标。可选地,每个顶点可以同时位于多个面,则每个顶点可以具有多个纹理坐标。相应地,第一纹理数据中每个顶点的纹理坐标可以占多行,每行包括顶点在一个面上的纹理坐标,当然还可以包括注释内容或者其他内容。举例来说,对于一个立方体,任一顶点同时位于三个面,则第一纹理数据中该顶点具有三个纹理坐标。
可选地,若原始三维模型封装在文件中,则获取第一材质数据的过程可以包括:解析原始三维模型的文件,得到文件中的第一材质数据。具体来说,以原始三维模型包括obj格式的文件为例,在obj格式的文件中,通常使用行头vt来标识纹理数据,则获取第一纹理数据的过程可以包括:确定原始三维模型的obj格式的文件中以vt为行头的每行数据,将得到的至少一行数据作为第一纹理数据。
以材质数据中的纹理坐标为例,在一个示例性实例中,假设原始三维模型包括顶点a1、顶点b1和顶点c1,参见图13,第一材质数据可以包括9行数据,第1行数据至第3行数据是顶点a1的纹理坐标,第4行数据至第6行数据是顶点b1的纹理坐标,第7行数据至第9行数据是顶点c1的纹理坐标。图13中的第1行数据为vt 0.488327 0.72009,表示顶点a1在第1个面上的纹理坐标为(0.488327,0.72009),其他顶点的纹理坐标与此例同理。
可选地,第一材质数据可以存储在数组中。具体来讲,以存储第一材质数据的数组称为第三数组为例,第三数组可以包括至少一个位置,第一材质数据的任一数据可以存储在第三数组的任一位置中。具体地,第一材质数据中的每个纹理坐标可以存储在第三数组的每个位置中。第三数组可以当获取到原始三维模型时,缓存在内存中,第三数组可以占用连续的内存空间。示例性地,参见图14,第三数组可以如图14所示,其中,tex(1)为第三数组的第1个位置,tex(2)为第三数组的第2个位置,以此类推。当然,第一材质数据也可以存储在数组以外的存储结构中,例如哈希表、链表、红黑树或其他存储结构中,本实施例对此不做限定。
第二材质数据是指三维水印的材质数据。第二材质数据可以包括第二贴图以及第二纹理数据。第二贴图是指三维水印的贴图,即绘制三维水印时贴到该三维水印的每个面上的图像。举例来说,参见图4和图15,假设三维水印如图4所示,则第二贴图可以如图15所示。第二纹理数据是指三维水印的纹理数据。该第二纹理数据可以包括三维水印的至少一个顶点的纹理坐标。
可选地,第二纹理数据中的纹理坐标可以按行排列,第二纹理数据中的每一行是一个纹理坐标。可选地,每个顶点可以同时位于多个面,则每个顶点可以具有多个纹理坐标。相应地,第二纹理数据中每个顶点的纹理坐标可以占多行,每行包括顶点在一个面上的纹理坐标,当然还可以包括注释内容或者其他内容。
可选地,若三维水印封装在文件中,则获取第二材质数据的过程可以包括:解析三维水印的文件,得到文件中的第二材质数据。具体来说,以三维水印包括obj格式的文件为例,获取第二纹理数据的过程可以包括:确定三维水印的obj格式的文件中以vt为行头的每行数据,将得到的至少一行数据作为第二纹理数据。
可选地,第二材质数据可以存储在数组中。具体来讲,以存储第二材质数据的数组称为第四数组为例,第四数组可以包括至少一个位置,第二材质数据的任一数据可以存储在第四数组的任一位置中。具体地,第二材质数据中的每个纹理坐标可以存储在第四数组的每个位置中。第四数组可以当获取到原始三维模型时,缓存在内存中,第四数组可以占用连续的内存空间。当然,第二材质数据也可以存储在数组以外的存储结构中,例如哈希表、链表、红黑树或其他存储结构中,本实施例对此不做限定。
目标材质数据是指目标三维模型的材质数据。目标材质数据包括第一材质数据以及第二材质数据。具体来说,目标材质数据包括目标贴图以及目标纹理数据。该目标贴图可以包括第一贴图以及第二贴图,举例来说,参见图12、图15以及图16,假设第一贴图如图12所示,第二贴图如图15所示,则目标贴图可以如图16所示。该目标纹理数据可以包括第一纹理数据以及第二纹理数据。可选地,若第一纹理数据以及第二纹理数据在水印嵌入过程中进行了更新,则该目标纹理数据可以包括更新后的第一纹理数据以及更新后的第二纹理数据。
可选地,目标材质数据可以存储在数组中。具体来讲,以存储目标材质数据的数组称为第三目标数组为例,第三目标数组可以包括至少一个位置,目标材质数组的任一数据可以存储在第三目标数组的任一位置中。具体地,目标材质数据中的每个纹理坐标可以存储在第三目标数组的每个位置中。可以当合并得到目标材质数据时,生成第三目标数组,将目标材质数据存储至该第三目标数组中,第三目标数组可以缓存在内存中,第三目标数组可以占用连续的内存空间。其中,第三目标数组可以存储第三数组中每个位置存储的数据以及第四数组中每个位置存储的数据,从而存储原始三维模型的每个材质数据以及三维水印的每个材质数据,例如存储原始三维模型的每个更新了的纹理坐标以及三维水印的每个更新了的纹理坐标。
由于目标材质数据包括原始三维模型的材质数据以及三维水印的材质数据,后续根据目标材质数据生成目标三维模型时,目标三维模型会包含原始三维模型的材质以及三维水印中材质,例如包含原始三维模型的纹理以及三维水印的纹理,因此可以保证原始三维模型的材质以及三维水印的材质均能显示完整,避免损失原始三维模型和三维水印在材质上的外观。
可选地,合并材质数据的过程可以包括以下步骤一至步骤三:
步骤一、对原始三维模型的第一贴图以及三维水印的第二贴图进行拼接,得到目标贴图。
由于目标贴图既包含原始三维模型的贴图,也包含三维水印的贴图,因此后续根据目标贴图生成目标三维模型时,可以保证目标三维模型显示完整。
关于拼接第一贴图以及第二贴图的方式,可选地,如图16所示,可以对第一贴图以及第二贴图进行水平拼接,得到目标贴图。例如可以为将第二贴图设置在第一贴图的左侧,再对第一贴图和第二贴图组合,将组合后的贴图作为目标贴图。那么,则目标贴图的长度可以根据第一贴图的长度以及第二贴图的长度的和值确定,目标贴图的宽度可以根据第一贴图的宽度以及第二贴图的宽度中的最大值。举例来说,假设第一贴图的尺寸为256*256,第二贴图的大小为128*128,则对第一贴图以及第二贴图进行拼接后,目标贴图的尺寸可以为(256+128)*256。
可选地,对第一贴图以及第二贴图进行水平拼接可以仅是拼接第一贴图以及第二贴图的一种可选方式,而非必选方式。可选地,可以采用水平拼接以外的其他方式,来拼接第一贴图以及第二贴图。例如,可以对第一贴图以及第二贴图进行垂直拼接,得到目标贴图。
步骤二、根据目标贴图,对原始三维模型的第一纹理数据以及三维水印的第二纹理数据进行更新。
可以根据目标贴图以及第一纹理数据,进行纹理映射(英文:texture mapping),得到更新后的第一纹理数据。在一种可能的实现中,可以将目标贴图映射到纹理空间中,对于第一纹理数据中的每个纹理坐标,可以根据该纹理坐标以及第一贴图,获取该纹理坐标映射的第一贴图的像素,根据目标贴图以及第一贴图的像素与目标贴图的像素之间的对应关系,可以获取该像素对应的更新后的纹理坐标,从而对该纹理坐标进行更新。
另外,可以根据目标贴图以及第二纹理数据,进行纹理映射,得到更新后的第二纹理数据。其中,更新第二纹理数据的过程与更新第一纹理数据的过程同理,在此不做赘述。
步骤三、对更新后的第一纹理数据以及更新后的第二纹理数据进行合并,得到目标纹理数据,目标纹理数据包括更新后的第一纹理数据以及更新后的第二纹理数据。
关于合并第一材质数据和第二材质数据的方式,可选地,终端可以将三维水印的第二材质数据插入至原始三维模型的第一材质数据中,得到目标材质数据。相应地,目标材质数据为插入了第二材质数据的第一材质数据。以材质数据为纹理数据为例,终端可以将三维水印的第二纹理数据插入至原始三维模型的第一纹理数据中,得到目标纹理数据。相应地,目标纹理数据为插入了第二纹理数据的第一纹理数据。
可选地,对于第二材质数据中的任一材质数据,可以将该材质数据插入到第一材质数据中的不同数据之间。其中,若第一材质数据中的每个材质数据按行排列,则将材质数据插入到第一材质数据的不同数据之间,可以包括:将数据作为第一材质数据中新增的行,插入到第一材质数据的任两行之间。若第一材质数据中的每个数据存储在第三数组中,则将数据插入到第一材质数据的不同数据之间,可以包括:从原始三维模型的第三数组中,选取两个相邻位置;将三维水印的材质数据插入至该第三数组的两个相邻位置之间。
关于获取第二材质数据中任一数据的方式,若第二材质数据存储在数组中,并假设存储第二材质数据的数组称为第四数组,可以从第四数组中的任一位置读取第二材质数据中的任一数据,例如通过数组下标查询到数组中的位置,进而从该位置读取数据。当然,第二材质数据也可以存储在数组以外的存储结构中,则可以从数组以外的存储结构中读取第二材质数据中的任一数据。
示例性地,参见图17,假设原始三维模型的第一材质数据包括3行数据,第1行数据为顶点a1的纹理坐标,第2行为顶点b1的纹理坐标,第3行为顶点c1的纹理坐标。可以将三维水印的第二材质数据中的第1行数据,例如顶点a2的纹理坐标,插入到第一材质数据的第2行数据和第3行数据之间。那么,插入后得到的目标材质数据中,第3行数据是顶点a2的纹理坐标,第4行数据是顶点c1的纹理坐标。以此类推,假设第一材质数据包括n行数据,第二材质数据包括m行数据,将第二材质数据插入至第一材质数据后,第一材质数据可以包括m+n行数据,其中,m和n是正整数。
可选地,将第二材质数据插入至第一材质数据,可以指将第二材质数据插入至原始三维模型本身具有的第一材质数据,也可以指生成第一材质数据的副本,将第二材质数据插入至第一材质数据的副本,本实施例对此不做限定。另外,将第二材质数据插入至第一材质数据,可以指根据目标贴图,对第一纹理数据以及第二纹理数据进行更新后,将更新后的第二纹理数据插入至上述更新后的第一纹理数据中,得到目标纹理数据,本实施例对此不做限定。
可选地,插入材质数据时可以采用随机插入的方式,可以将三维水印的第二材质数据随机插入至原始三维模型的第一材质数据中,得到目标材质数据。那么,目标材质数据为随机插入了第二材质数据的第一材质数据。具体来讲,对于第二材质数据中的任一数据,可以将该数据随机插入到第一材质数据中的不同数据之间。其中,若第一材质数据中的每个数据按行排列,则将数据插入到第一材质数据的不同数据之间,可以包括:将数据作为第一材质数据中新增的行,随机插入到第一材质数据的任两行之间。若第一材质数据中的每个数据存储在第三数组中,则将数据插入到第一材质数据的不同数据之间,具体可以包括以下步骤一至步骤三:
步骤一、从原始三维模型的第三数组中,随机选取两个相邻位置。
可以采用任一种随机选取方式,从第三数组的所有位置中选取两个相邻位置,本实施例对此不做限定。
步骤二、从三维水印的第四数组中,读取第二材质数据中的任一数据。
可以按照任一种预设策略,从第四数组中读取数据,本实施例对此不做限定。其中,该读取的数据可以指纹理坐标。
举例来说,可以按照第四数组中位置的顺序,依次从第四数组读取三维水印的每个材质数据。例如,先读取第四数组中第一个位置的数据,再读取第二个位置的数据,直至读取最后一个位置。以数学的方式表达,假设第四数组为tex(1)至tex(n),可以先读取tex(1)的数据,再读取tex(2)的数据,直至读取tex(n)的数据。
步骤三、将数据插入至第三数组的两个相邻位置之间。
可以在两个相邻位置之间新增一个位置,将数据插入到新增的位置中。举例来说,参见图18,可以从原始三维模型的第三数组中随机选取第5个位置和第6个位置,从三维水印的第四数组中读取tex(1),将tex(1)插入到第5个位置和第6个位置之间。同理地,从原始三维模型的第三数组中随机选取第8个位置和第9个位置,从三维水印的第四数组中读取tex(2),将tex(2)插入到第8个位置和第9个位置之间。
通过随机插入三维水印的材质数据,达到的效果至少可以包括:
首先,通过将三维水印的第四数组中的数据插入到原始三维模型的第三数组中,可以达到将第三数组和第四数组合并的功能,也就达到了将第一材质数据和第二材质数据合并的功能。以插入数据后的第三数组称为第三目标数组为例,由于第三目标数组中既存储了原始三维模型的材质数据,也存储了三维水印的材质数据,后续基于第三目标数组显示目标三维模型时,既可以显示出原始三维模型的材质,也可以显示出三维水印的材质,从而呈现嵌入了三维水印的原始三维模型的显示效果。
其次,三维水印中每个材质数据在目标材质数据中的位置具有随机性,例如顶点a2的材质数据位于第2行,顶点b2的材质数据位于第10行,顶点c2的材质数据位于第8行,因此,无法轻易从目标三维模型中去除或修改三维水印。并且,一旦从目标三维模型中去除或修改三维水印失败,会导致目标三维模型中不同材质数据错位,导致目标三维模型的材质数据混乱,因此能够防止从目标三维模型中去除或修改三维水印。综上,可以实现加密嵌入三维水印的功能,有效的保证原始三维模型的版权,从而更好地推广三维模型这种数字资产。
可选地,插入材质数据时可以采用离散插入的方式,可以将三维水印的第二材质数据离散插入至原始三维模型的第一材质数据中,得到目标材质数据。具体来说,可以将第二材质数据中的不同数据插入到第一材质数据中的不同位置,以使第二材质数据中的多个数据尽量在第一材质数据中不相邻。
需要说明的第一点是,随机插入可以是插入水印模型的第二材质数据的可选方式,而非必选方式。可选地,也可以采用随机插入以外的其他方式来插入水印模型的第二材质数据。举例来说,将第四数组中的每个数据依次插入到第三数组中每两个相邻位置之间,例如依次插入到第三数组中的第1个位置和第2个位置之间、第2个位置和第3个位置之间,直至数据插入结束位置。当然也可以按照其他方式插入第二材质数据,本实施例对此不做限定。
需要说明的第二点是,插入水印模型的第二材质数据可以仅是合并两种三维模型的材质数据的可选方式,而非必选方式。可选地,也可以采用插入第二材质数据以外的其他方式来合并两种三维模型的材质数据。例如,可以按照任一种预设策略,对三维水印的第二材质数据以及原始三维模型的第一材质数据进行排序和组合,得到目标材质数据,可以将第一材质数据和第二材质数据顺序拼接为目标材质数据,又如可以按照第三数组中位置从先至后的顺序,依次将第四数组中的每个数据依次插入到每两个相邻位置之间,当然也可以按照其他方式插入第二材质数据,本实施例对此不做限定。
205、终端根据目标材质数据、第一材质数据对应的第三索引数据以及第二材质数据对应的第四索引数据,生成目标材质数据对应的第二目标索引数据。
第三索引数据用于查询原始三维模型中对应的材质数据。具体来说,第一材质数据可以包括原始三维模型的至少一个材质数据,相应地,第三索引数据可以包括原始三维模型的至少一个材质数据的索引。以第三索引数据中任一索引称为第三索引为例,每个第三索引可以和第一材质数据中的每个材质数据一一对应,任一第三索引用于查询该第三索引对应的材质数据。例如,第三索引可以用于查询原始三维模型中对应的纹理数据,具体来说,第三索引可以用于查询原始三维模型任一顶点的纹理坐标。可选地,若第一材质数据中的每个材质数据占一行,相应地,每个第三索引可以为行标识。该行标识用于标识对应材质数据所处的行,可以为行号。
需要说明的第一点是,第一索引数据以及第三索引数据可以携带在同一文件中,进一步地,第一索引数据以及第三索引数据中相同顶点对应的索引可以位于该文件的同一位置,第一索引与第三索引可以通过预设符号隔开,该预设符号可以为“/”,当然也可以为程序语言中的其他符号。示例性地,在原始三维模型的obj文件中,任一顶点的顶点数据的索引以及该顶点的材质数据的索引可以位于同一位置,例如均位于第i行第j个位置,该位置上“/”左侧的数值表示顶点的顶点数据的索引,“/”右侧的数值表示顶点的材质数据的索引。
举例来说,假设obj文件中第1行的面索引为f 1/2 2/1 3/3,可知第1个三角面上的第1个顶点对应的索引为“1/2”,第1个三角面上的第2个顶点对应的索引为“2/1”,第1个三角面上的第3个顶点对应的索引为“3/3”。其中,“1/2”表示:第1个三角面上的第1个顶点的顶点数据的索引是1,第1个三角面上的第1个顶点的材质数据的索引是2。
可选地,若原始三维模型封装在文件中,则获取第一材质数据的过程可以包括:解析原始三维模型的文件,得到文件中的第一材质数据。
可选地,第三索引数据可以存储在数组中。具体来讲,以存储第三索引数据的数组称为第七数组为例,第七数组可以包括至少一个位置,任一第三索引可以存储在第七数组的任一位置中。第七数组可以当获取到原始三维模型时,缓存在内存中,第七数组可以占用连续的内存空间。当然,第三索引数据也可以存储在数组以外的存储结构中,例如哈希表、链表、红黑树或其他存储结构中,本实施例对此不做限定。
第四索引数据用于查询三维水印中对应的材质数据。具体来说,第二材质数据可以包括三维水印的至少一个材质数据,相应地,第四索引数据可以包括三维水印的至少一个材质数据的索引。以第四索引数据中任一索引称为第四索引为例,每个第四索引可以和第二材质数据中的每个材质数据一一对应,任一第四索引用于查询该第四索引对应的材质数据,例如,第四索引用于查询三维水印中对应的纹理数据,具体来说,第四索引可以用于查询三维水印中对应的纹理坐标。可选地,若第二材质数据中的每个材质数据占一行,相应地,每个第四索引可以为行标识。该行标识用于标识对应材质数据所处的行,可以为行号。可选地,若三维水印封装在文件中,则获取第二材质数据的过程可以包括:解析三维水印的文件,得到文件中的第二材质数据。
可选地,第四索引数据可以存储在数组中。具体来讲,以存储第四索引数据的数组称为第八数组为例,第八数组可以包括至少一个位置,任一第四索引可以存储在第八数组的任一位置中。第八数组可以当获取到三维水印时,缓存在内存中,第八数组可以占用连续的内存空间。当然,第四索引数据也可以存储在数组以外的存储结构中,例如哈希表、链表、红黑树或其他存储结构中,本实施例对此不做限定。
第二目标索引数据用于查询目标三维模型中对应的材质数据。目标材质数据可以包括目标三维模型的至少一个材质数据,相应地,第二目标索引数据可以包括目标三维模型的至少一个材质数据的索引,第二目标索引数据中的每个索引和目标材质数据中的每个材质数据一一对应,任一索引用于查询该索引对应的材质数据,例如查询该索引对应的纹理数据,具体来说,可以用于查询该索引对应的纹理坐标。可选地,若目标材质数据中的每个数据占一行,相应地,第二目标索引数据中的每个索引可以为行标识。该行标识用于标识对应数据所处的行,可以为行号。
可选地,第二目标索引数据可以存储在数组中。具体来讲,以存储第二目标索引数据的数组称为第四目标数组为例,第四目标数组可以包括至少一个位置,第二目标索引数据中的任一索引可以存储在第四目标数组的任一位置中。第四目标数组可以由第七数组以及第八数组合并得到,例如可以将插入了第八数组中的索引的第七数组,作为第四目标数组。第四目标数组可以占用连续的内存空间。当然,第二目标索引数据也可以存储在数组以外的存储结构中,例如哈希表、链表、红黑树或其他存储结构中,本实施例对此不做限定。
以第二目标索引数据中任一索引称为第二目标索引为例,第二目标索引指向的数据可以包括以下情况(1)至情况(2)中的任一项:
情况(1)第二目标索引指向的数据与对应的第三索引指向的数据相同。
该第三索引是指第三索引数据中的任一索引,第三索引指向的数据可以是第一材质数据中的数据,具体可以是纹理数据,例如为原始三维模型的纹理坐标。关于第二目标索引和第三索引之间的对应关系,任一第二目标索引和任一第三索引对应,可以指第二目标索引在第二目标索引数据中的位置和第三索引在第三索引数据中的位置相同。具体来讲,若索引数据按行排列,每行包括多个索引,则第二目标索引和第三索引对应,可以指第二目标索引在第二目标索引数据中所处的行以及在该行中所处的位置,和第三索引在第三索引数据中所处的行以及在该行中所处的位置相同。另外,若索引数据存储在数组中,则第二目标索引和第三索引对应,可以指第二目标索引在第四目标数组中的位置与第三索引在第七数组中的位置相同。例如,第二目标索引在第四目标数组的数组下标与第三索引在第七数组的数组下标相同。
举例来说,假设第二目标索引数据为f 1 2 4,其中1指向目标材质数据中的第1行数据vt 0.488327 0.72009,2指向目标材质数据中的第2行数据vt 0.482076 0.725646,4指向目标材质数据中的第4行数据vt 0.480363 0.706376。第三索引数据为f 1 2 3,其中1指向第一材质数据的第1行数据vt 0.488327 0.72009,2指向第一材质数据的第2行数据vt0.482076 0.725646,3指向第一材质数据的第3行数据vt 0.480363 0.706376,则第二目标索引数据中的1对应于第三索引数据中的1,第二目标索引数据中的2对应于第三索引数据中的2,第二目标索引数据中的4对应于第三索引数据中的3。
在情况(1)中达到的效果至少可以包括:
由于第二目标索引数据中的第二目标索引指向的数据与第三索引数据中对应的第三索引指向的数据相同,通过第二目标索引查找到的数据,会与通过第三索引查找到的数据相同。那么生成的目标三维模型在实现嵌入三维水印的功能的基础上,避免了对原始三维模型的材质数据的修改,那么目标三维模型中的顶点的材质数据可以和原始三维模型中顶点的材质数据保持一致,目标三维模型中的原始三维模型的外观也就可以和原始三维模型本身的外观保持一致,从而避免影响原始三维模型的视觉效果,避免原始三维模型由于水印的嵌入而破坏原有的使用价值。
情况(2)第二目标索引指向的数据与第四索引指向的数据相同。
第四索引是指第四索引数据中的任一索引,第四索引指向的数据可以是第二材质数据中的数据,具体可以是纹理数据,例如为三维水印的纹理坐标。
关于第二目标索引和第四索引之间的对应关系,任一第二目标索引和任一第四索引对应,可以指第二目标索引在第二目标索引数据中的位置和第四索引在第四索引数据中的位置相同。具体来讲,若索引数据按行排列,每行包括多个索引,则第二目标索引和第四索引对应,可以指第二目标索引在第二目标索引数据中所处的行以及在该行中所处的位置,和第四索引在第四索引数据中所处的行以及在该行中所处的位置相同。另外,若索引数据存储在数组中,则第二目标索引和第四索引对应,可以指第二目标索引在第四目标数组中的位置与第四索引在第八数组中的位置相同。例如,第二目标索引在第四目标数组的数组下标与第四索引在第八数组的数组下标相同。
举例来说,假设第二目标索引数据为f 1 2 4,其中1指向目标材质数据中的第1行数据vt 0.488327 0.72009,2指向目标材质数据中的第2行数据vt 0.482076 0.725646,4指向目标材质数据中的第4行数据vt 0.480363 0.706376。第四索引数据为f 1 2 3,其中1指向第二材质数据的第1行数据vt 0.488327 0.72009,2指向第二材质数据的第2行数据vt0.482076 0.725646,3指向第二材质数据的第3行数据vt 0.480363 0.706376,则第二目标索引数据中的1对应于第四索引数据中的1,第二目标索引数据中的2对应于第四索引数据中的2,第二目标索引数据中的4对应于第四索引数据中的3。
在情况(2)中达到的效果至少可以包括:
由于第二目标索引数据中的第二目标索引指向的数据与第四索引数据中对应的第四索引指向的数据相同,通过第二目标索引查找到的数据,会与通过对应的第四索引查找到的数据相同,则目标三维模型中对应顶点的材质会与三维水印中对应顶点的材质相同。那么生成的目标三维模型在实现嵌入三维水印的功能的基础上,避免了对三维水印的材质数据的修改,那么目标三维模型中的顶点的数据可以和三维水印中顶点的数据保持一致,目标三维模型中的三维水印的外观也就可以和三维水印本身的外观保持一致,从而避免影响三维水印的视觉效果,避免三维水印由于水印的嵌入而破坏原有的使用价值。
可选地,生成第二目标索引数据的过程可以包括以下步骤一至步骤二:
步骤一、对第三索引数据以及第四索引数据进行合并,得到第二候选目标索引数据。
第二候选目标索引数据是指第三索引数据以及第四索引数据合并后得到的数据,第二候选目标索引数据包括第三索引数据以及第四索引数据。其中,合并第三索引数据以及第四索引数据的方式可以和合并第一顶点数据和第二顶点数据的方式同理。具体来说,可以将第四索引数据插入至第三索引数据中。例如,插入第四索引数据中任一第四索引的过程可以包括:从原始三维模型的第七数组中,选取两个相邻位置;从三维水印的第八数组中,读取第四索引数据中的任一第四索引;将第四索引插入至该第七数组的两个相邻位置之间。
步骤二、根据目标材质数据,对第二候选目标索引数据进行更新,得到第二目标索引数据。
可选地,对第二候选目标索引数据进行更新的过程可以包括以下步骤(1.1)至步骤(1.2)。
步骤(1.1)对于该第三索引数据中的任一第三索引,根据该第三索引指向的数据,获取该数据在该目标材质数据中的第三位置。
第三位置是指第一材质数据中的任一数据在目标材质数据中所处的位置,第三索引可以用于标识该第三位置。其中,若目标材质数据中每个数据占一行,则获取第一材质数据中的数据在目标材质数据中的第三位置,可以指获取第一材质数据中的数据在目标材质数据中所处的行。另外,若目标材质数据存储在第三目标数组中,则获取数据在目标材质数据中的第三位置,可以指获取数据在第三目标数组中所处的位置,例如获取数据在第三目标数组的数组下标,将该数组下标作为第三位置。
步骤(1.2)、将该第二候选目标索引数据中该第三索引对应的第二候选索引更新为标识该第三位置的索引。
其中,由于第二候选索引在第二候选目标索引数据中所处的行以及在该行中所处的位置,和步骤(1.1)中的第三索引在第三索引数据中所处的行以及在该行中所处的位置相同。通过更新第二候选索引,可以令第二候选索引指向该第三索引指向的数据,即令目标三维模型的材质的索引指向原始三维模型的材质的数据,因此可以达到刷新第二候选目标索引数据的功能。另外,将第二候选索引更新为标识该第三位置的索引后,可以将更新了的第二候选索引作为上文中的第二目标索引,依次类推,将包含了每个第二候选索引的第二候选目标索引,即更新了的第二候选目标索引数据作为第二目标索引数据。
可选地,对第二候选目标索引数据进行更新的过程可以包括以下步骤(2.1)至步骤(2.1)。
步骤(2.1)对于该第四索引数据中的任一第四索引,根据该第四索引指向的数据,获取该数据在该目标材质数据中的第四位置。
第四位置是指第二材质数据中的任一数据在目标材质数据中所处的位置,第四索引可以用于标识该第四位置。其中,若目标材质数据中每个数据占一行,则获取第二材质数据中的数据在目标材质数据中的第四位置,可以指获取第二材质数据中的数据在目标材质数据中所处的行。另外,若目标材质数据存储在第三目标数组中,则获取数据在目标材质数据中的第四位置,可以指获取数据在第三目标数组中所处的位置,例如获取数据在第三目标数组的数组下标,将该数组下标作为第四位置。
步骤(2.2)将该第二候选目标索引数据中该第四索引对应的第二候选索引更新为标识该第四位置的索引。
其中,由于第二候选索引在第二候选目标索引数据中所处的行以及在该行中所处的位置,和步骤(1.1)中的第四索引在第四索引数据中所处的行以及在该行中所处的位置相同。通过更新第二候选索引,可以令第二候选索引指向该第四索引指向的数据,即令目标三维模型的材质的索引指向三维水印的材质的数据,因此可以达到刷新第二候选目标索引数据的功能。另外,将第二候选索引更新为标识该第四位置的索引后,可以将更新了的第二候选索引作为上文中的第二目标索引,依次类推,将包含了每个第二候选索引的第二候选目标索引,即更新了的第二候选目标索引数据作为第二目标索引数据。
可选地,可以择一执行本步骤204中的步骤(1.1)至步骤(1.2)或上述步骤(2.1)至步骤(2.2),也可以执行本步骤204中的上述步骤(1.1)至步骤(1.2)以及上述步骤(2.1)至步骤(2.2),本实施例对此不做限定。
综上所述,参见图19,当生成目标材质数据后,可以将目标材质数据中的每个材质数据在目标材质数据中的索引(第二目标索引)一一映射到第四目标数组中,以使第四目标数组存储了目标三维模型中每个材质数据的索引。
需要说明的是,上述步骤202至步骤203、步骤204至步骤205可以先后执行,例如,先执行步骤202至步骤203,再执行步骤204至步骤205。另外,上述步骤202至步骤203、步骤204至步骤205可以并行执行,例如,执行步骤201后,同时执行步骤202以及步骤204,本实施例对此不做限定。
206、终端根据目标顶点数据以及目标材质数据,生成目标三维模型,目标三维模型包括原始三维模型以及三维水印。
该目标三维模型的显示效果可以包括:原始三维模型和三维水印相邻。例如,三维水印可以位于原始三维模型的右下角。举例来说,目标三维模型可以如图20所示。进一步地,请参见图21,图21为目标三维模型的各个角度的效果图,通过对比图21以及图3可见,图21中的人物模型和图3中的人物模型的外观保持一致,可见本实施例不仅实现了水印嵌入功能,而且能够避免对原始三维模型的外观的影响。
可选地,在显示该目标三维模型时,可以根据目标三维模型的第一目标索引数据,查询到目标三维模型中每个顶点的数据,根据每个顶点的数据,显示目标三维模型。其中,由于该第一目标索引数据进行了更新,该目标三维模型中每个顶点的显示效果可以和原始三维模型中对应顶点的显示效果相同,或者和三维水印中对应顶点的显示效果相同。另外,可以根据第二目标索引数据,查询到目标三维模型的材质数据,从而根据材质数据,显示目标三维模型。其中,由于该第二目标索引数据进行了更新,该目标三维模型任一材质可以和原始三维模型中对应材质相同,或者和三维水印中对应材质相同。
可以对目标顶点数据以及目标材质数据进行封装,得到目标三维模型。其中,可以将第一目标索引数据作为目标顶点数据的索引,将第二目标索引数据作为目标材质数据的索引,以生成目标三维模型。可选地,可以将目标顶点数据以及目标索引数据存入文件,将该文件作为目标三维模型。
可选地,可以分享目标三维模型,以使分享对象可以得到该目标三维模型。具体来说,可以当接收到分享指令时,根据该分享指令获取分享对象,将目标三维模型发送给该分享对象。其中,目标三维模型的分享对象可以包括微博、即时通信应用、用户的好友或其他社交平台,分享指令可以通过对分享选项的点击操作触发,或者通过语音操作以及其他输入操作触发,本实施例对此不做限定。
可选地,可以对目标三维模型进行格式转换,例如可以将目标三维模型转换为二进制格式。举例来说,可以将目标三维模型从OBJ格式转换为glb格式。另外,可以分享转换后的目标三维模型。通过对目标三维模型进行格式转换,可以减少目标三维模型的数据量,提高分享目标三维模型的速度。
在一个示例性应用场景中,参见图22,模型设计师设计出三维模型后,可以使用本实施例提供的水印嵌入方法,向三维模型添加三维水印,然后将添加了三维水印的目标三维模型分发给用户,用户可以将目标三维模型分享至社交平台或留作其他用户。对于模型设计师,本实施例能够有效地保护三维模型这种数字资产的版权。对于模型使用者来说,本实施例够声明模型使用版权,让使用者能够更放心地使用模型文件。
本实施例提供的方法,提供了一种适用于3D领域的水印嵌入方法。通过将原始三维模型以及三维水印的顶点数据合并,将原始三维模型以及三维水印的材质数据合并,可以将原始三维模型以及三维水印合成为一个三维模型,从而将三维水印无缝地嵌入到原始三维模型中,从而有效地保护三维模型的版权。进一步地,三维模型在嵌入水印前后,能够实现外观保持不变,从而避免水印的嵌入对原始三维模型的外观造成的影响,也就避免水印的嵌入对原始三维模型本身的使用价值造成损失,保证三维模型的显示效果。进一步地,可以实现加密嵌入三维水印的功能,无法轻易从目标三维模型中去除或修改三维水印,有效的保证原始三维模型的版权,从而更好地推广三维模型这种数字资产。
基于上述各实施例,本实施例提供了一种水印嵌入装置,参见图23,该装置包括:获取模块2301、合并模块2302和生成模块2303。
获取模块2301,用于执行上述步骤201;
合并模块2302,用于执行上述步骤202以及步骤204;
生成模块2303,用于执行上述步骤206。
可选地,该合并模块2302,用于将该三维水印的第二顶点数据插入至该原始三维模型的第一顶点数据中。
可选地,该合并模块2302,用于将该三维水印的第二顶点数据随机插入至该原始三维模型的第一顶点数据中。
可选地,该合并模块2302,用于执行上述步骤202中的步骤一至步骤三。
可选地,该生成模块2303,用于执行上述步骤203;
可选地,该生成模块2303,用于执行上述步骤203中的步骤一至步骤二。
可选地,该合并模块2302,用于将该三维水印的第二材质数据插入至该原始三维模型的第一材质数据中。
可选地,该合并模块2302,用于将该三维水印的第二材质数据随机插入至该原始三维模型的第一材质数据中。
可选地,该合并模块2302,用于执行上述步骤204中的步骤一至步骤三。
可选地,该生成模块2303,用于执行上述步骤205;
可选地,该生成模块2303,用于执行上述步骤205中的步骤一至步骤二。
上述各个模板可以基于处理器加存储器的硬件来实现,也即可以通过处理器运行存储在存储器中的软件代码来执行相应的软件,上述各个模块具体可以是软件中执行相应功能的软件模块。
上述所有可选技术方案,可以采用任意结合形成本申请的可选实施例,在此不再一一赘述。
需要说明的是:上述实施例提供的水印嵌入装置在嵌入水印时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将终端的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的水印嵌入装置与水印嵌入方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
在一个示例性实施例中,本申请还提供了一种包含指令的计算机程序产品,当其在计算机设备上运行时,使得该计算机设备能够实现上述实施例中水印嵌入方法所执行的操作。
在一个示例性实施例中,本申请还提供了一种芯片,所述芯片包括处理器和/或程序指令,当所述芯片运行时,实现上述实施例中水印嵌入方法所执行的操作。
上述所有可选技术方案,可以采用任意结合形成本申请的可选实施例,在此不再一一赘述。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机程序指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机程序指令可以从一个网站站点、计算机、服务器或数据中心通过有线或无线方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如软盘、硬盘、磁带)、光介质(例如,数字视频光盘(digital video disc,DVD)、或者半导体介质(例如固态硬盘)等。
本申请中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本申请中的字符“/”,一般表示前后关联对象是一种“或”的关系。
本申请中术语“多个”的含义是指两个或两个以上,例如,多个数据包是指两个或两个以上的数据包。
本申请中术语“第一”“第二”等字样用于对作用和功能基本相同的相同项或相似项进行区分,本领域技术人员可以理解,“第一”“第二”等字样不对数量和执行顺序进行限定。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (30)
1.一种水印嵌入方法,其特征在于,所述方法包括:
获取原始三维模型以及三维水印;
对所述原始三维模型的第一顶点数据以及所述三维水印的第二顶点数据进行合并,得到目标顶点数据,所述目标顶点数据包括所述第一顶点数据以及所述第二顶点数据;
对所述原始三维模型的第一材质数据以及所述三维水印的第二材质数据进行合并,得到目标材质数据,所述目标材质数据包括所述第一材质数据以及所述第二材质数据;
根据所述目标顶点数据以及所述目标材质数据,生成目标三维模型,所述目标三维模型包括所述原始三维模型以及所述三维水印。
2.根据权利要求1所述的方法,其特征在于,所述对所述原始三维模型的第一顶点数据以及所述三维水印的第二顶点数据进行合并,包括:
将所述三维水印的第二顶点数据插入至所述原始三维模型的第一顶点数据中。
3.根据权利要求2所述的方法,其特征在于,所述将所述三维水印的第二顶点数据插入至所述原始三维模型的第一顶点数据中,包括:
将所述三维水印的第二顶点数据随机插入至所述原始三维模型的第一顶点数据中。
4.根据权利要求3所述的方法,其特征在于,所述将所述三维水印的第二顶点数据随机插入至所述原始三维模型的第一顶点数据中,包括:
从所述原始三维模型的第一数组中,随机选取两个相邻位置,所述第一数组中的每个位置用于存储所述第一顶点数据中的每个数据;
从所述三维水印的第二数组中,读取所述第二顶点数据中的任一数据,所述第二数组中的每个位置用于存储所述第二顶点数据中的每个数据;
将所述数据插入至所述两个相邻位置之间。
5.根据权利要求1所述的方法,其特征在于,所述对所述原始三维模型的第一顶点数据以及所述三维水印的第二顶点数据进行合并之后,所述方法还包括:
根据所述目标顶点数据、所述第一顶点数据对应的第一索引数据以及所述第二顶点数据对应的第二索引数据,生成所述目标顶点数据对应的第一目标索引数据;
其中,所述第一目标索引数据中任一第一目标索引指向的数据,与所述第一索引数据中对应的第一索引指向的数据相同,或者与所述第二索引数据中对应的第二索引指向的数据相同。
6.根据权利要求5所述的方法,其特征在于,所述根据所述目标顶点数据、所述第一顶点数据对应的第一索引数据以及所述第二顶点数据对应的第二索引数据,生成所述目标顶点数据对应的第一目标索引数据,包括:
对所述第一索引数据以及所述第二索引数据进行合并,得到第一候选目标索引数据,所述第一候选目标索引数据包括所述第一索引数据以及所述第二索引数据;
根据所述目标顶点数据,对所述第一候选目标索引数据进行更新,得到所述第一目标索引数据。
7.根据权利要求6所述的方法,其特征在于,所述根据所述目标顶点数据,对所述第一候选目标索引数据进行更新,包括:
对于所述第一索引数据中的任一第一索引,根据所述第一索引指向的数据,获取所述数据在所述目标顶点数据中的第一位置;将所述第一候选目标索引数据中所述第一索引对应的第一候选索引更新为标识所述第一位置的索引;或者,
对于所述第二索引数据中的任一第二索引,根据所述第二索引指向的数据,获取所述数据在所述目标顶点数据中的第二位置;将所述第一候选目标索引数据中所述第二索引对应的第一候选索引更新为标识所述第二位置的索引。
8.根据权利要求1所述的方法,其特征在于,所述对所述原始三维模型的第一材质数据以及所述三维水印的第二材质数据进行合并,包括:
将所述三维水印的第二材质数据插入至所述原始三维模型的第一材质数据中。
9.根据权利要求8所述的方法,其特征在于,所述将所述三维水印的第二材质数据插入至所述原始三维模型的第一材质数据中,包括:
将所述三维水印的第二材质数据随机插入至所述原始三维模型的第一材质数据中。
10.根据权利要求9所述的方法,其特征在于,所述将所述三维水印的第二材质数据随机插入至所述原始三维模型的第一材质数据中,包括:
从所述原始三维模型的第三数组中,随机选取两个相邻位置,所述第三数组中的每个位置用于存储所述第一材质数据中的每个数据;
从所述三维水印的第四数组中,读取所述第二材质数据中的任一数据,所述第四数组中的每个位置用于存储所述第二材质数据中的每个数据;
将所述数据插入至所述两个相邻位置之间。
11.根据权利要求1所述的方法,其特征在于,所述对所述原始三维模型的第一材质数据以及所述三维水印的第二材质数据进行合并,包括:
对所述原始三维模型的第一贴图以及所述三维水印的第二贴图进行拼接,得到目标贴图;
根据所述目标贴图,对所述原始三维模型的第一纹理数据以及所述三维水印的第二纹理数据进行更新;
对更新后的第一纹理数据以及更新后的第二纹理数据进行合并,得到目标纹理数据,所述目标纹理数据包括所述更新后的第一纹理数据以及所述更新后的第二纹理数据。
12.根据权利要求1所述的方法,其特征在于,所述对所述原始三维模型的第一材质数据以及所述三维水印的第二材质数据进行合并之后,所述方法还包括:
根据所述目标材质数据、所述第一材质数据对应的第三索引数据以及所述第二材质数据对应的第四索引数据,生成所述目标材质数据对应的第二目标索引数据;
其中,所述第二目标索引数据中任一第二目标索引指向的数据,与所述第三索引数据中对应的第三索引指向的数据相同,或者与所述第四索引数据中对应的第四索引指向的数据相同。
13.根据权利要求12所述的方法,其特征在于,所述根据所述目标材质数据、所述第一材质数据对应的第三索引数据以及所述第二材质数据对应的第四索引数据,生成所述目标材质数据对应的第二目标索引数据,包括:
对所述第三索引数据以及所述第四索引数据进行合并,得到第二候选目标索引数据,所述第二候选目标索引数据包括所述第三索引数据以及所述第四索引数据;
根据所述目标材质数据,对所述第二候选目标索引数据进行更新,得到所述第二目标索引数据。
14.根据权利要求13所述的方法,其特征在于,所述根据所述目标材质数据,对所述第二候选目标索引数据进行更新,得到所述第二目标索引数据,包括:
对于所述第三索引数据中的任一第三索引,根据所述第三索引指向的数据,获取所述数据在所述目标材质数据中的第三位置;将所述第二候选目标索引数据中所述第三索引对应的第二候选索引更新为标识所述第三位置的索引;或者,
对于所述第四索引数据中的任一第四索引,根据所述第四索引指向的数据,获取所述数据在所述目标材质数据中的第四位置;将所述第二候选目标索引数据中所述第四索引对应的第二候选索引更新为标识所述第四位置的索引。
15.一种水印嵌入装置,其特征在于,所述装置包括:
获取模块,用于获取原始三维模型以及三维水印;
合并模块,用于对所述原始三维模型的第一顶点数据以及所述三维水印的第二顶点数据进行合并,得到目标顶点数据,所述目标顶点数据包括所述第一顶点数据以及所述第二顶点数据;
所述合并模块,还用于对所述原始三维模型的第一材质数据以及所述三维水印的第二材质数据进行合并,得到目标材质数据,所述目标材质数据包括所述第一材质数据以及所述第二材质数据;
生成模块,用于根据所述目标顶点数据以及所述目标材质数据,生成目标三维模型,所述目标三维模型包括所述原始三维模型以及所述三维水印。
16.根据权利要求15所述的装置,其特征在于,所述合并模块,用于将所述三维水印的第二顶点数据插入至所述原始三维模型的第一顶点数据中。
17.根据权利要求16所述的装置,其特征在于,所述合并模块,用于将所述三维水印的第二顶点数据随机插入至所述原始三维模型的第一顶点数据中。
18.根据权利要求17所述的装置,其特征在于,所述合并模块,用于从所述原始三维模型的第一数组中,随机选取两个相邻位置,所述第一数组中的每个位置用于存储所述第一顶点数据中的每个数据;从所述三维水印的第二数组中,读取所述第二顶点数据中的任一数据,所述第二数组中的每个位置用于存储所述第二顶点数据中的每个数据;将所述数据插入至所述两个相邻位置之间。
19.根据权利要求15所述的装置,其特征在于,所述生成模块,用于根据所述目标顶点数据、所述第一顶点数据对应的第一索引数据以及所述第二顶点数据对应的第二索引数据,生成所述目标顶点数据对应的第一目标索引数据;
其中,所述第一目标索引数据中任一第一目标索引指向的数据,与所述第一索引数据中对应的第一索引指向的数据相同,或者与所述第二索引数据中对应的第二索引指向的数据相同。
20.根据权利要求19所述的装置,其特征在于,所述生成模块,用于对所述第一索引数据以及所述第二索引数据进行合并,得到第一候选目标索引数据,所述第一候选目标索引数据包括所述第一索引数据以及所述第二索引数据;根据所述目标顶点数据,对所述第一候选目标索引数据进行更新,得到所述第一目标索引数据。
21.根据权利要求20所述的装置,其特征在于,所述生成模块,用于对于所述第一索引数据中的任一第一索引,根据所述第一索引指向的数据,获取所述数据在所述目标顶点数据中的第一位置;将所述第一候选目标索引数据中所述第一索引对应的第一候选索引更新为标识所述第一位置的索引;或者,对于所述第二索引数据中的任一第二索引,根据所述第二索引指向的数据,获取所述数据在所述目标顶点数据中的第二位置;将所述第一候选目标索引数据中所述第二索引对应的第一候选索引更新为标识所述第二位置的索引。
22.根据权利要求15所述的装置,其特征在于,所述合并模块,用于将所述三维水印的第二材质数据插入至所述原始三维模型的第一材质数据中。
23.根据权利要求22所述的装置,其特征在于,所述合并模块,用于将所述三维水印的第二材质数据随机插入至所述原始三维模型的第一材质数据中。
24.根据权利要求23所述的装置,其特征在于,所述合并模块,用于从所述原始三维模型的第三数组中,随机选取两个相邻位置,所述第三数组中的每个位置用于存储所述第一材质数据中的每个数据;从所述三维水印的第四数组中,读取所述第二材质数据中的任一数据,所述第四数组中的每个位置用于存储所述第二材质数据中的每个数据;将所述数据插入至所述两个相邻位置之间。
25.根据权利要求15所述的装置,其特征在于,所述合并模块,用于对所述原始三维模型的第一贴图以及所述三维水印的第二贴图进行拼接,得到目标贴图;根据所述目标贴图,对所述原始三维模型的第一纹理数据以及所述三维水印的第二纹理数据进行更新;对更新后的第一纹理数据以及更新后的第二纹理数据进行合并,得到目标纹理数据,所述目标纹理数据包括所述更新后的第一纹理数据以及所述更新后的第二纹理数据。
26.根据权利要求15所述的装置,其特征在于,所述生成模块,用于根据所述目标材质数据、所述第一材质数据对应的第三索引数据以及所述第二材质数据对应的第四索引数据,生成所述目标材质数据对应的第二目标索引数据;
其中,所述第二目标索引数据中任一第二目标索引指向的数据,与所述第三索引数据中对应的第三索引指向的数据相同,或者与所述第四索引数据中对应的第四索引指向的数据相同。
27.根据权利要求26所述的装置,其特征在于,所述生成模块,用于对所述第三索引数据以及所述第四索引数据进行合并,得到第二候选目标索引数据,所述第二候选目标索引数据包括所述第三索引数据以及所述第四索引数据;根据所述目标材质数据,对所述第二候选目标索引数据进行更新,得到所述第二目标索引数据。
28.根据权利要求27所述的装置,其特征在于,所述生成模块,用于对于所述第三索引数据中的任一第三索引,根据所述第三索引指向的数据,获取所述数据在所述目标材质数据中的第三位置;将所述第二候选目标索引数据中所述第三索引对应的第二候选索引更新为标识所述第三位置的索引;或者,对于所述第四索引数据中的任一第四索引,根据所述第四索引指向的数据,获取所述数据在所述目标材质数据中的第四位置;将所述第二候选目标索引数据中所述第四索引对应的第二候选索引更新为标识所述第四位置的索引。
29.一种终端,其特征在于,所述终端包括处理器和存储器,所述存储器中存储有至少一条指令,所述指令由所述处理器加载并执行以实现如权利要求1至权利要求14任一项所述的水印嵌入方法所执行的操作。
30.一种计算机可读存储介质,其特征在于,所述存储介质中存储有至少一条指令,所述指令由处理器加载并执行以实现如权利要求1至权利要求14任一项所述的水印嵌入方法所执行的操作。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811198415.9A CN109544433B (zh) | 2018-10-15 | 2018-10-15 | 水印嵌入方法、装置、终端及存储介质 |
EP19874552.3A EP3783562A4 (en) | 2018-10-15 | 2019-10-14 | PROCESS AND DEVICE FOR INCORPORATING WATERMARKS, TERMINALS AND INFORMATION MEDIA |
PCT/CN2019/111052 WO2020078323A1 (zh) | 2018-10-15 | 2019-10-14 | 水印嵌入方法、装置、终端及存储介质 |
US17/138,099 US11869112B2 (en) | 2018-10-15 | 2020-12-30 | Watermark embedding method and apparatus, terminal, and storage medium |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811198415.9A CN109544433B (zh) | 2018-10-15 | 2018-10-15 | 水印嵌入方法、装置、终端及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109544433A true CN109544433A (zh) | 2019-03-29 |
CN109544433B CN109544433B (zh) | 2021-01-15 |
Family
ID=65843954
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811198415.9A Active CN109544433B (zh) | 2018-10-15 | 2018-10-15 | 水印嵌入方法、装置、终端及存储介质 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11869112B2 (zh) |
EP (1) | EP3783562A4 (zh) |
CN (1) | CN109544433B (zh) |
WO (1) | WO2020078323A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020078323A1 (zh) * | 2018-10-15 | 2020-04-23 | 华为技术有限公司 | 水印嵌入方法、装置、终端及存储介质 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20220230392A1 (en) * | 2021-01-19 | 2022-07-21 | Seek Xr, Inc. | Systems and methods for implementing source identifiers into 3d content |
WO2024024099A1 (ja) * | 2022-07-29 | 2024-02-01 | 株式会社Vrc | 情報処理システム及び情報処理方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020060685A1 (en) * | 2000-04-28 | 2002-05-23 | Malcolm Handley | Method, system, and computer program product for managing terrain rendering information |
CN102999881A (zh) * | 2012-12-20 | 2013-03-27 | 福建师范大学 | 具有鲁棒性的三维模型脆弱水印产生方法及其提取方法 |
CN104036448A (zh) * | 2014-06-12 | 2014-09-10 | 上海理工大学 | 三维模型数字水印算法 |
CN104318505A (zh) * | 2014-09-30 | 2015-01-28 | 杭州电子科技大学 | 基于图像离散余弦变换的三维网格模型盲水印方法 |
CN107067361A (zh) * | 2016-01-27 | 2017-08-18 | 韩国科学技术院 | 利用分割算法的三维网格模型水印方法及装置 |
CN108335256A (zh) * | 2017-12-13 | 2018-07-27 | 深圳大学 | 局部球坐标系下的三维盲水印嵌入和提取检测方法及装置 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009508393A (ja) * | 2005-09-09 | 2009-02-26 | トムソン ライセンシング | ビデオ透かし挿入 |
CN101251931B (zh) * | 2007-12-29 | 2011-09-14 | 武汉理工大学 | 基于三维模型深度投影获取三维数字水印的方法及系统 |
EP2991028B1 (en) * | 2014-08-29 | 2019-12-11 | Thomson Licensing | Method for watermarking a three-dimensional object and method for obtaining a payload from a threedimensional object |
CN104281994B (zh) * | 2014-10-22 | 2017-03-22 | 南京大学 | 一种基于局部粗糙度分析的三维网格水印嵌入和检测方法 |
US10438311B2 (en) * | 2016-10-20 | 2019-10-08 | Korea Advanced Institute Of Science And Technology | Watermark embedding apparatus and method, and watermark detecting apparatus and method for 3D printing environment |
CN109544433B (zh) * | 2018-10-15 | 2021-01-15 | 华为技术有限公司 | 水印嵌入方法、装置、终端及存储介质 |
CN113469868B (zh) * | 2021-07-16 | 2022-11-15 | 重庆市勘测院 | 一种基于结构变化的实景三维模型数字水印添加方法 |
CN114936960A (zh) * | 2022-05-24 | 2022-08-23 | 重庆市勘测院((重庆市地图编制中心)) | 一种实景三维模型批量水印方法 |
-
2018
- 2018-10-15 CN CN201811198415.9A patent/CN109544433B/zh active Active
-
2019
- 2019-10-14 EP EP19874552.3A patent/EP3783562A4/en active Pending
- 2019-10-14 WO PCT/CN2019/111052 patent/WO2020078323A1/zh unknown
-
2020
- 2020-12-30 US US17/138,099 patent/US11869112B2/en active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020060685A1 (en) * | 2000-04-28 | 2002-05-23 | Malcolm Handley | Method, system, and computer program product for managing terrain rendering information |
CN102999881A (zh) * | 2012-12-20 | 2013-03-27 | 福建师范大学 | 具有鲁棒性的三维模型脆弱水印产生方法及其提取方法 |
CN104036448A (zh) * | 2014-06-12 | 2014-09-10 | 上海理工大学 | 三维模型数字水印算法 |
CN104318505A (zh) * | 2014-09-30 | 2015-01-28 | 杭州电子科技大学 | 基于图像离散余弦变换的三维网格模型盲水印方法 |
CN107067361A (zh) * | 2016-01-27 | 2017-08-18 | 韩国科学技术院 | 利用分割算法的三维网格模型水印方法及装置 |
CN108335256A (zh) * | 2017-12-13 | 2018-07-27 | 深圳大学 | 局部球坐标系下的三维盲水印嵌入和提取检测方法及装置 |
Non-Patent Citations (1)
Title |
---|
刘泉 等: "基于网格平面化的三维数字水印算法研究", 《武汉理工大学学报(信息与管理工程版)》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020078323A1 (zh) * | 2018-10-15 | 2020-04-23 | 华为技术有限公司 | 水印嵌入方法、装置、终端及存储介质 |
US11869112B2 (en) | 2018-10-15 | 2024-01-09 | Huawei Technologies Co., Ltd. | Watermark embedding method and apparatus, terminal, and storage medium |
Also Published As
Publication number | Publication date |
---|---|
EP3783562A1 (en) | 2021-02-24 |
US20210118087A1 (en) | 2021-04-22 |
EP3783562A4 (en) | 2021-08-11 |
CN109544433B (zh) | 2021-01-15 |
US11869112B2 (en) | 2024-01-09 |
WO2020078323A1 (zh) | 2020-04-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11869112B2 (en) | Watermark embedding method and apparatus, terminal, and storage medium | |
CN101504746B (zh) | 信息处理装置和信息处理方法 | |
CN109213728A (zh) | 基于增强现实的文物展示方法及系统 | |
KR102198778B1 (ko) | 통지 메시지를 연관시키는 방법, 장치 및 이동 단말 | |
CN107567610A (zh) | 附连控制元素的混合环境显示 | |
CN107077663A (zh) | 通信应用中对基于云的和本地附件的处理 | |
CN109905754A (zh) | 虚拟礼物收取方法、装置及存储设备 | |
CN102999562B (zh) | 路由查询结果 | |
CN108846274A (zh) | 一种安全验证方法、装置及终端 | |
CN108595237A (zh) | 一种显示内容的方法及终端 | |
CN110533755A (zh) | 一种场景渲染的方法以及相关装置 | |
CN103345602A (zh) | 一种客户端代码完整性检测方法、装置和系统 | |
CN107247691A (zh) | 一种文本信息的显示方法、装置、移动终端及存储介质 | |
CN107085868A (zh) | 图像绘制方法及装置 | |
CN109213885A (zh) | 基于增强现实的汽车展示方法及系统 | |
CN109675317A (zh) | 外挂程序的检测方法、服务器及终端 | |
KR20220054855A (ko) | 폐색 검출 시스템 | |
CN110457935A (zh) | 一种权限配置方法及终端设备 | |
CN110309004A (zh) | 数据的处理方法及终端 | |
CN109815462A (zh) | 一种文本生成方法及终端设备 | |
CN106533917A (zh) | 关系链处理方法、装置及系统 | |
CN107122177A (zh) | 界面展示方法及装置 | |
CN111510557B (zh) | 内容处理方法及电子设备 | |
CN109117037A (zh) | 一种图像处理的方法及终端设备 | |
Shin et al. | Enriching natural monument with user-generated mobile augmented reality mashup |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |