将3D对象推挤到平面中的技术的制作方法

文档序号:15072659发布日期:2018-08-01 00:15阅读:187来源:国知局

本公开一般涉及三维(3d)建模,并且更具体地涉及将3d对象推挤或延伸到平面,例如以提供对3d对象的支撑并且实现3d打印。

背景

创建3d图像数据(诸如3d对象)在对3d对象建模的复杂性以及生成3d对象以准确描绘现实生活物体的复杂性两方面而言提出了特别的挑战。在这些挑战之外,还有3d数据到3d打印的最近应用,这通常要求完全的3d对象定义以产生完整的对象或产品。用于创建3d对象或3d图像数据的当前技术包括cad/cam软件产品、3d扫描传感器等。然而,这些和其他3d建模技术常常要求具体且全面的技术专家、昂贵的软件工具或此类工具链、或者甚至要求专用硬件(诸如传感器)。这些要求为3d建模的广泛使用带来了障碍。

目前,存在用于取得3d数据和修复该数据的技术,以使得该数据代表具有能够被3d打印的独特外壳和内部的真实体。但是,这些技术可能不会输出非常精细的3d对象。例如,地图数据的3d导出可能会生成视觉上吸引人的表面;然而,底层网格可能不均匀或不完整。在此示例中,如果3d导出被打印,则其可能不会立在平台上,或者可能以不代表原始地形的方向的方式倾斜。在另一个示例中,可以使用人脸的3d扫描数据来生成外壳或掩模。该掩模可被制作成可打印的,但是可能不会以例如对用户有吸引力的方式被精细化。

因此,需要用于修改3d数据例如以用于打印和其他应用的更好和更直观的技术。

概述

本公开的说明性示例包括但不限于方法、系统、以及各种设备。在一个方面,用于根据完整或部分3d数据生成三维(3d)对象的技术可以被改进。可以获得定义或部分定义3d对象的图像数据。使用该数据,可以定义与公共平面(例如,地平面)基本平行的3d对象的面向公共平面的表面。面向公共平面的表面的一个或多个边缘可被确定并被延伸到公共平面。可以基于面向公共平面的表面来生成由一个或多个延伸边缘界定并且与公共平面平行的底部表面。

系统和方法的其它特征在下文描述。特征、功能以及优点可在各示例中独立地实现,或者在又一些其它示例中被组合,特征、功能以及优点的进一步细节可参考以下的描述和附图来看到。

附图简述

以下将参考附图更全面地描述本公开的各实施例,其中:

图1描绘了将表示地图数据的部分定义的或非流形(non-manifold)的3d对象推挤到地平面上的示例。

图2描绘了将表示航天飞机的完整定义的或流形的3d对象推挤到地平面上的示例。

图3描绘了用于将与对象相关联的图像数据推挤到地平面上的示例操作规程。

图4描绘了将多个流形3d对象推挤到地平面上的另一示例。

图5a-5c描绘了将表示城市的一部分的复杂3d对象推挤到地平面上的示例,以及用于与复杂3d对象交互的用户界面。

图6描绘了用于定义要推挤到平面上的对象的表面的更详细操作规程的示例。

图7解说了用于确定在将对象推挤到平面上时使用图像数据的哪些多边形的示例图和过程。

图8描绘了用于构建对表示对象的图像数据的支持的更详细操作规程的示例。

图9是在其中可实现本文描述的各技术的示例通用计算环境。

说明性实施例的详细描述

本文描述了用于朝3d空间中的平面推挤或延伸3d对象以例如构建3d对象的基座或支撑的系统和技术。在一个方面,所描述的技术可被用于例如使用3d建模应用或工具来推挤完全定义且封闭的3d对象,在此被称为流形对象或流形网格。在另一个方面,所描述的技术可被用于例如使用3d建模应用或工具来封闭和推挤部分定义的3d对象,在此被称为非流形对象或非流形网格。所描述的技术可以提供用于操纵3d图像数据和对象以及用于生成例如可被打印并在平坦表面上显示的3d对象的易于使用的通用工具。所描述的技术可以在独立应用或程序中实现、作为云服务实现、可被包括在现有的或分开的3d建模应用、程序、平台中等。

在一个示例中,可以获得图像数据,该图像数据例如包括来自各种源的地图数据、对象数据、一个或多个位图或其他图像数据。图像数据可以包括完整3d图像数据。图像数据可以经由封闭的体积来定义一个或多个对象。图像数据可以附加地或替代地包括部分定义的3d图像数据,使得仅定义一个或多个3d对象的一部分(例如,从映射或路由应用取得的地图数据)。

在图像数据中定义的至少一个表面或表面的一部分可以被使用和/或被操纵以定义面向公共平面(诸如地平面)的表面。该表面可被延伸或推挤到公共平面。该推挤可以包括定义面向公共平面的表面的一个或多个边缘并且将该一个或多个边缘延伸到该公共平面。然后可以例如基于面向公共平面的表面生成底或盖,并将该底或盖连接到经延伸的边缘。例如,可以反转对原始表面的任何操纵,例如以将表示最初在图像数据中定义的对象的体积与将对象的至少一个表面连接到公共平面的经推挤体积相组合地封闭。在一些方面,经推挤的体积可以被分开定义,例如以使得能够进一步独立操纵该对象和经推挤部分或支撑中的一个或多个。

在一个示例中,可以操纵或修改(例如,翻转)所获得的图像数据以将包含在图像数据中的一个或多个对象朝向公共平面定向。在一些方面,这可以包括将图像数据分割成多个多边形或形状,以及翻转所述多边形中的一个或多个以使多边形定向成面向公共平面。在一些方面,诸如在图像数据定义了流形3d对象的情况下,可以省略所述操纵;然而,该对象仍然可被分为诸多边形。在这两种情况下,面向公共平面的多边形可被标识,并且围绕那些多边形的边缘可被构建,以便部分定义该对象的朝向公共平面的经推挤部分。然后可以将底部表面或平坦表面添加到与对象相对的经推挤边缘,以沿着公共平面将对象的经推挤部分内的体积完全封闭。先前被操纵(翻转)的多边形然后可以被定向回到其原始定向以恢复包含在图像数据内的对象。然后可以输出定义至少一个经推挤3d对象的所得到的图像数据,诸如在3d建模或建造器应用的用户界面中显示、准备好和/或发送到3d打印机以进行3d打印等。

在一个方面,所描述的技术可被用于为可被分配的经推挤区域生成分开的对象或网格(例如不同的颜色、纹理、材料等),诸如用于3d打印的支撑材料。经推挤对象网格可以在3d建模应用中被修改并独立于3d对象被保存、存储或共享。以此方式,可以在将3d对象发送到3d打印机之前定义支撑结构网格。另一方面,当前技术在设计和打印支撑结构时可能向用户提供不多(如果有的话)定制选项。在3d对象或内容创建者和内容消费者是不同的行动者,或者任务被分散在不同的机器、程序、应用等之间的情况下,该实现可能特别有用。

在另一示例中,例如表示人脸的图像数据可以从图像文件或者经由扫描人脸的相机或图像传感器获得。所描述的技术可以被用于完成或填充表示面部的图像数据,并且将面部图像数据的背侧朝着平面推挤并且还将图像数据向下朝另一平面推挤以形成面部的半像(bust)。在一个示例中,面部的表面可以关于面部与之对齐的平面镜像并用于创建该半像的后表面。面部的表面然后可以被推挤到后表面。然后可以定义所得到的面向下的表面(例如,与面部表面正交)的一部分或全部(例如,作为表示颈部的圆或椭圆,其尺寸可以相对于面部表面的大小来定义)可以然后被向下推挤到平坦表面,来为该半像提供支架或支撑。以此方式,可以用最少的手动输入或操纵根据图像数据创建高质量的3d可打印半像。

在另一示例中,图像数据可以包括一个或多个图表、图形或数据的其他图形表示。所描述的技术可以用于例如通过将图表的视觉元素(例如,柱、管、具有厚度的线等)推挤到一个或多个公共平面来生成图表的3d可打印模型。在一些方面,推挤过程可以包括将图像数据朝后表面推挤,同时经由用于创建向后推挤的平坦或平面边缘来创建底部表面。

在另一示例中,可以将所描述的技术应用于3d模型以在3d对象的两个或更多个所标识部分之间推挤3d对象以连接该两个或更多个部分。此示例可以包括或类似于将填塞(flood-fill)功能应用于3d图像数据。

应当领会,所描述的技术可被应用于除推挤或定义对3d对象的支撑之外的各种3d图像建模和操纵。

在一些方面,所描述的技术可以提供各种优点,包括减少用户为定义和配置用于3d对象的支撑结构而需要(例如经由用户界面)采取的步骤的数量。所描述的技术还可以通过定义与3d对象分离的支撑结构来提供与多个不同3d打印机、驱动器/切片机等兼容的支撑结构。在一些方面,所描述的技术可以提供用于定义、配置和打印3d支撑结构的更高效(例如可以减少处理器负载和/或可以节省存储器资源)的过程。

图1解说将表示地形特征的3d图像数据105推挤到地平面120上的示例图和过程100。在所解说的示例中,3d图像数据105可以是非流形数据,使得数据包括至少一个非流形表面或对象(例如,图像数据没有完全包围一空间体积)。图像数据105可以表示从地图或导航应用(诸如bing地图)取得的数据。图像数据105可以定义各种特征,例如丘陵110、山谷115或者多种其他地形特征、对象、建筑物、人等中的任何特征。根据下面更详细描述的技术,地形图像数据105可以被推挤到地平面120上。推挤过程可以包括操纵图像数据105中的表面定义地形以面向地平面120,定义面向下的表面的边缘并将边缘推挤到地平面(经由箭头125-160指示)。面向下的表面然后可以被平移到地平面120以定义盖或底部表面,并且连接到经推挤的边缘,从而封闭表面105和地平面120之间的体积。

在一个方面,3d图像数据105可以与经推挤部分组合以形成封闭单个体积的单个对象。在此场景中,经推挤的3d图像数据105例如可以是3d打印的,以便它可以牢固地立在平坦的水平表面上。在另一方面,经推挤部分可以被分开地定义为与图像数据105分开的对象或图像数据,其与3d图像数据105的底部表面适配或对齐。在这种场景中,经推挤部分可以被独立于3d图像数据105操纵、修改、配置等。这可以实现3d图像数据105和经推挤部分的更大定制,例如,针对不同的3d打印机、应用、或甚至不同的行动者。

图2解说了根据所描述的技术的示例用户界面200,其显示表示航天飞机的3d图像数据210的推挤。表示航天飞机210的3d图像数据可以包括流形图像数据,流形图像数据进一步包括完全定义的顶部表面或可见表面235和完全定义的底部表面215,它们一起封闭航天飞机210的体积。用户界面200的第一屏幕或视图205可以将航天飞机210显示在平面或地平面220上方。根据所描述的技术,航天飞机210可以经由操作225被推挤以产生经推挤的3d图像数据230。经推挤的3d图像数据230可以包括航天飞机210的顶部表面235和从航天飞机210的底部表面215跨越到定位在地平面220上的底部表面245的经推挤部分240。在一些方面,底部表面可以被定位在与地平面220平行的任何高度处。

在一些方面,经推挤部分240可以与航天飞机210连续地被形成或建模。在其他方面,经推挤部分240可以被建模并且被定义为相对于航天分集210分开的体积。将经推挤部分240形成为分开的体积可以实现经推挤部分240相对于航天飞机210的更大的定制和配置。在一些情况下,经推挤部分240可以与不同材料、颜色、纹理、一致性相关联,以例如节约用于3d打印的资源(例如,在将被丢弃的情况下,针对经推挤部分240使用更少的材料)。在另一示例中,经推挤部分240可以与不同的材料或颜色相关联以形成用于3d打印的航天飞机210的美学上令人愉悦的支撑或基座。

图3解说了用于将3d对象推挤到3d空间中的平面(诸如地平面)的示例过程300。在过程300的以下描述中,应当领会,为了便于参考,使用诸如顶、底等方向。所描述的技术可以在任何平面上以及在任何方向上实现以达到类似的效果。另外,可以针对流形和非流形表面或流形和非流形3d对象来实现过程300。在下面的描述中将会注意到这些不同实现的过程中的差异。在一个方面,在执行一些额外的预处理和后处理步骤以将非流形对象转变为流形对象的情况下,非流形情形可被认为是流形情形。

过程300可以在操作302处开始,在操作320可以获得对应于至少一个3d或部分3d对象的图像数据。图像数据可以分别包括流形和/或非流形对象或表面,诸如图像数据105和210。图像数据可以从与执行3d建模应用的设备通信的相机获得,可以从正在执行的设备本地或远程的一个或多个文件或数据存储获得,从提供视觉或图形组件(例如,包括各种形式的媒体)的正在执行的应用或程序(例如,地图或路线寻找应用)获得,等等。接着,在操作304处,可以将图像数据分割成诸多边形或其它片段,诸如各种尺寸的其他形状等,以用于进一步的处理和操纵。根据各种技术中的任何技术,诸如基于图像数据的一个或多个特征,图像数据中的改变或变化(诸如在图像数据内标识的的颜色、纹理、形状等的改变或变化),图像数据可被分割或以其他方式分成多个多边形或形状。在一个示例中,图像数据可以包括地图数据,该地图数据可以基于所标识的特征(诸如建筑物街道(例如,进入城市街区)、水、陆地、河流、丘陵、树木、植物等)而被分割。

在非流形情况下,在操作306处,定义图像数据的多边形或片段中的一个或多个的定向可被翻转或修改、旋转等,使得每个多边形面向公共平面,诸如向下朝向地平面。例如,为了稍后在过程300中恢复原始表面,可以在操作308处标识并打标签或标记被翻转的每个多边形。

接着,在操作310处,可以确定形成图像数据/对象的面向公共平面的表面的多边形。在一个示例中,面向公共平面的表面可以是对象的底部表面或不可见表面。在一些方面,操作310可以进一步包括操作312,该操作312可以进一步包括确定从公共平面的角度哪些面向公共平面的多边形没有被另一个多边形遮挡(甚至部分地遮挡)。接着,在操作314处,未被标识为面向公共平面的多边形的多边形可以与要打印并输出(例如,输出到3d建模应用的用户界面以进行显示)的最终3d对象相关联。下面将参考图6和图7来描述操作310-314的更详细的示例。

在操作316,可以确定来自操作310的面向公共平面的表面的闭合的轮廓或边缘。轮廓或边缘可以形成具有不同尺寸的各种形状中的任何形状等。在一个示例中,此表面可以对应于3d对象的底部表面。在一些方面,此表面可能不完整,或可能包括多个不同的表面。在操作318处,闭合的轮廓/边缘然后可以被推挤到公共平面。在一些方面,操作318可以进一步包括在操作320处,在拓扑上拆分在一端处的共享顶点以保留输出流形网格或对象。操作318将在下文参考图4更详细地描述。操作318可以进一步包括在操作322处从边缘输出垂直壁。操作322可以包括用两个三角形(例如,为边缘壁定义矩形)来定义每个垂直边缘壁。

接着,可以根据在操作310处确定的与公共平面平行且在操作324处输出的多边形来形成平坦多边形盖。操作324可以从底部或公共平面在拓扑上闭合输出网格。在一些方面,操作324可以进一步包括在操作326处保留用于形成平坦多边形盖的原始表面或顶部表面的多边形的原始镶嵌或几何图案。另外,操作324可以进一步包括在操作328处将面向公共平面的表面的坐标(诸如顶点坐标)平坦化到公共平面水平以形成多边形盖或底部表面。在一些方面,已经被推挤的边缘和顶点可以优先于原始(未修改)的边缘和顶点。

在非流形应用中,在操作310处被标记为面向底部或公共平面的多边形的定向可以在操作330处被翻转并输出,例如没有任何平坦化。同样在非流形的情况下,在操作306处被翻转且未被标记为面向底部或公共平面的多边形的定向可以在操作332处被恢复。在一些情况下,已经被推挤的多边形可以被从操作332排除。在操作332结束时,完全定义的3d对象(其中至少一个表面被推挤到面向公共平面的平面,其中经推挤部分封闭一体积)可以例如在3d建模应用的用户界面中被输出或渲染、被发送到3d打印机等等。

图4解说了根据所描述的技术的示例用户界面,诸如图2的用户界面200,其显示表示两个不同对象410和415的3d图像数据的推挤。对象410和415可各自包括矩形表面(所解说定向中的向上表面),从而与彼此共享角顶点470。对象410和415可各自由矩形金字塔形底部部分或表面420和425来定义。对象410和415可以显示在用户界面405的第一视图中,诸如由3d建模应用所提供的。

可以经由上述过程300来转变对象410和415,以产生显示在第二视图435中的对象440和445。对象440和445可各自定义从对象410和415的顶部表面到位于地平面430上的表面460和465的矩形棱镜(例如立方体)。在一些方面,底部表面460、465可位于地平面430之上或之下,例如平行于地平面430。根据过程300,例如通过经由生成两个三角形部分450、455来形成垂直定向的矩形壁,可以将对象410、415的每个边缘推挤到地平面430。在将对象410和415推挤到地平面430的过程300中,两个对象之间的共享顶点470可以在拓扑上被拆分,例如,以便能够对每个经推挤对象440、445进行分开的和流形的定义。通过拆分顶点470,使得每个对象410、415是分开的并且由点470处的分开的角来定义,每个经推挤对象440、445可各自封闭单独的体积,在所解说示例中由矩形棱体定义的。

图5a解说了推挤到公共或地平面510上的更复杂的图像数据505的示例500a。复杂图像数据505可以代表城市的一部分,并且可以包含大量的个体对象(非流形、流形或其组合)。通过根据过程300将图像数据505向下推挤到地平面510,可以维持和/或增强图像数据505的定向、缩放、比例等,以使得能够将被推挤到地面上的图像数据505进行3d打印。在一些方面,包括经推挤部分的单独的支撑结构515可以被单独地定义并且可独立地配置以用于3d打印。在所解说的示例中,3d或部分3d地图数据可以被转变为完全的3d模型,其可以被3d打印或在3d建模应用中渲染以用于各种目的。同样在所解说的示例中,用户界面控件520可以提供用于改变图像数据505的视角(平移、旋转、缩放等),修改图像数据505本身(各种图像编辑工具和3d建模工具中的任一者)和其他工具或选择的控件。

用户界面控件520的其他变体在图5b和5c的用户界面500b中被解说,其提供用于查看、修改和预览3d对象的控件。用户界面500b可以包括用于编辑3d对象的各种工具530以及其他可选菜单项。工具530可以包括用于压印532、拆分534、简化536、平滑538、向下推挤540(如上所述)、合并两个或更多个对象542、使两个或更多个对象相交544、以及从一个或多个对象减去部分的选择选项。在一些方面,预览工具550也可以被包括在用户界面500b中,其提供3d对象或支撑结构的经推挤部分的预览。预览工具550可以包括用于预览3d对象的推挤或支撑结构的各种选择项,包括项目选择552、材料选择554,其可以列出预览元素的可选轮廓或视觉指示556以及未解说的其它选项。

在图5b所解说的示例中,3d对象565的推挤部560(其包括在一侧上具有孔的矩形棱柱)可以被预览,如虚线所解说的结构所指示的。预览工具550可以使用户界面500b的设计者或其他用户能够更好地可视化和/或修改3d对象565的推挤部或支撑结构560,同时维持3d对象565自身的更好或更清晰的可视化。

图5c解说了具有与预览的支撑结构560相对应的推挤部或支撑部570的相同3d对象565,但是被解说为具有实线。

图6解说了用于确定对象的面向底部或公共平面的表面的示例过程600,例如以用于将对象推挤到公共平面。在所解说的示例中,过程600可以对应于上面参考图3描述的过程300的操作310、312和314中的一个或多个。相应地,过程600可以假设图像数据已被获得并且已经被分割成诸多边形(例如,过程300的操作302和304)开始。在非流形示例中,过程600可以在一个或多个多边形被翻转以将它们朝公共表面定向并被标记(例如,过程300的操作306和308)之后开始。

过程600可以在操作602处开始,其中每个输入多边形可以被标识或标记以指示该多边形不被丢弃。接着,在操作604处,对于每个多边形,例如可以使用界定体积来确定可能被至少一个其他多边形遮挡的一组候选多边形。例如,操作604可以包括创建对应于第一测试多边形的区域并将该区域朝向公共表面延伸的界定体积。例如,可以基于与测试多边形的邻近度(例如,在测试多边形的特定距离内的多边形子集,例如基于多边形的至少一个维度的百分比、接触或紧邻测试多边形的多边形子集,或基于其他参数(包括子集与测试多边形的相对角度等)选择的子集)来选择周围多边形的子集。使用多种技术中的任何一种,可能是遮挡多边形的候选集合可以根据哪些多边形可能与界定体积相交来确定。在操作606处,可以确定多边形是否背向公共平面(向上)或者多边形是否具有严格垂直定向而使得它与公共平面正交。如果确定的结果为是,则在操作608处,该多边形可被标记为丢弃。如果操作606处的确定的结果为否,则在操作610处,对于每个剩余多边形,可创建包括多个平面(例如,在三角形多边形的情况下是三个平面)的剪裁体积(每个平面各自延伸至无限远或至少越过公共平面)以及与延伸平面正交的至少一个盖或表面。可按以下方式创建多个这些平面:所述平面与公共平面垂直或正交,或者在某些情况下相对于测试多边形正交,并且包含或延伸自多边形的每个边缘。附加平面可以基于测试多边形自身来创建并且可以表示剪裁体积的底“盖”。在一些方面,为其执行操作610的多边形可以包括先前标记为遮挡的非垂直多边形,因为这样的多边形可能仍然具有遮挡其他多边形的未被遮挡部分。

然后,在操作612处,可以将在操作604和606处确定的每个候选多边形集合与在操作610处创建的剪裁体积进行比较。在一些方面,例如,通过仅将剪裁体积与被选择为可能遮挡对应于剪裁体积的测试多边形的相应候选多边形集合进行比较,可以减少比较次数。在一个示例中,在操作604处对候选遮挡多边形集合的选择可以被配置为在尺寸上更小,诸如通过缩窄将多边形标识为可能遮挡测试多边形的要求。如果在操作614处确定多边形至少部分地位于测试多边形的剪裁体积内,则可以在操作608处将该多边形丢弃。在一些方面,被确定为部分位于剪裁体积内的多边形可以被拆分,使得多边形的新定义的边缘跟随剪裁体积或与剪裁体积对齐。在这种场景中,经拆分多边形在剪裁体积外的部分可被保留,并且内部的部分可被丢弃。在操作616,可以标识并输出至少部分不在剪裁体积内或与剪裁体积相交的每个多边形,例如以定义对象/图像数据的底部表面或面向公共平面的表面。然后此表面可以例如经由过程300使用以将对象/图像数据推挤到公共平面并且可被用于定义界定图像数据在公共平面上的经推挤部分的盖。

图7解说了多边形720与为测试多边形715生成的剪裁体积705相比较的图700,例如,对应于以上参考图6描述的操作612。如所解说的,剪裁体积705可以包括从测试多边形715的边缘延伸的三个垂直壁,测试多边形715被解说为三角形,具有盖710,该盖710具有与位于垂直壁的相对端上的测试多边形715相同的面积。在一个示例中,可以经由操作610来生成剪裁体积705。可以例如经由上述操作604和606将多边形720标识为或许可能遮挡多边形715的候选多边形集合的部分或全部。在一个方面,多边形720(或在一个示例中其投影或其延伸)可被与剪裁体积705进行比较并且被确定为与剪裁体积705相交/至少部分交叠。如所解说的,多边形720的部分725可以位于剪裁体积705内,如框730所表示的,其示出了剪裁体积705的后部垂直壁与部分725的相交。在一个方面,可以将盖710保留为例如底部或公共平面盖的候选以在上面参考图3描述的过程300的操作324或328中使用。

应当领会,图700、剪裁体积705、多边形715和测试多边形720仅作为示例给出。所描述的技术构想多边形715、720的各种形状,用于构建剪裁体积705的各种不同的体积和过程等。

图8解说了根据所描述的技术的用于创建用于3d对象且与3d对象分开的经推挤支撑结构的示例过程800。过程800可被用于生成适合于3d对象的至少一个表面的或直接与3d对象的至少一个表面对齐的单独网格,其可与3d对象分开地被定制,例如通过将一个或多个不同属性分配给经推挤部分,诸如颜色、纹理、或材料、密度等,例如以用于3d打印。例如,当不同的应用、设备、用户等要执行3d对象创建和3d打印任务时,过程800可能特别有用。

在一个方面,操作800可以被应用于非流形的图像数据或对象。在另一方面,过程800可以在图像数据或对象是流形或者完全定义图像数据或对象的体积的时候被实现。在此流形场景中,操作806和808可从过程800中省略。过程800的输出可以是完全定义的支撑结构,该支撑结构可以与3d对象/图像数据的面向公共平面的表面或底部表面匹配或对应,并且可以与底层3d对象或图像数据分开。过程800可以共享上面参考图3描述的过程300的一个或多个操作。

过程800可以在操作802处开始,在操作802可以获得对应于至少一个对象的图像数据(诸如3d或部分3d图像数据)。在操作804处,根据各种技术中的任何技术,诸如基于图像数据的一个或多个特征,诸如颜色、纹理、在图像数据内标识的形状等,图像数据可被分割或以其他方式分成多个多边形或形状。

在非流形情况下,在操作806处,定义图像数据的多边形或片段中的一个或多个的定向可被翻转或修改、旋转等,使得每个多边形面向公共平面,诸如向下朝向地平面。例如,为了稍后在过程800中恢复原始表面,可以在操作808处标识并打标签或标记被翻转的每个多边形。

接着,在操作810处,例如可以镜像原始向下或面向公共平面的多边形(例如,在操作806处未翻转),使得垂直于每个或所有多边形的平面被反转。操作810的结果可以用于定义由过程800输出的经推挤部分的顶部表面或与3d对象对接表面,使得经推挤部分可以直接与3d对象的向下或面向公共平面的表面对齐。

接着,在操作812处,可以确定形成图像数据/对象的面向公共平面的表面的多边形。在一个示例中,面向公共平面的表面可以是对象的底部表面或不可见表面。在一些方面,操作812可进一步包括在操作814处确定从公共平面的角度哪些面向公共平面的多边形未被另一多边形遮挡(甚至部分遮挡),如以上参考图6和7更详细描述的。在一些流形情况下,可以排除操作814,因为流形对象可能已经定义了底部表面或面向公共平面的表面。

在操作816,可以确定来自操作812的面向公共平面的表面的闭合轮廓或边缘。轮廓或边缘可以形成具有不同尺寸的各种形状中的任何形状等。在一个示例中,由闭合轮廓定义的表面可以对应于3d对象的底部表面。在一些方面,此表面可能不完整,或可能包括多个不同的表面。在操作818处,闭合的轮廓/边缘然后可以被推挤到公共平面。在一些方面,操作818可以进一步包括在操作820处,在拓扑上拆分在一端处共享的顶点以保留输出流形网格或对象并在操作822处从边缘输出垂直壁。

接着,可以根据在操作812处确定的与公共平面平行且在操作824处输出的多边形来形成平坦多边形盖。在一个方面,可以在操作810处产生的镜像多边形上执行操作824。操作824可以从底部或公共平面在拓扑上闭合输出网格。在一些方面,操作824可以进一步包括在操作826处保留用于形成平坦多边形盖的原始表面的多边形的原始镶嵌或几何图案,并且还可以包括在操作828处将面向公共平面的表面的顶点坐标平坦化到公共平面水平以形成多边形盖或底部表面。在一些方面,已经被推挤的边缘和顶点可以优先于(取代其使用)原始(未修改)的边缘和顶点。

在操作830处,在操作810处镜像的多边形然后可以被输出以形成经推挤支撑结构的顶部表面或面向3d对象的表面。在非流形示例中,可以将在操作808处标记的面向公共平面的多边形的定向设置为与公共平面表面相对,以至少部分地定义支撑结构的顶部表面或面向3d对象的表面。然后可以在操作832处输出定义与3d对象分开的体积的经推挤支撑结构。

在一些非流形示例中,可以经由过程800生成对象的原本未定义的表面的底部表面,例如以实现3d对象和支撑结构之间的支撑界面。在一些情况下,该表面可以被定义为3d对象的顶部表面的镜像,可以被定义为平行于公共平面的平坦表面,或者可以被定义为主要平坦的表面,其具有凹槽、凹陷、栓钉、或其他结构,以在支撑结构和3d对象之间实现更牢固的配合表面。

在一个示例中,例如在被发送到3d打印机之前,可以编辑由过程800生成的网格的支撑结构(例如,经由包括交叉、减去、移动、调整大小等的多个操作等),这与已知的做法相反。过程800可以使得用户能够与可以实现或使用不同的3d打印机硬件和/或可以利用不同的3d编辑和建模软件的其他用户共享3d对象和推挤支持结构。

在一个示例中,取决于使用中的材料的特性和硬件能力,次级组件(例如,切片机/驱动器)可以将支撑结构(在本文中也称为支撑包络)转换为可打印的支撑网格。传统或现有的3d打印软件通常自动生成支柱,诸如在用户已经指定了打印目标后或根据自动(不可编辑)配置。在一些情况下,现有打印软件可以仅启用有限量的配置,诸如通过允许用户在已经根据设置过程生成支撑结构之后删除或添加支柱。相反,过程800使得内容创建者能够定义支持材料3d包络并且针对特定3d模型和应用微调和配置包络,而不必依赖于关于硬件的假设并且没有通过支撑结构的自动不可编辑生成而由切片器/驱动器施加的约束。

在一些方面,对于单推挤机的基于fdm的打印机(例如,其中支撑材料与对象材料相同),定义支撑结构的顶部表面或与3d对象对接的表面的顶部三角形/多边形可以向下移位z轴(垂直)间隙或偏移量。这可以使得用于打印支撑结构的材料(例如塑料)凝固并减少对3d对象的粘附,从而使得支撑结构易于移除。对于使用可溶解材料来打印支撑结构的3d打印机来说,维持0z轴间隙以减少支撑顶部的对象的变形并增强对对象的粘附性非常重要。对于不需要用3d对象打印的支撑结构的打印机(例如,粘合剂喷射),支撑结构可以简单地在驱动器中被丢弃,而不实际被打印。在许多情况下,支撑结构或网格可以从实心转换为之字形或其他部分实心图案(材料的降低的密度)以减少打印3d对象的支撑网格所用的材料和所需的能量。

如下所述,可以在一个或多个计算设备或环境上实现上述3d建模或构建器应用,包括3d对象推挤技术和/或用户界面200。图9描绘了示例通用计算环境,其中可以体现本文描述的一些技术。计算系统环境902只是合适的计算环境的一个示例,并且不旨在对当前公开的主题的使用范围或功能提出任何限制。也不应该将计算环境902解释为对示例操作环境902中示出的任一组件或其组合有任何依赖性或要求。在一些实施例中,所描绘的各种计算元素可包括被配置成实例化本发明的各具体方面的电路。例如,本公开中使用的术语电路可包括被配置成通过固件或开关来执行(诸)功能的专用硬件组件。其他示例实施例中,术语电路可包括由实施可用于执行(诸)功能的逻辑的软件指令配置的通用处理单元、存储器等。在电路包括硬件和软件的组合的示例实施例中,实施者可以编写体现逻辑的源代码,且源代码可以被编译为可以由通用处理单元处理的机器可读代码。因为本领域技术人员可以明白现有技术已经进化到硬件、软件或硬件/软件组合之间几乎没有差别的地步,因而选择硬件或是软件来实行具体功能是留给实现者的设计选择。更具体地,本领域技术人员可以明白软件进程可被变换成等价的硬件结构,而硬件结构本身可被变换成等价的软件进程。由此,对于硬件实现还是软件实现的选择是设计选择之一并留给实现者。

可包括移动设备或智能手机、平板、膝上型设备、台式计算机、云计算资源等中的任一者的计算机902通常包括各种计算机可读介质。计算机可读介质可以是可由计算机902访问的任何可用介质,而且包含易失性和非易失性介质、可移动和不可移动介质。系统存储器922包括易失性和/或非易失性存储器形式的计算机可读存储介质,诸如只读存储器(rom)923和随机存取存储器(ram)960。包含诸如在启动期间帮助在计算机902内的元件之间转移信息的基本例程的基本输入/输出系统924(bios)通常存储在rom923中。ram960通常包含处理单元959可立即访问和/或当前正在操作的数据和/或程序模块。作为示例而非限制,图9解说了操作系统925、应用程序926、包括具有推挤工具970的3d建模应用965的其他程序模块927和程序数据929。

计算机902也可以包括其他可移动/不可移动、易失性/非易失性计算机存储介质。仅作为示例,图9示出了从不可移动、非易失性磁介质中读取或向其写入的硬盘驱动器938,从可移动、非易失性磁盘954中读取或向其写入的磁盘驱动器939,以及从诸如cdrom或其他光学介质等可移动、非易失性光盘953中读取或向其写入的光盘驱动器904。可以在该示例操作环境中使用的其它可移动/不可移动、易失性/非易失性计算机存储介质包括但不限于,磁带盒、闪存卡、数字多功能盘、数字录像带、固态ram、固态rom等等。硬盘驱动器938通常通过诸如接口934之类的不可移除存储器接口连接至系统总线921,而磁盘驱动器939和光盘驱动器904通常由诸如接口935或936之类的可移除存储器接口连接至系统总线921。

以上讨论并在图9中示出的驱动器及其相关联的计算机存储介质为计算机902提供了对计算机可读指令、数据结构、程序模块和其他数据的存储。在图9中,例如,硬盘驱动器938被示为存储操作系统958、应用程序957、其他程序模块956和程序数据955。注意,这些组件可与操作系统925、应用程序926、其他程序模块927和程序数据929相同,也可与它们不同。在此操作系统958、应用程序957、其他程序模块956以及程序数据955被给予了不同的编号,以至少说明它们是不同的副本。用户可以通过输入设备,诸如键盘951和定点设备952(通常称为鼠标、跟踪球或触摸垫)向计算机902输入命令和信息。其他输入设备(未示出)可包括话筒、操纵杆、游戏手柄、圆盘式卫星天线、扫描仪等。这些及其他输入设备常常通过耦合到系统总线921的用户输入接口936连接到处理单元959,但是,也可以通过其他接口和总线结构,如并行端口、游戏端口、通用串行总线(usb)端口来进行连接。监视器942或其他类型的显示设备也经由诸如视频接口932之类的接口连接至系统总线921。除监视器之外,计算机还可包括可以通过输出外围接口933连接的诸如扬声器944和打印机943(诸如3d打印机)之类的其他外围输出设备。

计算机902可使用到一个或多个远程计算机(诸如,远程计算机946)的逻辑连接而在联网环境中操作。远程计算机946可以是个人计算机、服务器、路由器、网络pc、对等设备或其他常见网络节点,并且通常包括许多或所有以上相对计算机902所描述的元件,但在图9中仅示出了存储器存储设备947。图9中所描绘的逻辑连接包括局域网(lan)945和广域网(wan)949,但还可包括其他网络。此类联网环境在办公室、企业范围的计算机网络、内联网和互联网中是常见的。

当在lan联网环境中使用时,计算机902通过网络接口或适配器937连接到lan945。当在wan联网环境中使用时,计算机902通常包括调制解调器905或用于通过诸如因特网等wan949建立通信的其他手段。调制解调器905可以是内置的或外置的,可经由用户输入接口936或其他适当的机制连接到系统总线921。在联网环境中,相关于计算机902所示的程序模块或其部分可被储存在远程存储器存储设备中。作为示例而非限制,图9示出了远程应用程序948驻留在存储器设备947上。应当领会,所示的网络连接仅是示例,并且可使用在计算机之间建立通信链路的其他手段。

在一些方面,其它程序927可包括提供如上所述的功能的3d建模或构建器应用965,诸如在推挤工具970中。在一些情形中,3d建模应用965/推挤工具970可以执行过程300、600和/或800,并且如上所述通过图形接口931、视频接口932、输出外围接口933和/或一个或多个监视器或触摸屏设备942来提供用户界面200。在一些方面,3d建模应用965/推挤工具970可以与3d打印机943通信以产生3d图像数据的物理3d模型以及对应的支撑结构或网格,如上所述。在一些方面,其它程序927可包括一个或多个3d虚拟化应用,该应用可获取并提供可被显示的由3d建模应用965生成的3d模型的图像。

以上章节中描述的过程、方法以及算法中的每一个可被全部或部分自动地实例化在由一个或多个计算机或计算机处理器执行的代码模块中。代码模块可被存储在任意类型的非瞬态计算机可读介质或计算机存储设备上,诸如硬盘、固态存储器、和/或光盘等。过程和算法可被部分或全部地以专用电路来实现。所公开的过程和过程步骤的结果可被持久地或以其它方式存储在任意类型的非瞬态计算机存储中,诸如举例而言易失性或非易失性存储。以上所描述的各特征和过程可被彼此独立地私钥,或以各种方式被组合。所有可能的组合和子组合被预期落在本公开的范围内。另外,在一些实现中,某些方法或过程块可被省略。本文描述的方法和过程也不被限于任何特定的顺序,并且各个块以及与其有关的状态可以适当的其它顺序来执行。例如,所描述的块或状态可以不同于具体公开的顺序来执行,或者多个块或状态可被组合成单个的块或状态。示例块或状态可被顺序地、并行地或以其它形式来执行。块或状态可相对于所公开的示例实施例被添加或移除。本文描述的示例系统和组件可被与所描述地不同地配置。例如,相对于所公开的示例实施例,各元素可被添加、移除或重新排列。

还将理解,各个项被例示为在被使用是被存储在存储器或存储中,并且存储器管理和数据完整性的目的,这些项目或其部分可在存储器和其它存储设备之间转移。替代地,在其它实施例中,软件模块和/或系统的一些或全部可在另一设备上的存储器中执行并且经由跨计算机通信与所例示的计算系统通信。此外,在一些实施例中,系统和/或模块的一些或全部可以其它方式被实现或提供,诸如至少部分地以固件和/或硬件的形式,硬件包括但不限于专用集成电路(asic)、标准集成电路、控制器(例如,通过执行恰当的指令、并且包括微控制器和/或嵌入式控制器)、现场可编程门阵列(fpga)、复杂可编程逻辑器件(cpld)等。模块、系统和数据结构中的一些或全部还可被存储(例如作为软件指令或结构化数据)在计算机可读介质上,诸如硬盘、存储器、网络或便携式介质产品以供恰当的驱动器或经由恰当的连接来读取。系统、模块和数据结构还可被作为各种各样的计算机可读传输介质上的生成的数据信号(例如,作为载波或其它模拟或数字传播信号的一部分)来传送,计算机可读传输介质包括基于无线和基于有线/线缆的介质,并且可采用各种形式(例如,作为单个或复用的模拟信号的一部分,或者作为多个离散数字分组或帧)。在其它实施例中,这类计算机程序产品还可采用其它形式。因此,本公开可以其它计算机系统配置来实现。

除非另外具体声明,或者否则在如所使用的上下文中可以理解的,本文使用的条件语言(诸如“能”、“能够”、“可能”或“可以”、“例如”等)一般意图表达特定实施例包括而其他实施例不包括特定特征、元素和/或步骤。因此,这样的条件语言一般并非旨在暗示对于一个或多个实施例需要特征、元素和/或步骤,或者一个或多个实施例必然包括用于决定的逻辑、具有或不具有用户输入或提示、在任何特定实施例中是否要包括或要执行这些特征、元素和/或步骤。术语“包括”、“包含”、“具有”等是同义词并且被以开放形式包括性使用,而不排除其它元素、特征、动作、操作等等。此外,术语“或”被以其包括含义来使用(而不是以其排除含义),使得当被使用时,例如用于连接元素列表时,术语“或”表示该列表中的元素中的一个、一些或全部。

虽然某些示例实施例已被描述,但是这些实施例是仅作为示例来提供的,而不旨在限制本文公开的发明的范围。因此,前述描述中没有任何旨在暗示任何特定的特征、特性、步骤、模块或块是必需或不可替代的。事实上,本文描述的新的方法和系统可以各种其它形式来实现;此外,本文描述的方法和系统的形式上的各种省略、替换和改变可在不背离本文公开的发明的精神的情况下进行。随附的权利要求及其等同体旨在覆盖这类形式或修改,如将会落在本文公开的发明的某些的范围和精神内的。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1