具体实施方式
依照不同的设计需求,下述诸实施例所述的模型简化方法的实现方式可以是硬件(hardware)、固件(firmware)、软件(software,即程序)或是前述三者中的多者的组合形式。
以硬件形式而言,所述模型简化方法可以实现于集成电路(integrated circuit)上的逻辑电路。所述模型简化方法的相关操作/功能可以利用硬件描述语言(hardwaredescription languages,例如Verilog HDL或VHDL)或其他合适的编程语言来实现为硬件。举例来说,所述模型简化方法的相关操作/功能可以被实现于一或多个控制器、微控制器、微处理器、专用集成电路(Application-specific integrated circuit,ASIC)、数字信号处理器(digital signal processor,DSP)、现场可编程逻辑门阵列(Field ProgrammableGate Array,FPGA)及/或其他处理单元中的各种逻辑区块、模块和电路。
以软件形式以及(或是)固件形式而言,所述模型简化方法的相关操作/功能可以被实现为编程码(programming codes)。例如,利用一般的编程语言(programminglanguages,例如C、C++或组合语言)或其他合适的编程语言来实现所述模型简化方法的相关操作/功能。所述编程码可以被记录/存放在记录介质中。在一些实施例中,所述记录介质例如包括只读存储器(Read Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)以及(或是)储存装置。所述储存装置包括硬盘(hard disk drive,HDD)、固态硬盘(Solid-state drive,SSD)或是其他储存装置。在另一些实施例中,所述记录介质可以包括“非瞬态计算机可读取介质(non-transitory computer readable medium)”。举例来说,带(tape)、盘(disk)、卡(card)、半导体存储器、可程序设计的逻辑电路等可以被使用来实现所述非瞬态计算机可读取介质。计算机、中央处理器(Central Processing Unit,CPU)、控制器、微控制器或微处理器可以从所述记录介质中读取并执行所述编程码,从而实现所述模型简化方法的相关操作/功能。而且,所述编程码也可经由任意传输介质(通信网络或广播电波等)而提供给所述计算机(或CPU)。所述通信网络例如是因特网(Internet)、有线通信(wired communication)网络、无线通信(wireless communication)网络或其它通信介质。
一般而言,一个模型包括至少一个基元(primitive)和多个顶点(vertex)。当所述模型用于渲染绘制时,所述模型可能有一或多个基元是不可见的。所述不可见的基元是指,一个基元虽然会参与渲染绘制的处理过程,但是因为被遮挡而不会出现在渲染结果(经绘制的模型图像)中。可想而知,所述不可见的基元将浪费渲染的时间和资源。
图1是根据本发明的一实施例绘示一种模型简化方法的流程图。图1所示方法可以对所述模型进行简化操作,以从所述模型中剔除不可见基元。图1所示步骤S110会建构包围体,以包围所述模型。所述包围体可以依照设计需求来设定。
举例来说,图2是根据本发明的一实施例绘示的一种模型和包围体的示意图。图2所示模型210可以是欲简化的任何立体模型(三维模型)。在本实施例中,模型210可以包括至少一个基元和多个顶点。举例来说,基元可以是三角形、线或是其他几何形状。基元可以包括多个顶点。举例来说,一个三角形基元可以包括三个顶点,而一个线基元可以包括两个顶点。本发明不限制模型、基元和顶点的种类。本实施例所述模型简化方法可以被应用于任何的模型。请参照图1与图2,步骤S110可以建构包围体220,以完整包围模型210。图2所示包围体220是一个六面体。无论如何,本发明所述包围体的实现方式不应受限于图2所示包围体220。
举例来说,图3是根据本发明的另一实施例绘示的一种包围体的示意图。图3所示模型210可以参照图2所示模型210的相关说明,故不再赘述。请参照图1与图3,步骤S110可以建构包围体230,以包围模型210。图3所示包围体230是一个圆柱体。在其他实施例中,用来包围模型210的包围体的几何形状可以包括三角柱体、正方体、长方体、四面体、菱柱体、棱锥体、圆锥体、圆柱体或是其他几何体。
包围体220(或是230)的建构方式将说明于图4或图5所示实施例。无论如何,本发明所述包围体的建构方式不应受限于图4或图5所示实施方式。在其他实施例中,所述包围体的建构方式可以依照设计需求来决定。
图4是根据本发明的一实施例绘示一种包围体220的建构方式示意图。请参照图1与图4,步骤S110可以建构包围体220,以包围模型210。在本实施例中,步骤S110(建构包围体220的操作)可以包括:计算等式1、等式2、等式3、等式4、等式5与等式6以获得边界坐标Ax、By、Cz、Dx、Ey以及Fz,以及依照边界坐标Ax、By、Cz、Dx、Ey以及Fz去建构所述包围体220。边界坐标Ax与Dx可以是在图4所示X轴上的A点与D点的X轴坐标。边界坐标By与Ey可以是在图4所示Y轴上的B点与E点的Y轴坐标。边界坐标Cz与Fz可以是在图4所示Z轴上的C点与F点的Z轴坐标。图4所示A点、B点、C点、D点、E点和F点可以定义包围体220的六个面。其中,xv1,xv2…xvn表示模型210的多个顶点的X轴坐标,yv1,yv2…yvn表示模型210的多个顶点的Y轴坐标,zv1,zv2…zvn表示模型210的多个顶点的Z轴坐标,以及δA、δB、δC、δD、δE与δF表示大于或等于0的六个实数。实数δA、δB、δC、δD、δE与δF的每一个可以依照设计需求来决定。
Ax=max(xv1,xv2…xvn)+δA 等式1
By=max(yv1,yv2…yvn)+δB 等式2
Cz=max(zv1,zv2…zvn)+δC 等式3
Dx=min(xv1,xv2…xvn)-δD 等式4
Ey=min(yv1,yv2…yvn)-δE 等式5
Fz=min(zv1,zv2…zvn)-δF 等式6
其中,n为模型210的顶点总数,δA、δB和δC分别为在X轴、Y轴与Z轴的正方向上增加的偏移值,而δD、δE和δF分别为在X轴、Y轴与Z轴的负方向上减少的偏移值。在图4所示的例子中,建构包围体220的操作(步骤S110)可以在模型210的模型空间(model space)中建立包围体220。亦即,包围体220的A点、B点、C点、D点、E点和F点可以使用与模型210相同的坐标系空间。
在计算出边界坐标Ax、By、Cz、Dx、Ey以及Fz之后,步骤S110可以依照边界坐标Ax、By、Cz、Dx、Ey以及Fz建构长方体包围体220。举例来说,边界坐标Ax与Dx可以决定X轴的两个正交平面(A点的正交平面与D点的正交平面),边界坐标By与Ey可以决定Y轴的两个正交平面(B点的正交平面与E点的正交平面),边界坐标Cz与Fz可以决定Z轴的两个正交平面(C点的正交平面与F点的正交平面)。也就是说,图4所示实施例的建构包围体220的操作可以不需要进行坐标空间的转换,直接根据模型210的模型空间建构包围体220。
图5是根据本发明的另一实施例绘示一种包围体220的建构方式示意图。请参照图1与图5,步骤S110可以建构包围体220,以包围模型210。在本实施例中,步骤S110(建构包围体220的操作)可以包括:计算等式7、等式8与等式9以获得坐标值xd、yd与zd,以及计算等式10以获得缩放系数fd。其中,xv1,xv2…xvn表示模型210的多个顶点在模型坐标空间中的X轴坐标,yv1,yv2…yvn表示模型210的多个顶点在模型坐标空间中的Y轴坐标,以及zv1,zv2…zvn表示模型210的多个顶点在模型坐标空间中的Z轴坐标。
xd=max(xv1,xv2…xvn)-min(xv1,xv2…xvn) 等式7
yd=max(yv1,yv2…yvn)-min(yv1,yv2…yvn) 等式8
zd=max(zv1,zv2…zvn)-min(zv1,zv2…zvn) 等式9
fd=max(xd,yd,zd)/2 等式10
步骤S110可以将模型210的多个顶点从所述模型坐标空间平移变换到以模型210的中心(即图5所示o点)为原点的新坐标空间。然后,步骤S110可以使用缩放系数fd去计算等式11、等式12与等式13,以获得在所述新坐标空间中的经缩放X轴坐标xn、经缩放Y轴坐标yn与经缩放Z轴坐标zn。其中,xs表示模型210的多个顶点的任一个顶点在新坐标空间中的原X轴坐标,xn表示模型210的多个顶点的任一个顶点在新坐标空间中的经缩放X轴坐标,ys表示模型210的多个顶点的任一个顶点在新坐标空间中的原Y轴坐标,yn表示模型210的多个顶点的任一个顶点在新坐标空间中的经缩放Y轴坐标,zs表示模型210的多个顶点的任一个顶点在新坐标空间中的原Z轴坐标,以及zn表示模型210的多个顶点的任一个顶点在新坐标空间中的经缩放Z轴坐标。
xn=xs/fd 等式11
yn=ys/fd 等式12
zn=zs/fd 等式13
接下来,步骤S110可以计算等式14、等式15、等式16、等式17、等式18与等式19,以获得边界坐标Ax、By、Cz、Dx、Ey以及Fz。最后,步骤S110可以依照边界坐标Ax、By、Cz、Dx、Ey以及Fz去建构包围体220。其中,xn1,xn2…xnn表示模型210的多个顶点在所述新坐标空间中的所述经缩放X轴坐标,yn1,yn2…ynn表示模型210的多个顶点在所述新坐标空间中的所述经缩放Y轴坐标,zn1,zn2…znn表示模型210的多个顶点在所述新坐标空间中的所述经缩放Z轴坐标,以及δA、δB、δC、δD、δE与δF表示大于或等于0的六个实数。实数δA、δB、δC、δD、δE与δF的每一个可以依照设计需求来决定。
Ax=max(xn1,xn2…xnn)+δA 等式14
By=max(yn1,yn2…ynn)+δB 等式15
Cz=max(zn1,zn2…znn)+δC 等式16
Dx=min(xn1,xn2…xnn)-δD 等式17
Ey=min(yn1,yn2…ynn)-δE 等式18
Fz=min(zn1,zn2…znn)-δF 等式19
其中,n为模型210的顶点总数。也就是说,图5所示实施例所采用的建构包围体220的操作可以将模型210的多个顶点从模型空间平移变换到以模型210的中心(即图5中的o点)为原点的新坐标空间,然后在所述新坐标空间中建构包围体220。在另一实施例中,步骤S110的操作也可以选择其他任意位置(依照设计需求来决定位置)作为新坐标空间的原点,并将模型210的多个顶点从模型空间平移变换到新坐标空间。本发明不限制新坐标空间的原点的选择方式。
在将模型210的多个顶点平移变换到新坐标空间之后,步骤S110还可以使用缩放系数fd去对新坐标空间中的模型210进行缩放。通过平移转换和缩放的操作,步骤S110可以比较容易建构出包围体220。
请参照图1。步骤S120以模型210的多个顶点的每一个分别作为视点,向至少一渲染面绘制模型和包围体。步骤S130可以判断以多个顶点中的一目前顶点作为视点所绘制在至少一渲染面的包围体是否被遮挡,以决定是否将目前顶点标记为一不可见顶点。
图6是根据本发明的一实施例绘示的模型210、包围体220与渲染面610的剖面示意图。图6所示模型210与包围体220可以参照图2所示模型210与包围体220、图3所示模型210与包围体230、图4所示模型210与包围体220以及(或)图5所示模型210与包围体220的相关说明,故不再赘述。图6所示模型210包括顶点210a与顶点210b。其中顶点210a位于模型210的内部,而顶点210b位于模型210的外表面。在模型210外的任何视点去观看模型210时,顶点210a为不可见而顶点210b为可见。因此,顶点210a可称为不可见顶点。
在图6所示情境中,模型210被放置于地面上,因此模型210向地面方向不需要渲染绘制。基于此情境,包围体220可以由五个包围面所构成。图6是剖面示意图,因此绘示包围体220的其中三个包围面220a、220b与220c于图6中。同理可推,图6绘示渲染面610的三个渲染平面(渲染目标)610a、610b与610c。如图6所示,渲染面610可以包围模型210与包围体220。
请参照图1与图6。步骤S120与步骤S130可以对模型210的顶点210b进行“不可见顶点”的检查操作。举例来说,步骤S120可以使用模型210的顶点210b作为视点,分别向渲染面610的渲染平面610a、610b与610c绘制模型210,然后分别向渲染平面610a、610b与610c绘制包围体220的包围面220a、220b与220c。以顶点210b作为视点所绘制在渲染平面610c的包围面220c(包围体220)没有被遮挡,因此步骤S130可以判断顶点210b是可见顶点。
步骤S120与步骤S130还可以对模型210的顶点210a进行“不可见顶点”的检查操作。举例来说,步骤S120可以使用模型210的顶点210a作为视点,分别向渲染面610的渲染平面610a、610b与610c绘制模型210,然后分别向渲染平面610a、610b与610c绘制包围体220的包围面220a、220b与220c。在以顶点210a作为视点所绘制的渲染平面610a中,包围面220a(包围体220)被模型210完全遮挡。在以顶点210a作为视点所绘制的渲染平面610b中,包围面220b(包围体220)被模型210完全遮挡。在以顶点210a作为视点所绘制的渲染平面610c中,包围面220c(包围体220)被模型210完全遮挡。因此,步骤S130可以判断以多个顶点中的目前顶点作为视点所绘制在渲染面610的包围体220是否被完全遮挡。当以顶点210a作为视点所绘制在渲染面610的包围体220完全被遮挡时,步骤S130可以判断顶点210a是不可见顶点,并且将顶点210a标记为“不可见顶点”。
依此类推,步骤S130可以对模型210的每一个顶点进行上述的“不可见顶点”的检查操作。因此,模型简化方法可以由目前顶点向渲染面绘制包围体并判断包围体是否被遮挡,以决定是否将目前顶点标记为不可见顶点。请参照图1。在至少一基元中的一目前基元的所有顶点均被标记为不可见顶点的情况下,步骤S140可以从模型中剔除所述目前基元。由此,模型210可以有效地被简化。
图7是根据本发明的一实施例说明图1所示模型简化方法的详细流程示意图。图7所示步骤S110、S120、S130与S140可以参照图1所示步骤S110、S120、S130与S140的相关说明。在图7所示实施例中,步骤S120包括步骤S121与S122,而步骤S130包括步骤S131、S132与S133。
请参照图6与图7。步骤S121可以从模型210的多个顶点中选择尚未处理的一个顶点作为视点。所述“处理”是指,步骤S121、S122、S131、S132与S133的“不可见顶点”的检查操作。步骤S121所选择的顶点被称为“目前顶点”。步骤S122可以将目前顶点作为视点,向渲染面610绘制模型210和包围体220。步骤S131可以进行遮挡查询/检查,亦即判断被绘制在渲染面610的包围体220是否完全地被模型210遮挡。当绘制在渲染面610的包围体220没有被完全遮挡时(步骤S131的判断结果为“否”),步骤S132会被略过而直接进行步骤S133。
当绘制在渲染面610的包围体220被完全遮挡时(步骤S131的判断结果为“是”),步骤S132会被进行。步骤S132可以将目前顶点标记为“不可见顶点”。步骤S133可以检查/判断模型210的这些顶点中是否还有尚未处理的顶点。当模型210还有尚未处理的顶点时(步骤S133的判断结果为“是”),步骤S121、S122与S131会被再一次执行。
当模型210的这些顶点全部都被处理过时(步骤S133的判断结果为“否”),步骤S140可以被进行。举例来说,当目前基元的所有顶点均被标记为“不可见顶点”时,步骤S140可以判断所述目前基元为一个不可见基元。当所述目前基元被判断为不可见基元时,步骤S140可以从模型210中删除所述目前基元。此外,步骤S140还可以检查模型210的所有顶点。若模型210的这些顶点中的一个顶点未被任何基元使用,则这个顶点可以称为“未使用顶点”。因为“未使用顶点”未被任何基元使用,所以步骤S140还可以从模型210删除所述未使用顶点。
图8是根据本发明的一实施例说明图6所示“向渲染面绘制模型和包围体”的操作的详细流程示意图。请参照图6与图8,步骤S122包括步骤S810、S820与S830。步骤S810可以设置包围体220的多个二维渲染平面中的任一者为渲染目标。步骤S820可以用步骤S121所选的目前顶点作为视点,向渲染目标绘制模型210。步骤S830可以用步骤S121所选的目前顶点作为视点,向渲染目标绘制包围体220,并判断被绘制在渲染目标的包围体220是否被遮挡。当被绘制在这些二维渲染平面(渲染目标)的包围体220完全被遮挡时(步骤S131的判断结果为“是”),步骤S132可以将目前顶点被标记为“不可见顶点”。
具体来说,假设包围体220包括六个互为正交的二维渲染平面p1~p6。步骤S810可以从这些二维渲染平面p1~p6中选择一个二维渲染平面(例如二维渲染平面p1)作为目前渲染目标。接着,步骤S820可以将用步骤S121所选的目前顶点作为视点,以向目前渲染目标绘制模型210。步骤S830可以将用步骤S121所选的目前顶点作为视点,以向目前渲染目标绘制包围体220,并判断被绘制在目前渲染目标(即二维渲染平面p1)的包围体220是否完全被遮挡。步骤S810至S830可以再一次被进行,以从这些二维渲染平面p1~p6中选择下一个二维渲染平面(例如二维渲染平面p2)作为目前渲染目标,然后向所述目前渲染目标绘制模型210与包围体220,并判断被绘制在目前渲染目标(即二维渲染平面p2)的包围体220是否完全被遮挡。依此类推,步骤S810至S830可以多次被进行,以分别向其余二维渲染平面p3~p6绘制模型210与包围体220,并判断被绘制在二维渲染平面p3~p6的包围体220是否完全被遮挡。当被绘制在二维渲染平面p1~p6的包围体220完全被遮挡时,步骤S121所选的目前顶点可以被标记为“不可见顶点”。在一实施例中,可以是每次都对所有的二维渲染平面绘制模型210与包围体220以判断被绘制的包围体220是否完全被遮挡。在另一实施例中,也可以是当绘制在其中一个二维渲染平面的包围体220被判断为没有被遮挡时,即判断步骤S121所选的目前顶点是可见顶点,而不继续对剩下的二维渲染平面绘制模型210与包围体220。例如假设绘制在二维渲染平面p2的包围体220被判断为没有被遮挡时,即可判断目前顶点是可见顶点,而不需要继续对剩下的二维渲染平面p3~p6绘制模型210与包围体220。
图9是根据本发明的另一实施例说明图6所示“向渲染面绘制模型和包围体”的操作的详细流程示意图。在图9所示实施例中,包围体220可以是一个立方体。请参照图6与图9,步骤S122包括步骤S910、S920与S930。步骤S910可以设置一个立方体作为渲染目标,其中所述立方体包围模型210和包围体220。步骤S920可以用步骤S121所选的目前顶点作为视点,向渲染目标绘制模型220。步骤S930可以用步骤S121所选的目前顶点作为视点,向渲染目标绘制包围体220,并判断被绘制在渲染目标的包围体220是否被遮挡。当被绘制在渲染目标(立方体)的包围体220完全被遮挡时(步骤S131的判断结果为“是”),步骤S132可以将目前顶点被标记为“不可见顶点”。
综上所述,上述诸实施例所述的模型简化方法可以由目前顶点向渲染面绘制包围体220,并且判断包围体220(或230)是否被模型210遮挡,以决定是否将目前顶点标记为“不可见顶点”。在对模型210的多个顶点完成“不可见顶点”的检查后,所述的模型简化方法可以检查模型210的多个基元的每一个。在目前基元的所有顶点均被标记为“不可见顶点”的情况下,所述目前基元可以被判定为“不可见基元”,而所述的模型简化方法可以从模型210中剔除所述目前基元。除此之外,在对模型210的多个基元完成“不可见基元”的检查后,所述的模型简化方法还可以检查模型210的所有顶点。若模型210的这些顶点中的一个顶点未被任何基元使用,则这个顶点可以称为“未使用顶点”。所述模型简化方法可以从模型210删除所述未使用顶点,使模型能够更进一步地被简化。
以上所述仅为本发明较佳实施例,然其并非用以限定本发明的范围,任何熟悉本项技术的人员,在不脱离本发明的精神和范围内,可在此基础上做进一步的改进和变化,因此本发明的保护范围当以本申请的权利要求书所界定的范围为准。