VTK 学习----VTK对象-演员类

4.3.1 vtkProp

 

vtkProp

所有演员,体和注释的抽象超类。

vtkProp是可以存在于渲染场景(2D或3D)中的任何对象的抽象超类。vtkProp实例可以响应各种渲染方法(例如,RenderOpaqueGeometry())。vtkProp还定义了用于拾取,LOD操作以及控制可见性,拾取和拖动的常用实例变量的API。

vtkLegendScaleActor

使用比例和距离信息注释渲染窗口。

此类用于注释渲染窗口。其基本目标是提供场景规模的指示。围绕渲染窗口的四个轴指示(以各种方式)相机正在观看的比例。还存在用于显示比例图例的选项。

可以对轴进行编程以显示距离刻度或xy坐标值。默认情况下,比例显示距离。但是,如果您知道视图位于z轴下方,则可以对刻度进行编程以显示xy坐标值。

请注意,轴和比例值受透视效果的影响。距离在相机的焦平面中计算。当存在大视角(即,透视投影)时,所计算的距离可能为用户提供错误的比例感。启用平行投影时,不会出现这些效果。

vtkPropAssembly

创建道具的层次结构。

vtkPropAssembly是一个将props和其他prop程序集分组为树状层次结构的对象。

vtkPropAssembly对象可以在一个使用vtkProp的地方而使用,因为它是vtkProp的一个子类。区别在于vtkPropAssembly维护一个形成程序集的其他prop和prop程序集实例(它的“部分”)的列表。请注意,此过程是递归的:您可以创建由任意深度的prop程序集组成的组。

只要父程序集在prop列表中,组成prop程序集的vtkPropAssemblyvtkProp就不需要添加到渲染器的props列表中。这是因为它们在分层遍历过程中自动呈现。

vtkPropAssemblies可以包含程序集的层次结构,其中一个层次结构中使用的一个actor或程序集也用于其他层次结构。但是,假设没有循环(例如,parent-> child-> parent),这将导致程序失败。

4.3.2 vtkActor2D

vtkActor2D

绘制2D数据的actor。

vtkActor2D类似于vtkActor,但它可以用于二维图像和注释。vtkActor2D具有位置,但不使用的变换矩阵。vtkActor2D引用了一个执行渲染的vtkMapper2D对象。

vtkAxisActor2D

创建带刻度线和标签的轴。

vtkAxisActor2D根据特定的实例变量设置创建带有刻度线,标签和/或标题的轴。vtkAxisActor2D是一个2D演员; 也就是说,它在叠加平面上绘制,并且不会被3D几何体遮挡。要使用此类,通常需要指定两个点来定义行的起点和终点(使用vtkCoordinate类定义xy ),标签数量和数据范围(min,max)。您还可以控制轴的哪些部分可见,包括直线,刻度线,标签和标题。您还可以指定标签格式(printf样式格式)。

此类决定使用的字体大小以及如何定位标签。它还决定如何创建合理的刻度线和标签。标签数量和值范围可能与指定的数量不匹配,但应该接近。

标签绘制在轴的“右侧”。从“位置”移动到“位置2”时,“右侧”是右侧轴的一侧。标签和标题与轴和刻度线对齐的方式取决于线是水平还是垂直。

请注意,Position2是该类中的绝对位置(默认情况下相对于vtkActor2D中的Position)。这意味着您可以在各种坐标系中指定轴。此外,轴不必是水平的或垂直的。创建刻度线以使它们垂直于轴。

通过与此actor关联的vtkTextProperty对象设置标题和标签的text属性/属性。

vtkBarChartActor

从数组创建条形图。

vtkBarChartActor根据字段数据(vtkDataObject)中定义的数字数组生成条形图。要使用此类,必须指定输入数据对象。您可能还需要指定绘图的位置,即设置Position和Position2实例变量,这些变量定义绘图所在的矩形。还有许多其他控制绘图外观的实例变量包括其标题和图例。

通过与这些组件关联的vtkTextProperty对象设置标题和标签的text属性/属性。

vtkCaptionActor2D

绘制与点相关联的文本标签。

vtkCaptionActor2D是一个混合2D / 3D actor,用于将文本与场景中的一个点(AttachmentPoint)相关联。可以使用矩形边框和将标题连接到连接点的引线绘制标题。还可以在其端点处进行格式化以创建箭头或其他指示符。

要使用标题actor,通常指定Position和Position2坐标(这些坐标继承自vtkActor2D超类)。(注意,可以使用vtkActor2DSetWidth()SetHeight()方法设置Position2。)Position和Position2定义标题的大小,第三个点AttachmentPoint定义标题与之关联的点。您还必须定义标题文本,是否需要标题周围的边框,以及是否需要从标题到关联点的引线。可以通过vtkTextProperty设置文本的字体属性与这个演员相关联。您还可以指明您是否希望引线是2D或3D。(2D引线总是被绘制在底层几何体上。三维引线可能被几何体遮挡。)引线也可能被可选的字形(例如,箭头)终止。

使用此类最棘手的部分是正确设置Position,Position2和AttachmentPoint。这些实例变量是vtkCoordinates,可以通过各种方式进行设置。在默认用法中,AttachmentPoint在世界坐标系中定义,Position是标题的左下角,相对于AttachmentPoint(在显示coordaintes中定义,即像素),而Position2是相对于Position,是上限 - 右角(也在显示坐标中)。但是,用户可以完全控制坐标,并且可以执行诸如将标题放置在渲染器中的固定位置,其中引导者使用AttachmentPoint移动。

vtkCubeAxesActor2D

创建边界框边缘的2D绘图 - 用于导航。

vtkCubeAxesActor2D是一个复合actor,它绘制输入数据集的边界框的三个轴。轴包括xyz轴的标签和标题。算法选择位于边界框“外部”的轴,外部是通过检查投影(显示)空间中边界框的外边缘确定的。或者,可以绘制最靠近观看者的边缘(即,相机位置)。

要使用此对象,必须定义边界框和用于渲染vtkCubeAxesActor2D的相机。摄像机用于控制vtkCubeAxesActor2D的缩放和位置,使其适合视口并始终保持可见。)

AxisTitleTextProperty和AxisLabelTextProperty属性修改轴标题和标签的字体属性。您还可以使用GetXAxisActor2D,GetYAxisActor2D,GetZAxisActor2D方法访问每个轴actor以修改其字体属性。

要使用的边界框以三种方式之一定义。首先,如果定义了输入ivar,则使用输入数据集的边界。如果未定义输入,并且定义了Prop(所有actor的超类),则使用Prop的边界。如果既未定义Input或Prop,则使用Bounds实例变量(六个双精度数组)。

vtkLeaderActor2D

用可选的标签和箭头创建一个引线。

vtkLeaderActor2D创建一个带有可选标签和箭头的引线。(引线通常用于指示点之间的距离。)vtkLeaderActor2D是一种vtkActor2D ; 也就是说,它在叠加平面上绘制,并且不会被3D几何体遮挡。要使用此类,通常需要指定两个点来定义行的起点和终点(使用vtkCoordinate类定义xy ),是否在一个或两个端点上放置箭头,以及是否标记引线。此外,此类还有一个特殊功能,允许通过指定半径来创建弯曲的引线。

要控制actor的外观,请使用超类vtkActor2D :: vtkProperty2D和与此actor关联的vtkTextProperty对象。

vtkLegendBoxActor

vtkLegendBoxActor用于将符号与文本字符串相关联。用户指定用作符号的vtkPolyData和与该符号关联的字符串。然后可以与任何其他vtkActor2D使用相同的方式将actor放置在场景中。

要使用此类,必须使用超类'vtkActor2D :: Position坐标和Position2坐标来定义图例框的位置。然后定义组成菜单框的符号集和文本字符串。可以通过与此actor关联的vtkTextProperty设置条目的字体属性。该类将缩放符号和文本以适合由(位置,位置2)定义的图例框。还可以设置可选功能,如打开边框线和设置边框与符号/文本之间的间距。

vtkPieChartActor

根据字段数据(vtkDataObject)中定义的数字数组生成饼图。要使用此类,必须指定输入数据对象。您可能还需要指定绘图的位置,即设置Position和Position2实例变量,这些变量定义绘图所在的矩形。还有许多其他控制绘图外观的实例变量包括其标题和图例。

通过与这些组件关联的vtkTextProperty对象设置标题和标签的text属性/属性。

vtkScalarBarActor

vtkScalarBarActor创建一个带刻度标记的色标。标量条是一个图例,它向观察者指示颜色值和数据值之间的对应关系。图例由一个矩形条组成,每个矩形条都有一个恒定值。由于vtkScalarBarActorvtkActor2D的子类,它是在3D图形窗口的顶部绘制平面图像(即,在渲染的视口)。

要使用该类,必须将vtkScalarsToColors(或子类)与其关联。查找表定义用于映射标量数据的颜色和标量值范围。通常,标量栏中显示的颜色数不等于查找表中的颜色数,在这种情况下,执行查找表的采样。

他可选功能包括指定视口大小,这将控制标量栏的大小和刻度标签的数量。屏幕上标量栏的实际位置是使用vtkActor2D :: SetPosition()方法控制的(默认情况下,标量栏在视口中居中)。其他特性还包括水平或垂直定向标量栏的能力和控制在标量条上打印标签的格式(printf样式)。此外,vtkScalarBarActor的属性应用于标量栏和注释(包括图层和合成运算符)。

通过与此actor关联的vtkTextProperty对象设置标题和标签的text属性/属性。

如果将vtkLogLookupTable指定为要使用的查找表,则使用对数刻度创建标签。

vtkTextActor

vtkTextActor可用于将文本注释放入窗口中。当TextScaleMode为NONE时,文本是固定字体,操作与vtkPolyDataMapper2D / vtkActor2D对相同。当TextScaleMode为VIEWPORT时,字体会调整大小,使其相对于渲染它的视口保持一致的大小。当TextScaleMode为PROP时,字体会调整大小,使文本适合由位置1和2坐标定义的框内。此类替换已弃用的vtkScaledTextActor并充当vtkTextMapper / vtkActor2D对的方便包装器。通过与此actor关联的vtkTextProperty设置text属性/ attributes 。

vtkTexturedActor2D

vtkTexturedActor2D是一个Actor2D,它对纹理有额外的支持,就像vtkActor一样。要使用纹理,几何体必须具有纹理坐标,并且必须使用SetTexture()设置纹理。

 

4.3.3 vtkProp3D

vtkProp3D

表示放置在渲染场景中的3D对象。

vtkProp3D是用于表示渲染场景中的实体的抽象类(即,vtkProp3D是具有关联变换矩阵的vtkProp)。它处理与位置,方向和缩放相关的功能。它将这些实例变量组合成一个4x4变换矩阵,如下所示:[xyz 1] = [xyz 1]平移(-origin)比例(scale)旋转(y)旋转(x)旋转(z)平移(origin)平移(position))。无论vtkActor还是vtkVolume都是常用的vtkProp。构造函数默认为:origin(0,0,0)position =(0,0,0)orientation =(0,0,0),没有用户定义的矩阵或变换,也没有纹理贴图。

vtkAnnotatedCubeActor

带有面部标签的3D立方体。

vtkAnnotatedCubeActor是一个混合3D actor,用于表示场景中的解剖学方向标记。该类由以原点为中心的3D单位立方体组成,每个面标记为对应于特定的坐标方向。例如,对于笛卡尔方向,用户定义的文本标签可以是:+ X,-X,+ Y,-Y,+ Z,-Z,而对于解剖学方向:A,P,L,R,S,I。文本自动居中于每个立方体面,并且不会重新编写为单个字符。除了或替换纯文本标签表示外,还可以显示标签的轮廓边缘。可以操纵立方体,面部标签和文本轮廓的各个属性,以及它们的可见性。

主要用于vtkOrientationMarkerWidget。立方体面文本由vtkVectorText生成,因此字体属性受到限制。

vtkAssembly

创建vtkProp3Ds(可转换道具)的层次结构。

vtkAssembly是一个对象,它将vtkProp3Ds,其子类和其他程序集分组为树状层次结构。然后,可以通过仅转换层次结构的根组件将vtkProp3D和程序集转换为一起。

vtkAssembly对象可以在一个使用vtkProp3D的地方而使用,因为它是vtkProp3D的一个子类。

区别在于vtkAssembly维护一个构成程序集的vtkProp3D实例(它的“部分”)列表。然后,任何转换(即,缩放,旋转,平移)父组件的操作都将转换其所有部件。请注意,此过程是递归的:您可以创建由任意深度的程序集和/或vtkProp3D组成的组。

要将装配添加到渲染器的道具列表,只需添加装配的根。在渲染期间,在分层遍历过程中渲染组件的各个部分。

程序集的渲染速度比同等的actor列表要慢。这是因为为了支持任意组装嵌套,必须通过组件层次结构传播组件的状态(即转换矩阵)。

程序集可以包含程序集的层次结构,其中一个层次结构中使用的一个actor或程序集也用于其他层次结构。但是,假设没有循环(例如,parent-> child-> parent),这将导致程序失败。

如果您希望创建没有任何转换的程序集(严格地将程序集用作分组机制),那么您可能希望考虑使用vtkPropAssembly

vtkAxesActor

 

3D轴。

vtkAxesActor是一个混合2D / 3D actor,用于表示场景中的3D轴。用户可以定义用于轴或尖端的几何图形,用户可以设置三个轴的文本。文本将显示为跟随相机,因为它是通过vtkCaptionActor2D实现的。底层vtkCaptionActor2D对象的所有功能都是可访问的,因此,例如,可以通过vtkTextProperty操纵轴文本的字体属性。由于此类继承自vtkProp3D,因此可以将用户变换应用于基础几何体和标签的位置。例如,旋转变换可用于生成左手轴表示。

主要用于vtkOrientationMarkerWidget。计算此actor的边界,就好像轴的几何形状是对称的一样:即,虽然只有正轴是可见的,但是计算边界就像有负轴一样。这是有意地在vtkOrientationMarkerWidget实现相机更新机制的功能

vtkBillboardTextActor3D

呈现像素对齐的文本,面向相机,固定在3D点。

vtkCameraActor

vtkCameraActor是一个演员,用于通过线框截锥体来表示相机。

vtkImageSlice

表示3D场景中的图像。

vtkImageSlice用于表示3D场景中的图像。它将图像显示为切片或从相机的角度投影。通过调整摄像机的焦点和方向来调整切片的位置和方向,或者可以在vtkImageMapper3D手动设置切片。在vtkImageProperty中设置查找表和窗口/ 级别 。Prop3D方法(如SetPosition()RotateWXYZ())相对于VTK世界坐标更改数据的位置和方向。

vtkLightActor

圆锥和圆锥体代表聚光灯。

vtkLightActor是一个用于表示聚光灯的复合actor。锥角等于聚光角,锥顶位于光的位置,光的方向从锥顶到锥的底部的中心。方形平截头体位置是光线位置,平截头体焦点位于光线方向。平截头体垂直视角(孔径)(这也是平截头体为正方形时的水平视角)等于锥角的两倍。平截头体的剪切范围是由用户任意设定的(最初为0.5,11.0)。

现在只支持聚光灯,但将来可能会支持定向光。

vtkLODProp3D

精细程度3D道具。

vtkLODProp3D是一个支持Prop3D详细渲染级别的类。可以将任意数量的映射器/属性/纹理项添加到此对象。将测量渲染时间,并将用于根据此Prop3D的AllocatedRenderTime选择LOD。根据mapper / property的类型,将在后台创建vtkActorvtkVolume

vtkProp3DFollower

一个始终面向相机的vtkProp3D

vtkProp3DFollower是一种始终面向相机的vtkProp3D。更具体地说,它不会改变它的位置或比例,但它会不断更新它的方向,使其正面朝上并面向相机。这通常用于需要始终面对观众的复杂广告牌或道具。

注意:对vtkProp3D进行的所有转换都将对跟随者生效。

vtkTextActor3D

显示文本的actor。

输入文本被渲染到缓冲区中,缓冲区又用作应用于四边形的纹理(引擎下使用vtkImageActor)。

vtkVolume

表示渲染场景中的体(数据和属性)

vtkVolume用于表示呈现场景中的体实体。它继承了vtkProp3D中与体的位置、方向和原点相关的函数。该volume 维护对volume 数据的引用(即,卷映射器)。volume 还包含对volume 属性的引用,该属性包含所有常见的volume 呈现参数。

4.3.4 vtkActor

vtkActor

表示渲染场景中的对象(几何和属性)。

vtkActor用于表示呈现场景中的实体。它继承了vtkProp中与角色位置和方向相关的函数。actor还具有缩放功能,并维护对定义几何的引用(即、呈现属性,可能还有纹理映射。vtkActor将这些实例变量组合成一个4x4转换矩阵,如下所示:[x y z 1] = [x y z 1] translation (-origin) Scale(Scale) Rot(y) Rot(x) Rot(z) Trans(origin) Trans(position)。

vtkAxisActor

创建带刻度线和标签的轴。

vtkAxisActor创建一个带有刻度线,标签和/或标题的轴,具体取决于特定的实例变量设置。假设轴是边界框的一部分并且与一个坐标轴正交。要使用此类,通常需要指定两个点来定义行的起点和终点(使用vtkCoordinate定义xyz定义)class),轴类型(X,Y或Z),相对于边界框的轴位置,边界框,标签数量和数据范围(min,max)。您还可以控制轴的哪些部分可见,包括直线,刻度线,标签和标题。还可以控制网格线,并指定绘制标记的“侧”(再次针对基础假定边界框)。您还可以指定标签格式(printf样式格式)。

此类决定如何定位标签,以及如何创建合理的刻度标记和标签。

标签跟随相机,从任何角度看都清晰可辨。

实例变量Point1和Point2是vtkCoordinate实例。所有计算和参考均在世界坐标中。

vtkCubeAxesActor

创建边界框边的图 - 用于导航。

vtkCubeAxesActor是一个复合actor,它绘制输入数据集的边界框的轴。轴包括xyz轴的标签和标题。算法根据用户定义的“飞行”模式选择要绘制的轴。(默认为STATIC)。'STATIC'从边界框的所有边构造轴。'CLOSEST_TRIAD'由三个轴xyz组成,形成一个最接近指定摄像机的三重轴。'FURTHEST_TRIAD'由三轴xyz组成,形成一个离指定摄像机最远的三重轴。'OUTER_EDGES'由边界框的“外部”边缘构成,外部由检查投影(显示)空间中边界框的外边缘确定。

要使用此对象,必须定义边界框和用于呈现vtkCubeAxesActor的相机。您可以选择打开/关闭标签,刻度线,网格线,以及设置刻度线位置,标签数量和用于轴标题的文本。也可以设置“拐角偏移”。这允许轴部分地远离实际边界框设置,以防止各个轴之间的标签重叠。

Bounds实例变量(六个双精度数组)用于确定边界框。

vtkFlagpoleLabel

呈现旗杆(线),顶部朝向相机的标签。

这个类从旗杆的底部到顶部画一条线。然后它在顶部放置一个文本注释,水平居中。文本始终以旗杆定向,但会围绕旗杆旋转以面向相机。

vtkFollower

始终面向相机的actor的子类。

vtkFollowervtkActor的子类始终面向其指定的摄像机。更具体地说,它不会改变它的位置或比例,但它会不断更新它的方向,使其正面朝上并面向相机。这通常用于场景中的文本标签。可以对演员进行的所有调整也将对跟随者生效。因此,如果您将跟随者的方向改变90度,那么它将跟随相机,但是会偏离90度。

vtkLODActor

支持多个细节级别的actor。

vtkLODActor是一个存储多个细节级别(LOD)的actor,可以在它们之间自动切换。它根据分配给渲染的时间选择要使用的细节级别。目前使用了一种非常简单的TotalTime / NumberOfActors方法。(将来应该修改它,以根据需要在不同的actor之间动态分配渲染时间。)

默认情况下有三个级别的详细信息。顶级只是普通数据。最低级别的细节是actor的简单边界框轮廓。中间细节级别是从映射器的输入数据中随机采样的固定数量的点的点云。点属性被复制到点云。通过创建vtkOutlineFilter(低分辨率)和vtkMaskPoints(中等分辨率)的实例来完成这两个较低级别的细节。可以使用AddLODMapper()方法添加其他详细级别。

要控制帧速率,通常需要设置vtkRenderWindowInteractor DesiredUpdateRate和StillUpdateRate。然后,这将导致vtkLODActor调整其LOD以满足请求的更新速率。

要更好地控制细节级别,请参阅vtkLODProp3D。该类允许任意定义每个LOD。

如果您提供自己的映射器,则负责正确设置其ivars,例如ScalarRange,LookupTable等。

在某些系统上,点云渲染(默认的,中等细节级别)可能导致点太小而几乎看不到。在这种情况下,使用GetProperty() - > SetPointSize()方法来增加点的渲染大小。

vtkQuadricLODActor

使用二次聚类抽取算法的特定细节级别策略。

vtkQuadricLODActor使用vtkQuadricClustering抽取算法实现细节级别的特定策略。它仅支持两个级别的细节:全分辨率和抽取版本。使用调整策略生成抽取的LOD以产生与所请求的交互帧速率一致的输出vtkRenderWindowInteractor的DesiredUpdateRate)。

它还利用显示列表来提高性能,并调整vtkQuadricClustering算法以考虑数据的维度(例如,2D,xy表面可以分箱为nxnx 1以减少z方向上的额外多边形)。最后,过滤器可以选择设置为“静态”模式(这适用于vtkMapper :: SetStatic()方法)。`启用静态导致一次执行Mapper的管道。之后,管道不再更新(除非手动强制执行此操作)。

默认情况下,算法设置为预先计算LOD。也就是说,在第一个渲染(无论是全分辨率渲染还是交互渲染)上,计算LOD。可以更改此行为,以便将LOD构造推迟到第一个交互式渲染。无论哪种方式,当构建LOD时,用户可能会注意到短暂停顿。

此类可以用作vtkActor的直接替代。它也可以用作vtkFollower的替代品(提供跟踪摄像机的能力)。

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
VTK中,vtkRenderer是一个用于渲染3D图形的类。它可以与vtkRenderWindow一起使用,将渲染结果显示在屏幕上。通常情况下,我们可以创建一个vtkRenderer对象,并将其添加到vtkRenderWindow对象中。然后,我们可以在渲染器中添加演员(vtkActor),将3D模型加载到渲染器中,并最终将结果显示在窗口中。 例如,可以使用vtkPolyDataMapper将模型数据连接到vtkActor上,并将该演员添加到渲染器中,然后通过vtkRenderWindow来显示渲染结果。代码示例如下: ```python import vtk # 加载模型 reader = vtk.vtkOBJReader() reader.SetFileName("model.obj") # 建立映射器 mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(reader.GetOutputPort()) # 创建一个窗口 window = vtk.vtkRenderWindow() # 创建一个渲染器 renderer = vtk.vtkRenderer() window.AddRenderer(renderer) # 创建一个交互器 interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(window) # 建立演员 actor = vtk.vtkActor() actor.SetMapper(mapper) # 将演员添加到渲染器中 renderer.AddActor(actor) # 开始渲染 window.Render() # 开始交互 interactor.Start() ``` 在这个示例中,我们加载了一个OBJ格式的模型文件,并将其与vtkPolyDataMapper进行连接。然后,我们创建了一个vtkRenderWindow和一个vtkRenderer,并将vtkRenderer与vtkRenderWindow关联。接下来,我们创建了一个vtkRenderWindowInteractor,将其与vtkRenderWindow关联,并创建了一个vtkActor,将vtkPolyDataMapper连接到该演员上。最后,我们将演员添加到渲染器中,并调用Render()方法开始渲染,调用Start()方法开始交互。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [vtk渲染](https://blog.csdn.net/qq_34003034/article/details/129904603)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dylan55_you

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值