CN113223171B - 一种纹理贴图方法、装置、电子设备及存储介质 - Google Patents

一种纹理贴图方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN113223171B
CN113223171B CN202110471302.7A CN202110471302A CN113223171B CN 113223171 B CN113223171 B CN 113223171B CN 202110471302 A CN202110471302 A CN 202110471302A CN 113223171 B CN113223171 B CN 113223171B
Authority
CN
China
Prior art keywords
texture mapping
texture
group
vertex
line segment
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.)
Active
Application number
CN202110471302.7A
Other languages
English (en)
Other versions
CN113223171A (zh
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.)
Guangdong 3vjia Information Technology Co Ltd
Original Assignee
Guangdong 3vjia 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 Guangdong 3vjia Information Technology Co Ltd filed Critical Guangdong 3vjia Information Technology Co Ltd
Priority to CN202110471302.7A priority Critical patent/CN113223171B/zh
Priority to PCT/CN2021/106833 priority patent/WO2022227293A1/zh
Publication of CN113223171A publication Critical patent/CN113223171A/zh
Application granted granted Critical
Publication of CN113223171B publication Critical patent/CN113223171B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/20Finite element generation, e.g. wire-frame surface description, tesselation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/04Texture mapping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/55Radiosity

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Graphics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Geometry (AREA)
  • Software Systems (AREA)
  • Image Generation (AREA)

Abstract

本申请实施例提供一种纹理贴图方法、装置、电子设备及存储介质,涉及图像数据处理技术领域。该方法包括:读取户型图文件,以获得墙体线框图;基于所述墙体线框图构建多组纹理映射函数;基于所述纹理映射函数合成纹理图片;利用所述纹理映射函数对所述纹理图片进行场景渲染,将整个场景进行纹理合成,仅保留少数几张合成的纹理图片,无需额外保存每个顶点的UV坐标,从而优化网络传输与内存现存占用,解决现有方法增大网络传输的负担、增大内存占用并增大渲染计算负担,从而影响用户交互体验的流畅性的问题。

Description

一种纹理贴图方法、装置、电子设备及存储介质
技术领域
本申请涉及图像数据处理技术领域,具体而言,涉及一种纹理贴图方法、装置、电子设备及存储介质。
背景技术
对于一个户型展示的三维渲染场景,会由很多三维模型构成。如果要将这个户型在网页或者移动端进行三维渲染时,就要考虑到网络传输效率和内存占用。如果每个三维模型除了几何信息外,还要添加额外一张贴图和对应的纹理坐标,从而导致贴图多、模型文件大,进而增大网络传输的负担、增大内存占用并增大渲染计算负担,从而影响用户交互体验的流畅性。
发明内容
本申请实施例的目的在于提供一种纹理贴图方法、装置、电子设备及存储介质,将整个场景进行纹理合成,仅保留少数几张合成的纹理图片,无需额外保存每个顶点的UV坐标,从而优化网络传输与内存现存占用,解决现有方法增大网络传输的负担、增大内存占用并增大渲染计算负担,从而影响用户交互体验的流畅性的问题。
本申请实施例提供了一种纹理贴图方法,所述方法包括:
读取户型图文件,以获得墙体线框图;
基于所述墙体线框图构建多组纹理映射函数;
基于所述纹理映射函数合成纹理图片;
利用所述纹理映射函数对所述纹理图片进行场景渲染。
在上述实现过程中,通过构建多组纹理映射函数,将众多贴图合成为少数的几张,需为每个顶点存纹理坐标,只需存一个分组分层数据文件(不超过5KB),即能在渲染时在GPU端进行分组纹理映射合成,满足实时渲染需要,从而解决了现有方法增大网络传输的负担、增大内存占用并增大渲染计算负担,从而影响用户交互体验的流畅性的问题。
进一步地,所述基于所述墙体线框图构建多组纹理映射函数,包括:
对基于水平方向的所述墙体线框图进行正交投影,以获得[Z+]、[Z-]方向上的纹理映射函数,其中,[Z+]表示法向量(0,0,1),[Z-]表示法向量(0,0,-1)。
在上述实现过程中,对于水平面上,由于没有墙体遮挡,可直接采用简单的正交映射,即可满足要求。
进一步地,所述基于所述墙体线框图构建多组纹理映射函数,包括:
对基于竖直方向的所述墙体线框图中的每条直线段进行分组,并分别表示为[X+]、[X-]、[Y+]和[Y-]四组线段集,其中,[X+]表示法向量(1,0,0),[X-]表示法向量(-1,0,0),[Y+]表示法向量(0,1,0),[Y-]表示法向量(0,-1,0);
根据遮挡关系和层间距离对每组线段集进行分层,以构建每组线段集的纹理映射函数。
在上述实现过程中,在竖直方向上,由于存在很多遮挡现象,可根据不同的区间段,映射不同的贴图,如分成地板层、中间层、吊顶层,从而使得对每个[X+][X-][Y+][Y-]分组,都可以构建一个分层纹理映射,然后通过每组纹理映射合成新的贴图。
进一步地,所述根据遮挡关系和层间距离对每组线段集进行分层包括:
将同组线段集中的所有线段的端点与对应法向量的点积进行排序;
遍历所有所述线段,以对所述线段的层级进行标记;
若当前线段有遮挡或距离超过预定距离值,则将当前线段的层级加1,直至对所有所述线段完成标记。
在上述实现过程中,为了使每组中的线段都互不遮挡,可将同组线段集中的所有线段分成多层,从而解决遮挡问题。
进一步地,所述基于所述纹理映射函数合成纹理图片,包括:
判断任意顶点的位置是否处于每组纹理映射函数以及对应的分层内;
若是,则对所述顶点进行着色;
若否,则跳过所述顶点,以合成每组纹理映射函数对应的纹理图片,合成公式为:
I(u(p),v(p))=I(f(p))=C(p);
其中,I表示每组纹理映射函数映射生成的纹理贴图;I(u,v)表示(u,v)位置的颜色,p表示模型表面的任意顶点;C(p)表示任意顶点的原始着色值。
在上述实现过程中,根据每组的纹理映射函数以及对应的分层,继续拧约束,从而将满足条件的顶点进行着色。
进一步地,所述利用所述纹理映射函数对所述纹理图片进行场景渲染,包括:
加载所述纹理图片;
在[Z+]、[Z-]方向上,利用对应的纹理映射对所述纹理图片进行着色;
在[X+]、[X-]、[Y+]和[Y-]上,计算所述纹理图片中的任意顶点到墙体的距离;
若所述距离不在预设的阈值范围内,则将所述顶点的权重设置为0;
若所述距离在预设的阈值范围内,则计算所述顶点的权重,所述权重计算公式为:w=np*nmapping
其中,np为所述顶点的法向量,nmapping为对应纹理映射的预设法向量;
若所述权重均不大于0,则将[Z+]、[Z-]方向上的着色值作为其颜色值;
若所述权重大于0,则对所述权重进行归一化,所述归一化公式为:
其中,wi表示第i组权重,i表示[X+]、[X-]、[Y+]、[Y-]、[Z+]和[Z-]6个组别中的任意一组;
对权重大于0的顶点的颜色值进行线性合成,所述线性合成公式为:
c=∑wici,其中,ci表示第i组通过纹理映射获取到的颜色值。
在上述实现过程中,基于多组纹理映射,在渲染过程中,将合成的纹理图片进行加载并根据不同组的纹理映射进行实时渲染。
本申请实施例还提供一种纹理贴图装置,所述装置包括:
读取模块,用于读取户型图文件,以获得墙体线框图;
构建模块,用于基于所述墙体线框图构建多组纹理映射函数;
合成模块,用于基于所述纹理映射函数合成纹理图片;
渲染模块,用于利用所述纹理映射函数对所述纹理图片进行场景渲染。
在上述实现过程中,通过构建多组纹理映射函数,将众多贴图合成为少数的几张,需为每个顶点存纹理坐标,只需存一个分组分层数据文件(不超过5KB),即能在渲染时在GPU端进行分组纹理映射合成,满足实时渲染需要,从而解决了现有方法增大网络传输的负担、增大内存占用并增大渲染计算负担,从而影响用户交互体验的流畅性的问题。
进一步地,所述构建模块包括:
分组模块,用于对基于竖直方向的所述墙体线框图中的每条直线段进行分组,并分别表示为[X+]、[X-]、[Y+]和[Y-]四组线段集,其中,[X+]表示法向量(1,0,0),[X-]表示法向量(-1,0,0),[Y+]表示法向量(0,1,0),[Y-]表示法向量(0,-1,0);
分层模块,用于根据遮挡关系和层间距离对每组线段集进行分层,以构建每组线段集的纹理映射函数。
在上述实现过程中,在竖直方向上,由于存在很多遮挡现象,可根据不同的区间段,映射不同的贴图,如分成地板层、中间层、吊顶层,从而使得对每个[X+][X-][Y+][Y-]分组,都可以构建一个分层纹理映射,然后通过每组纹理映射合成新的贴图。
本申请实施例还提供一种电子设备,所述电子设备包括存储器以及处理器,所述处理器包括中央处理器和图形处理器,所述存储器用于存储计算机程序,所述处理器运行所述计算机程序以使所述电子设备执行上述中任一项所述的纹理贴图方法。
本申请实施例还提供一种可读存储介质,所述可读存储介质中存储有计算机程序指令,所述计算机程序指令被一处理器读取并运行时,执行上述中任一项所述的纹理贴图方法。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的一种纹理贴图方法的流程图;
图2为本申请实施例提供的纹理映射函数生成流程图;
图3(a)-3(b)为本申请实施例提供的俯视和侧视正交投影效果示意图;
图4(a)-4(b)为本申请实施例提供的户型线框图和对应的分组示意图;
图5为本申请实施例提供的同组线段分层流程图;
图6为本申请实施例提供的户型图[X+]分层示意图;
图7为本申请实施例提供的[X+]的分层纹理映射示意图;
图8为本申请实施例提供的纹理映射函数合成纹理图片的流程图;
图9(a)-9(b)为本申请实施例提供的纹理映射的顶点着色器和片元着色器的着色过程流程图;
图10为本申请实施例提供的渲染效果示意图;
图11为本申请实施例提供的纹理贴图装置的结构框图;
图12为本申请实施例提供的纹理贴图装置的整体结构框图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本申请的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
实施例1
请参看图1,图1为本申请实施例提供的一种纹理贴图方法的流程图。
纹理贴图方法,一般包含两部分内容:一部分是纹理映射生成,即对模型的每个顶点,生成其对应的纹理坐标,一般称之为u、v,皆在[0,1]区间以内;另一部分是,纹理贴图的生成与绑定,即在给定了纹理映射后,根据这个纹理映射绑定一张或几张贴图。
本申请的一个目标是去掉纹理坐标,只需记录纹理映射函数的基本参数即可。一般做法是用如3DMax等软件给模型进行纹理映射(又称UV展开),然后给每个顶点保存一个纹理坐标值,并一起存入文件,而在对网络性能敏感的Web端和移动端,模型文件大小应尽可能压缩。
纹理映射算法,一般是计算复杂度和实现复杂度都比较高的,不适合在移动端或Web端实现。
该方法具体包括以下步骤:
步骤S100:读取户型图文件,以获得墙体线框图;
步骤S200:基于所述墙体线框图构建多组纹理映射函数;
如图2所示,为纹理映射函数生成流程图,该步骤包括:
步骤S210:对基于水平方向的所述墙体线框图进行正交投影,以获得[Z+]、[Z-]方向上的纹理映射函数,其中,[Z+]表示法向量(0,0,1),[Z-]表示法向量(0,0,-1)。
具体地,正交投影公式为:
u(x,y,z)=(x/L+1.0)/2.0;
v(x,y,z)=(y/L+1.0)/2.0;
其中,L取一个大于这个户型整体长度和整体宽度的值,所以x/L就会在[-1.0,1.0]区间内,再将其映射到[0,1]区间即可。
采用正交投影映射时,如图3(a)-图3(b)所示,分别为俯视和侧视正交投影效果示意图,从正上方(Z轴方向)看,投影效果比较清晰;但从其他角度看,墙体上有很多直线的(x,y)值相同,所以产生的效果是一条条线,桌面下方的图案跟桌面一模一样,从而产生了较为严重的失真现象。
对于室内户型场景的3D展示,且展示形式主要是整体概览时(即主要是从较高的位置进行俯瞰),对非墙体Z方向无遮挡的部分,简单正交投影的效果已经基本满足业务需求。但还要解决墙体和Z方向上有遮挡的部分。
具体包括以下步骤:
步骤S220:对基于竖直方向的所述墙体线框图中的每条直线段进行分组,并分别表示为[X+]、[X-]、[Y+]和[Y-]四组线段集,其中,[X+]表示法向量(1,0,0),[X-]表示法向量(-1,0,0),[Y+]表示法向量(0,1,0),[Y-]表示法向量(0,-1,0);
步骤S230:根据遮挡关系和层间距离对每组线段集进行分层,以构建每组线段集的纹理映射函数。
对于Z方向,对于不同的区间段,映射不同的贴图——比如高度小于等于5cm,认为是地板层;高度在5cm-200cm之间,为内容层。还可以按照模型可能产生的遮挡关系,来分成多层。一般分成3层即可:地板层、中间层、吊顶层。
对于墙体来说,家装户型图基本上都由水平或竖直的墙体构成,且墙体高度一般都在300cm以内,因此可以将其分为四组来处理[X+]、[X-]、[Y+]、[Y-],如图4(a)-4(b)所示,分别为户型线框图和对应的分组示意图,其中,线型相同的线条表示为同一组。
对[X+]来说,一个简单的uv映射公式就是u(x,y,z)=(y/L+1.0)/2.0,v(x,y,z)=z/L(z一般取值都大于零)。显然,会出现很多遮挡的现象;每一个墙体(每一条线段),都能由上述公式进行UV映射,但为每一条线段生成一组映射和贴图,是得不偿失的。所以,可以想办法将这些映射合成到一张图里。
具体包括以下步骤:
步骤S231:将同组线段集中的所有线段的端点与对应法向量的点积进行排序;
步骤S232:遍历所有所述线段,以对所述线段的层级进行标记;
步骤S233:若当前线段有遮挡或距离超过预定距离值,则将当前线段的层级加1,直至对所有所述线段完成标记。
如图5所示,为同组线段分层流程图,以[X+]为例,对[X+]里面所有线段,按从x值从小到大(或从大到小)进行排序。然后将其分成几段,每段内的线段都互不遮挡,标记为不同的层级l。那么对[X+]的uv映射公式就是u(x,y,z)=(y/L+1.0)/2.0,v(x,y,z)=(z+H*l)/L,其中,l为所属层级的序号,H为给定的最大z值,一般为280或300。如图6所示,为户型图的[X+]分层示意图,图中的数字标签的含义为:[线段Id]:[分层Id];如图7所示,为[X+]的分层纹理映射示意图。
同理,对每个[X+][X-][Y+][Y-]分组,都可以构建一个分层纹理映射,然后通过每组纹理映射合成新的纹理贴图。
[X+]和[X-]的纹理映射公式为:
u(x,y,z)=(y/L+1.0)/2.0;
v(x,y,z)=(z+H*l)/L;
其中,min_z<z<max_z;min_dist<d(x,y,z)<max_dist,其中,min_dist和max_dist均为可设置的输入性参数,一般可分别取值为0cm和30cm;d(x,y,z)表示模型表面上的任意顶点p到最近墙面的距离。
[Y+]和[Y-]的纹理映射公式为:
u(x,y,z)=(x/L+1.0)/2.0;
v(x,y,z)=(z+H*l)/L;
其中,min_z<z<max_z;min_dist<d(x,y,z)<max_dist。
步骤S300:基于所述纹理映射函数合成纹理图片;
如图8所示,为纹理映射函数合成纹理图片的流程图,该步骤具体可以包括:
步骤S301:判断任意顶点的位置是否处于每组纹理映射函数以及对应的分层内;
步骤S302:若是,则对所述顶点进行着色;
步骤S303:若否,则跳过所述顶点,以合成每组纹理映射函数对应的纹理图片,合成公式为:
I(u(p),v(p))=I(f(p))=C(p);
其中,I表示每组纹理映射函数映射生成的纹理贴图;I(u,v)表示(u,v)位置的颜色,p表示模型表面的任意顶点;C(p)表示任意顶点对应的原始着色值。
具体地,对于V和p,前者表示三角网格模型顶点,后者是模型表面上的任意点,即后者所属集合包含V,也包含每个三角形内部的所有点。
C(p)表示顶点的颜色,这个颜色通过按原始UV坐标映射和纹理贴图映射后得到,也可以通过场景渲染得到,即可以通过任意方法对模型表面的每个点p进行着色。
I表示模型贴图,I(u,v)表示(u,v)位置的颜色,纹理图片合成的目的是给I着色。
f(p)=(u(p),v(p))表示一组纹理映射。那么这组纹理映射对应的纹理图片合成公式为:I(u(p),v(p))=I(f(p))=C(p);
着色,并不要求I中每个点都有颜色;只需让对满足条件的p在新的纹理映射下,能取到颜色即可。
如图9(a)-9(b)所示,分别为纹理映射的顶点着色器和片元着色器的着色过程流程图,其中,顶点着色器的作用是:将每个顶点V映射到屏幕所在的平面。一般流程是构建视角矩阵变换,在该方法中直接用纹理坐标映射将其映射到纹理坐标所在的平面。这样,屏幕上的每个像素,都跟I是一一对应的。
片元着色器的作用是:给屏幕上的每个片元(直观理解为每个像素)进行着色,不过一个片元可能会被多次着色。在该方法中,先获得每个片元所对应的原始三维空间点p,它是在顶点着色器中将顶点V设置成可变元后,通过三角形重心坐标插值而成,该过程是由渲染管线自动进行的。
该方法中,还需要根据p的位置和纹理映射相关约束,决定是否跳过该片元。
例如,当纹理映射为[Z+]时,且设定为地板层,那么p的z坐标若大于10,则直接跳过该片元。因为一个片元可能会被多次着色,这样就能避免z坐标大于10的位置往地板进行着色。
例如,当纹理映射为[X+]时,若p值不在任意一个[X+]墙体附近,则直接跳过该片元。
当一次完整渲染完成之后,一组纹理映射的I(u,v)基本完成,将其存成图片保存即可。
步骤S400:利用所述纹理映射函数对所述纹理图片进行场景渲染。
在上述处理过程之后,每个模型会加载原始模型的白模(即只有顶点位置和三角网格拓扑信息的模型)、N张纹理贴图(一般是[X+]、[X-]、[Y+]、[Y-]、[Z+|z<10]、[Z+|10<=z<=180]、[Z+|z>180],一般不会超过10张)以及分组分层数据文件。打包压缩整个场景,用作示意的场景只需12M左右,而原始模型加上贴图即使打包压缩也需80M以上,文件大小有显著优化。用户体验上,是加载几秒钟对比加载接近一分钟的对比。
在GPU渲染时,只需要将这N张图片加载进显存,而现有技术手段需要将所有图片加载进显存(总共可能会有50张平均1M以上的图片),对移动端、Web端的GPU性能要求显然降低了很多。
而模型加载后,进行实时渲染的方法如下,该操作可以在GPU端进行:
对于每个点p,它对应了多组纹理映射:
步骤S401:按[Z+]的几组纹理映射,通过z值区间划分,获得唯一的纹理映射,在其对应纹理贴图上取色作为初始值;
步骤S402:在[X+]、[X-]、[Y+]和[Y-]上,计算所述纹理图片中的任意顶点到墙体的距离;若所述距离不在预设的阈值范围内,则将所述顶点的权重设置为0;若所述距离在预设的阈值范围内,则计算所述顶点的权重,所述权重计算公式为:w=np*nmapping;其中,np为所述顶点的法向量,nmapping为对应纹理映射的预设法向量,如[X+]为(1,0,0),[X-]为(-1,0,0),[Y+]为(0,1,0),[Y-]为(0,-1,0);若w的值小于0,则w赋值为0。
步骤S403:若所述权重均不大于0,则将[Z+]、[Z-]方向上的着色值作为其颜色值;
步骤S404:若所述权重大于0,则对所述权重进行归一化,所述归一化公式为:
其中,wi表示第i组权重,i表示[X+]、[X-]、[Y+]、[Y-]、[Z+]和[Z-]6个组别中的任意一组;
对权重大于0的顶点的颜色值进行线性合成,所述线性合成公式为:
c=∑wici,其中,ci表示第i组通过纹理映射获取到的颜色值。
如图10所示,为渲染效果示意图,本申请采用基于正交投影的分组纹理映射方法,将众多贴图合成为N张(一般为7张),无需为每个顶点存纹理坐标,只需存一个分组分层数据文件(不超过5KB),即渲染在GPU端进行分组纹理映射合成,满足实时渲染需要。
本申请在传输和加载过程中,每个模型会加载原始模型的白模(即只有顶点位置和三角网格拓扑信息的模型)、N张纹理贴图(一般是[X+]、[X-]、[Y+]、[Y-]、[Z+|z<10]、[Z+|10<=z<=180]、[Z+|z>180],一般不会超过10张)以及分组分层数据文件。打包压缩整个场景,用作示意的场景只需12M左右,而原始模型加上贴图即使打包压缩也需80M以上,文件大小有显著优化。用户体验上,是加载几秒钟对比加载接近一分钟的对比。
同样地,在GPU渲染时,只需要将这N张图片加载进显存,而现有技术手段需要将所有图片加载进显存(总共可能会有50张平均1M以上的图片),对移动端、Web端的GPU性能要求降低了很多。
实施例2
本申请实施例提供一种纹理贴图装置,应用于实施例1所述的纹理贴图方法,如图11所示,为纹理贴图装置的结构框图,该装置包括:
读取模块100,用于读取户型图文件,以获得墙体线框图;
构建模块200,用于基于所述墙体线框图构建多组纹理映射函数;
合成模块300,用于基于所述纹理映射函数合成纹理图片;
渲染模块400,用于利用所述纹理映射函数对所述纹理图片进行场景渲染。
其中,如图12所示,为纹理贴图装置的整体结构框图,构建模块200包括:
正交模块210,用于对基于水平方向的所述墙体线框图进行正交投影,以获得[Z+]、[Z-]方向上的纹理映射函数,其中,[Z+]表示法向量(0,0,1),[Z-]表示法向量(0,0,-1)。
还包括分层映射模块220,具体包括:
分组模块221,用于对基于竖直方向的所述墙体线框图中的每条直线段进行分组,并分别表示为[X+]、[X-]、[Y+]和[Y-]四组线段集,其中,[X+]表示法向量(1,0,0),[X-]表示法向量(-1,0,0),[Y+]表示法向量(0,1,0),[Y-]表示法向量(0,-1,0);
分层模块222,用于根据遮挡关系和层间距离对每组线段集进行分层,以构建每组线段集的纹理映射函数。
其中,分层模块222包括:
判断任意顶点的位置是否处于每组纹理映射函数以及对应的分层内;
若是,则对所述顶点进行着色;
若否,则跳过所述顶点,以合成每组纹理映射函数对应的纹理图片,合成公式为:
I(u(p),v(p))=I(f(p))=C(p);
其中,I表示每组纹理映射函数映射生成的纹理贴图;I(u,v)表示(u,v)位置的颜色,p表示模型表面的任意顶点;C(p)表示顶点p对应的原始着色值。
渲染模块400具体包括:
加载所述纹理图片;
在[Z+]、[Z-]方向上,利用对应的纹理映射对所述纹理图片进行着色;
在[X+]、[X-]、[Y+]和[Y-]上,计算所述纹理图片中的任意顶点到墙体的距离;
若所述距离不在预设的阈值范围内,则将所述顶点的权重设置为0;
若所述距离在预设的阈值范围内,则计算所述顶点的权重,所述权重计算公式为:w=np*nmapping
其中,np为所述顶点的法向量,nmapping为对应纹理映射的预设法向量;
若所述权重均不大于0,则将[Z+]、[Z-]方向上的着色值作为其颜色值;
若所述权重大于0,则对所述权重进行归一化,所述归一化公式为:
其中,wi表示第i组的权重,其中,i表示[X+]、[X-]、[Y+]、[Y-]、[Z+]和[Z-]等6个组别中的任意一组;
颜色计算公式是纹理贴图取色公式,这里有多组,形式都是:
CM(p)=I(fM(p))=I(uM(p),vM(p));
即在渲染过程中,通过输入纹理贴图I、对应组的纹理映射和顶点p,获得该点在该组纹理映射下的颜色。
其中,M可取[X+]、[X-]、[Y+]、[Y-]、[Z+]和[Z-]等6个组别中的任意一组。
对权重大于0的顶点的颜色值进行线性合成,所述线性合成公式为:
c=∑wici,其中,ci表示第i组通过纹理映射获取到的颜色值。
本申请实施例还提供一种电子设备,所述电子设备包括存储器以及处理器,所述处理器包括中央处理器和图形处理器,所述存储器用于存储计算机程序,所述处理器运行所述计算机程序以使所述电子设备执行实施例1所述的纹理贴图方法。其中,读取模块100、构建模块200、合成模块300可在一般PC机上计算;渲染模块400则可以加载在移动端、PC端等。
本申请实施例还提供一种可读存储介质,所述可读存储介质中存储有计算机程序指令,所述计算机程序指令被一处理器读取并运行时,执行实施例1所述的纹理贴图方法。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

Claims (9)

1.一种纹理贴图方法,其特征在于,所述方法包括:
读取户型图文件,以获得墙体线框图;
基于所述墙体线框图构建多组纹理映射函数;
基于所述纹理映射函数合成纹理图片,具体地:
判断任意顶点的位置是否处于每组纹理映射函数以及对应的分层内,其中,每组纹理映射函数是将所述墙体线框图中的每条直线段进行分组得到多组线段集,再对每组线段集进行分层得到的;
若是,则对所述顶点进行着色;
若否,则跳过所述顶点,以合成每组纹理映射函数对应的纹理图片,合成公式为:
其中,I表示每组纹理映射函数映射生成的纹理贴图;表示/>位置的颜色,p表示户型图的三角网格模型表面的任意顶点;/>表示任意顶点对应的原始着色值;
利用所述纹理映射函数对所述纹理图片进行场景渲染。
2.根据权利要求1所述的纹理贴图方法,其特征在于,所述基于所述墙体线框图构建多组纹理映射函数,包括:
对基于水平方向的所述墙体线框图进行正交投影,以获得[Z+]、[Z-]方向上的纹理映射函数,其中,[Z+]表示法向量(0,0,1),[Z-]表示法向量(0,0,-1)。
3.根据权利要求1所述的纹理贴图方法,其特征在于,所述基于所述墙体线框图构建多组纹理映射函数,包括:
对基于竖直方向的所述墙体线框图中的每条直线段进行分组,并分别表示为[X+]、[X-]、[Y+]和[Y-]四组线段集,其中,[X+]表示法向量(1,0,0),[X-]表示法向量(-1,0,0),[Y+]表示法向量(0,1,0),[Y-]表示法向量(0,-1,0);
根据遮挡关系和层间距离对每组线段集进行分层,以构建每组线段集的纹理映射函数。
4.根据权利要求3所述的纹理贴图方法,其特征在于,所述根据遮挡关系和层间距离对每组线段集进行分层包括:
将同组线段集中的所有线段的端点与对应法向量的点积进行排序;
遍历所有所述线段,以对所述线段的层级进行标记;
若当前线段有遮挡或距离超过预定距离值,则将当前线段的层级加1,直至对所有所述线段完成标记。
5.根据权利要求1所述的纹理贴图方法,其特征在于,所述利用所述纹理映射函数对所述纹理图片进行场景渲染,包括:
加载所述纹理图片;
在[Z+]、[Z-]方向上,利用对应的纹理映射对所述纹理图片进行着色;
在[X+]、[X-]、[Y+]和[Y-]上,计算所述纹理图片中的任意顶点到墙体的距离;
若所述距离不在预设的阈值范围内,则将所述顶点的权重设置为0;
若所述距离在预设的阈值范围内,则计算所述顶点的权重,所述权重的计算公式为:
其中,为所述顶点的法向量,/>为对应纹理映射的预设法向量;
若所述权重均不大于0,则将[Z+]、[Z-]方向上的着色值作为其颜色值;
若所述权重大于0,则对所述权重进行归一化,归一化公式为:
,其中,/>表示第i组权重,i表示[X+]、[X-]、[Y+]、[Y-]、[Z+]和[Z-]6个组别中的任意一组;
对权重大于0的顶点的颜色值进行线性合成,所述线性合成公式为:
,其中,/>表示第i组通过纹理映射获取到的颜色值。
6.一种纹理贴图装置,其特征在于,所述装置包括:
读取模块,用于读取户型图文件,以获得墙体线框图;
构建模块,用于基于所述墙体线框图构建多组纹理映射函数;
合成模块,用于基于所述纹理映射函数合成纹理图片,具体地:
判断任意顶点的位置是否处于每组纹理映射函数以及对应的分层内,其中,每组纹理映射函数是将所述墙体线框图中的每条直线段进行分组得到多组线段集,再对每组线段集进行分层得到的;
若是,则对所述顶点进行着色;
若否,则跳过所述顶点,以合成每组纹理映射函数对应的纹理图片,合成公式为:
其中,I表示每组纹理映射函数映射生成的纹理贴图;表示/>位置的颜色,p表示三角网格模型表面的任意顶点;/>表示任意顶点对应的原始着色值;
渲染模块,用于利用所述纹理映射函数对所述纹理图片进行场景渲染。
7.根据权利要求6所述的纹理贴图装置,其特征在于,所述构建模块包括:
分组模块,用于对基于竖直方向的所述墙体线框图中的每条直线段进行分组,并分别表示为[X+]、[X-]、[Y+]和[Y-]四组线段集,其中,[X+]表示法向量(1,0,0),[X-]表示法向量(-1,0,0),[Y+]表示法向量(0,1,0),[Y-]表示法向量(0,-1,0);
分层模块,用于根据遮挡关系和层间距离对每组线段集进行分层,以构建每组线段集的纹理映射函数。
8.一种电子设备,其特征在于,所述电子设备包括存储器以及处理器,所述处理器包括中央处理器和图形处理器,所述存储器用于存储计算机程序,所述处理器运行所述计算机程序以使所述电子设备执行根据权利要求1至5中任一项所述的纹理贴图方法。
9.一种可读存储介质,其特征在于,所述可读存储介质中存储有计算机程序指令,所述计算机程序指令被一处理器读取并运行时,执行权利要求1至5任一项所述的纹理贴图方法。
CN202110471302.7A 2021-04-28 2021-04-28 一种纹理贴图方法、装置、电子设备及存储介质 Active CN113223171B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202110471302.7A CN113223171B (zh) 2021-04-28 2021-04-28 一种纹理贴图方法、装置、电子设备及存储介质
PCT/CN2021/106833 WO2022227293A1 (zh) 2021-04-28 2021-07-16 一种纹理贴图方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110471302.7A CN113223171B (zh) 2021-04-28 2021-04-28 一种纹理贴图方法、装置、电子设备及存储介质

Publications (2)

Publication Number Publication Date
CN113223171A CN113223171A (zh) 2021-08-06
CN113223171B true CN113223171B (zh) 2024-01-26

Family

ID=77089945

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110471302.7A Active CN113223171B (zh) 2021-04-28 2021-04-28 一种纹理贴图方法、装置、电子设备及存储介质

Country Status (2)

Country Link
CN (1) CN113223171B (zh)
WO (1) WO2022227293A1 (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6525731B1 (en) * 1999-11-09 2003-02-25 Ibm Corporation Dynamic view-dependent texture mapping
KR20050080334A (ko) * 2004-02-09 2005-08-12 삼성전자주식회사 멀티 텍스쳐링 방법 및 이를 기록한 기록매체
CN108062784A (zh) * 2018-02-05 2018-05-22 深圳市易尚展示股份有限公司 三维模型纹理贴图转换方法与装置
CN109544672A (zh) * 2018-11-30 2019-03-29 胡翰 一种三维建筑模型纹理映射方法及装置
CN112288873A (zh) * 2020-11-19 2021-01-29 网易(杭州)网络有限公司 渲染方法和装置、计算机可读存储介质、电子设备

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107564087B (zh) * 2017-09-11 2019-08-06 南京大学 一种基于屏幕的三维线状符号渲染方法
CN111080799A (zh) * 2019-12-04 2020-04-28 广东康云科技有限公司 基于三维建模的场景漫游方法、系统、装置和存储介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6525731B1 (en) * 1999-11-09 2003-02-25 Ibm Corporation Dynamic view-dependent texture mapping
KR20050080334A (ko) * 2004-02-09 2005-08-12 삼성전자주식회사 멀티 텍스쳐링 방법 및 이를 기록한 기록매체
CN108062784A (zh) * 2018-02-05 2018-05-22 深圳市易尚展示股份有限公司 三维模型纹理贴图转换方法与装置
CN109544672A (zh) * 2018-11-30 2019-03-29 胡翰 一种三维建筑模型纹理映射方法及装置
CN112288873A (zh) * 2020-11-19 2021-01-29 网易(杭州)网络有限公司 渲染方法和装置、计算机可读存储介质、电子设备

Also Published As

Publication number Publication date
WO2022227293A1 (zh) 2022-11-03
CN113223171A (zh) 2021-08-06

Similar Documents

Publication Publication Date Title
US9619920B2 (en) Method and system for efficient modeling of specular reflection
CN109771951B (zh) 游戏地图生成的方法、装置、存储介质和电子设备
US9013499B2 (en) Methods and apparatus for multiple texture map storage and filtering including irregular texture maps
US8725466B2 (en) System and method for hybrid solid and surface modeling for computer-aided design environments
US20120086720A1 (en) Methods and apparatus for multiple texture map storage and filtering
AU2693700A (en) Method and apparatus for processing images
JP2015535978A (ja) 3次元シーンをレンダリングするためのコンピュータグラフィックス方法
Buchholz et al. View-dependent rendering of multiresolution texture-atlases
CN110378992A (zh) 面向大场景模型web端动态渲染LOD处理方法
CN109685879A (zh) 多视影像纹理分布的确定方法、装置、设备和存储介质
KR100695156B1 (ko) 객체의 그래픽 이미지를 변환하는 방법 및 장치
Čmolík et al. Mixed labeling: Integrating internal and external labels
Chen et al. An improved texture-related vertex clustering algorithm for model simplification
US6346939B1 (en) View dependent layer ordering method and system
CN113223171B (zh) 一种纹理贴图方法、装置、电子设备及存储介质
US9454554B1 (en) View dependent query of multi-resolution clustered 3D dataset
CN112085855B (zh) 交互式图像编辑方法、装置、存储介质及计算机设备
CN108428209A (zh) 高维数据可视化方法、装置及系统
CN108230430A (zh) 云层遮罩图的处理方法及装置
KR101163020B1 (ko) 3차원 모델을 스케일링하는 방법 및 스케일링 유닛
CN113570691B (zh) 用于体素模型的存储优化方法、装置及电子设备
Savransky et al. Modeling and Rendering Escher‐Like Impossible Scenes
CN115063517A (zh) 游戏中的闪光效果渲染方法及装置、存储介质和电子设备
Scheib et al. Efficient fitting and rendering of large scattered data sets using subdivision surfaces
US20050027767A1 (en) Restricting smoothing operations on a three-dimensional geometrical primitive according to a surface normal

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