CGAL的3D网格参数化

1、介绍

        参数化曲面相当于找到一个从合适的域到曲面的单射映射。一个好的映射是在某种意义上最小化角度失真(保角参数化)或面积失真(等面积参数化)的映射。在这个包中,我们专注于参数化与圆盘或球体同胚的三角化曲面,以及平面域上的分段线性映射。

        尽管第一个参数化方法的主要动机是应用于纹理映射,但现在它经常用于映射更复杂的调制信号(如法线、透明度、反射或光调制图),拟合散乱数据,重新参数化样条曲面,修复CAD模型,近似曲面和重网格化。

        这个包实现了表面参数化方法,如尽可能刚性的参数化、Tutte重心映射、离散真实参数化、离散共形映射、最小二乘共形映射、浮动均值坐标或Orbifold Tutte Embeddings。这些方法主要通过它们最小化的变形(角度与面积)、平面域上的约束边界(凸多边形与自由边界)以及映射的双射性保证来区分。

        该软件包为 FaceGraph 概念的任何模型提供了一个接口,例如 Surface_mesh、Polyhedron_3、Seam_mesh 类或 OpenMesh 的网格类。

        备注:

        Seam_mesh类可用于虚拟切割网格,允许在符合磁盘或球体拓扑要求的子域中转换输入网格。

        由于参数化网格需要高效的稀疏矩阵表示和高效的迭代或直接线性求解器,我们为线性求解器提供了统一的接口.

        请注意,线性解算器通常使用双精度浮点数。因此,此包旨在与具有双精度的CGAL笛卡尔核一起使用。

        通过最小二乘保形贴图参数化进行纹理贴图。顶部:原始网格和纹理。底部:参数化网格(左侧:参数空间,右侧:纹理网格)。 

2、基础

2.1、默认曲面参数化

        从用户的角度来看,此包最简单的入口点是以下函数:

template <typename TriangleMesh, typename VertexUVMap>
Error_code parameterize(TriangleMesh & mesh,boost::graph_traits<TriangleMesh>::halfedge_descriptor bhd,VertexUVMap uvm);

         函数parameterize()将默认曲面参数化方法,即浮点均值坐标(见浮点均值坐标部分),应用于具有半边bhd给定边界的三角形网格类型的网格的连通分量。该边界采用弧长圆形边界参数化进行参数化。使用Eigen库的稀疏线性求解器。

        三角形网格类型的网格必须是 FaceGraph 概念的模型,并且必须另外进行三角剖分、2-流形、定向并且与圆盘同胚(可能带有孔)。最后一个要求并不难,我们稍后将展示如何参数化一个不是拓扑圆盘的网格(切割网格一节)。结果存储在网格顶点的属性映射中(其类型在这里是 VertexUVMap)。

        CGAL::Surface_mesh_parameterization 是CGAL(Computational Geometry Algorithms Library)库中的一个模块,用于对三角网格进行参数化。参数化是将一个形状映射到一个平面区域的过程,以便进一步处理或可视化。

        CGAL::Surface_mesh_parameterization 提供了一组算法和工具,用于将三角网格的表面映射到二维参数域。这可以用于各种应用,如纹理映射、网格修复、曲面重建等。

        该模块支持多种参数化方法,包括但不限于:

        保角参数化:通过保持角度信息来映射网格顶点到参数域中的点。

        等面积参数化:通过最小化面积变形来映射网格顶点到参数域中的点。

        刚性参数化:通过保持网格的几何形状和拓扑结构来映射网格顶点到参数域中的点。

        使用CGAL::Surface_mesh_parameterization,您可以对三角网格进行高效且高质量的参数化。您可以根据具体需求选择适当的参数化方法,并使用CGAL提供的工具和算法来处理和优化参数化结果。

         输入(左)、参数空间(中)和纹理网格(右)。

        CGAL::Surface_mesh_parameterization::parameterize 是CGAL库中用于对三角网格进行参数化的函数。它的参数可能因不同的实现和版本而有所不同,但通常包括以下参数:

        输入网格(Input Mesh)要参数化的三角网格。

        输出参数域(Output Parameter Domain):用于存储参数化结果的参数域。

        参数化方法(Parameterization Method):选择要使用的参数化方法,例如保角参数化、等面积参数化或刚性参数化等。

        约束边界(Boundary Constraints):如果存在需要保持不变的边界区域,可以提供约束边界的参数。

        此外,可能还有其他可选参数,如设置权重因子、指定目标参数域的形状等。具体的参数列表和用法可能会根据CGAL库的版本和实现有所不同,因此建议查阅相应的文档或参考示例代码以获取准确的信息。

2.2、选择参数化算法

        此包提供了第二个parameterize()入口点,用户可以在其中指定参数化方法:

template <typename TriangleMesh, typename Parameterizer_3, typename VertexUVMap>
Error_code parameterize(TriangleMesh& mesh,Parameterizer_3 parameterizer,boost::graph_traits<TriangleMesh>::halfedge_descriptor bhd,VertexUVMap uvm);

        它计算从三维三角形曲面网格到简单二维域的一对一映射。映射在三角形网格上是分段线性的。结果是输入网格的每个顶点的一对(u,v)参数坐标。根据Parameterizer_3算法的选择,可以保证一对一映射,也可以不保证。 

3、曲面参数化的方法

        这个CGAL包实现了表面参数化方法,如尽可能刚性、图特重心、离散保角参数化、离散保形映射、最小二乘保形映射、浮动均值坐标或orbifold Tutte嵌入。这些方法作为Parameterizer_3概念的模型提供。

        根据所需的边界参数化类型,不同的参数化方法可分为三类:固定边界、自由边界和无边界。

        不同方法的插图都是用相同的输入模型,即手模型获得的,如下图所示。手是一个拓扑球体,使用Seam_mesh将其切割成拓扑圆盘。在下图中,接缝被标记为红色,用于Orbifold Tutte参数化的四个锥体(Orbifold Tutte Embeddings部分)被标记为绿点。

         本节中不同方法插图中使用的基础网格。接缝用红色描绘。用绿点标记的顶点是圆锥体。

3.1、固定边界曲面参数化

        固定边界曲面参数化的特征是在参数空间中具有受约束的边界:沿边界的每个顶点有两个(u,v)坐标。这种边界参数化方法有不同的选择,如“固定方法的边界参数化”一节所述。

3.1.1、所有重心映射

Surface_mesh_parameterization::Barycentric_mapping_parameterizer_3
<TriangleMesh, BorderParameterizer, SolverTraits>

        Tutte Barycentric映射参数化(蓝线表示切割图)。最右边:参数空间。 

        Tutte引入了重心映射参数化方法。在参数空间中,每个顶点都放置在其邻居的重心上,以达到所谓的凸组合条件。该算法相当于为每组参数坐标求解一个稀疏线性系统,其中有一个#vertices x #vertices稀疏对称正定矩阵(如果线性系统消除了边界顶点)。对于连接顶点vi和vj的边,矩阵的系数(i,j)设置为1,对于对角元素,减去顶点vi的度数,对于任何其他矩阵条目,设置为0。虽然当边界是凸形时,保证双射映射,但这种方法既不能最小化角度,也不能最小化面积失真。 

3.1.2、离散Authalic参数化

Surface_mesh_parameterization::Discrete_authalic_parameterizer_3
<TriangleMesh, BorderParameterizer, SolverTraits>

         Desbrun等人引入了离散逼真参数化方法。它对应于保面积方法的弱形式,本质上局部最小化面积失真。只有满足凸组合条件并且边界是凸的,才保证了一对一的映射。这种方法求解了两个#vertices x #vertices稀疏线性系统。矩阵(两个系统都相同)是不对称的。

        离散Authalic参数化(蓝线表示切割图)。最右边:参数空间。 

3.1.3、离散共形映射

Surface_mesh_parameterization::Discrete_conformal_map_parameterizer_3
<TriangleMesh, BorderParameterizer, SolverTraits>

        Eck等人将离散共形映射参数化引入到图形社区。它试图通过最小化Pinkall和Polthier导出的离散形式的狄利克雷能量来降低角度变形。只有满足以下两个条件时,才能保证一对一映射:重心映射条件(参数空间中的每个顶点都是其相邻顶点的凸组合),以及边界是凸的。这种方法解决了两个#vertices x #vertices稀疏线性系统。矩阵(两个系统都是一样的)是稀疏的、对称的正定矩阵(如果线性系统消除了边界顶点,并且网格中没有孔),因此可以使用专用线性求解器有效地求解。 

        离散保形映射。最右边:参数空间。 

3.1.4、浮动平均值坐标

Surface_mesh_parameterization::Mean_value_coordinates_parameterizer_3
<TriangleMesh, BorderParameterizer, SolverTraits>

        Floater 引入了均值坐标参数化方法。参数空间中的每个顶点都被优化为其相邻顶点的凸组合。这种方法本质上是对离散共形映射的近似,当边界是凸的时,保证了一对一的映射。这种方法解决了两个#vertices x #vertices稀疏线性系统。矩阵(两个系统都是一样的)是不对称的。

        浮动平均值坐标。最右边:参数空间。 

3.1.5、迭代Authalic参数化

Surface_mesh_parameterization::Iterative_authalic_parameterizer_3
<TriangleMesh, BorderParameterizer, SolverTraits>

        迭代真实参数化方法由 Jain 等人引入。这种参数化是一种固定的边界参数化,是真实参数化家族的一部分,这意味着它的目标是最大限度地减少输入曲面网格和参数化输出之间的面积失真。更准确地说,该参数化器使用的方法是在网格上迭代地重新分配 L2 拉伸——如 Sander 等人所定义的。

        迭代Authalic参数化(蓝线表示切割图)。最右边:参数空间。

         尽管这是一种固定边界参数化方法,但它不能保证一对一的映射。然而,在实践中,它将以比其他自参数化方法更小的失真产生有效的结果。 

3.1.6、固定方法的边界参数化

        边界的参数化方法被用作修改 Parameterizer_3 模型行为的特征类。它们也被作为 Parameterizer_3 概念的模型提供。固定边界曲面参数化的边界参数化是一系列定义一组约束的方法,即沿边界的每个顶点有两个 u,v 坐标。

        在为固定边界方法选择边界参数化时,用户可以选择不同的选项:

        用户可以在两种常用方法中选择边界参数化:均匀参数化或弧长参数化。

        用法:均匀边界参数化更稳定,但视觉效果较差。默认使用弧长边界参数化。

        由两个标准形状中的一个形状指定的凸形:圆形或方形。

        用法:默认情况下使用圆形边界参数化,因为它对应于最简单的凸形。方形边界参数化通常用于纹理映射。

        左:Julius Cesar面具参数化与Authalic/圆形边界。右图:朱利叶斯·塞萨尔面具上的浮动/方形边框。 

        均匀/弧长和圆形/方形的所有组合由以下类别提供:

Surface_mesh_parameterization::Circular_border_arc_length_parameterizer_3<TriangleMesh>
Surface_mesh_parameterization::Circular_border_uniform_parameterizer_3<TriangleMesh>
Surface_mesh_parameterization::Square_border_arc_length_parameterizer_3<TriangleMesh>
Surface_mesh_parameterization::Square_border_uniform_parameterizer_3<TriangleMesh>

        CGAL::Surface_mesh_parameterization::Square_border_uniform_parameterizer_3 是一个类模板,用于将三维曲面网格的边界参数化为均匀的矩形边界。

        这个类模板提供了将曲面网格的边界映射到矩形区域的方法,使得边界上的每个顶点都映射到矩形边界上的相应位置。这对于一些需要将三维曲面网格转换为二维矩形网格的应用场景非常有用,例如计算机图形学、计算机视觉和数值分析等领域。 

3.2、自由边界曲面参数化

        对于自由边界参数化方法,边界的顶点可以自由移动。

3.2.1、最小二乘保形映射

Surface_mesh_parameterization::LSCM_parameterizer_3
<TriangleMesh, BorderParameterizer, SolverTraits>

        XXX等人引入了最小二乘保角映射(LSCM)参数化方法。它对应于具有自由边界的保角方法(至少两个顶点必须受到约束以获得唯一解),这允许进一步降低角度失真。这种方法不能保证一对一映射。它在最小二乘意义下求解一个(2×#三角形)×#顶点的稀疏线性系统,这意味着求解一个对称矩阵。 

        最小二乘保形映射。最右边:参数空间。 

3.2.2、尽可能刚性的参数化

Surface_mesh_parameterization::ARAP_parameterizer_3
<TriangleMesh, BorderParameterizer, SolverTraits>

        刘等人引入了一种尽可能刚性的参数化方法。这是一种基于迭代能量最小化过程的形状保持方法。每一步都交替使用局部优化技术来寻找最佳的局部映射,以及与线性系统分辨率相当的全局拼接技术,以确保参数化网格是三角形的。

        局部优化公式的推广引入了一个标量系数λ,允许用户平衡角度和形状失真:λ越接近0,越重视角度失真的最小化;相反,当λ增大时,参数化器越来越重视形状失真的最小化。

        “尽可能刚性”参数化(蓝线表示剪切图)。最右边:参数空间。 

3.2.3、自由方法的边界参数化

        边界的参数化方法被用作修改 Parameterizer_3 模型行为的特征类。它们也被作为 Parameterizer_3 概念的模型提供。与自由边界曲面参数化方法相关的边界参数化仅定义了两个约束:固定顶点。

Surface_mesh_parameterization::Two_vertices_parameterizer_3<TriangleMesh>

        用法:Surface_mesh_parameterization::Two_vertices_parameterizer_3<TriangleMesh>是默认的自由边界参数化,也是此软件包当前版本中唯一可用的参数化。

3.3、 无边界曲面参数化

        无边界参数化方法不需要与圆盘同胚的网格作为输入。

3.3.1、Orbifold Tutte Embeddings

Surface_mesh_parameterization::Orbifold_Tutte_parameterizer_3
<SeamMesh, SolverTraits>

         Orbifold-Tutte平面嵌入由Aigerman和Lipman引入,是Tutte嵌入到其他拓扑的推广,特别是球面,我们在这里考虑。Orbifold-Tutte嵌入将原始曲面(要求是拓扑球面)双射到称为欧几里得orbifold的规范、拓扑等价的二维平面。有17个欧几里得orbifold,其中只有4个球面orbifold目前在CGAL的GIMP中实现。

        orbifold-Tutte嵌入产生了一种无缝的、全局双射的参数化,与经典的Tutte嵌入类似,只需要求解一个稀疏的线性系统来进行计算。

        该算法要求用户选择输入网格的一组顶点并将其标记为锥体,这些锥体将是展开的奇点。在内部,该过程需要使用锥体之间的(虚拟)接缝,但这些接缝的选择不影响结果。 Seam_mesh结构(另见切割网格一节)用于此目的。

        (四个)基础圆锥体显示为绿色,虚拟切割显示为蓝色。最右边:参数空间。 

4、剪切网格

        该包中提出的曲面参数化方法仅处理与圆盘同胚(拓扑等效)的网格。然而,只要用户指定了定义拓扑盘边界的割图(一组边),就可以对具有任意拓扑和连接组件数量的网格进行参数化。这些边可以通过Seam_mesh结构与网格一起传递。

        剪切图

5、复杂度和保证

        固定边界:

        一对一映射;图特定理保证了一对一的映射,前提是权重都是正的,边界是凸的。图特重心映射和浮点均值坐标就是这种情况。离散共形映射(余切)、离散真圆和迭代真圆参数化并不总是这样。

        矩阵的非奇异性:如果矩阵是对角线占优的,则Geshorgin定理保证了求解器的收敛性。权重为正的情况就是这样(Tutte重心映射和浮动均值坐标)。

        自由边界:

        一对一映射;LSCM或ARAP参数化(可能出现全局重叠和三角形翻转)均不提供保证。

        矩阵的非奇异性:对于LSCM,系统的矩阵是具有最大秩的矩阵的Gram矩阵,因此是非奇异的(Gram定理)。

        无边界:

        一对一映射;Orbifold-Tutte嵌入是保证存在的,并且可以通过稀疏线性系统进行计算。

6、其他

        orbifold Tutte嵌入是一种参数化方法,它对Tutte的嵌入进行了泛化,使其适用于其他曲面拓扑,尤其是球面曲面的常见但未经处理的情况。

        在参数化过程中,orbifold Tutte嵌入强制执行某些边界条件,以实现欧几里得双峰结构。与经典的Tutte嵌入类似,它只需要求解稀疏线性系统即可进行计算。如果使用了余切权重,orbifold Tutte嵌入将全局Dirichlet能量最小化,并显示为近似保形和四点拟保形映射。

        orbifold Tutte嵌入还可以用于生成具有三个或四个地标和球型对称图案的双射表面间映射。

        图特重心的曲面参数化是一种参数化方法,它基于图特重心坐标的概念对曲面进行参数化。

        在参数化过程中,图特重心坐标被用于定义曲面上每个点的位置。通过计算每个点在邻域内的重心,可以获得一组参数,这些参数可以表示曲面上每个点的位置。

        图特重心坐标具有一些重要的性质,例如它们是保形的,即保持曲面的形状不变。此外,图特重心坐标还可以有效地处理复杂的曲面几何形状。

        在实现图特重心的曲面参数化时,通常需要使用数值方法来计算重心坐标。这可能涉及到求解线性方程组或使用其他数值方法来求解重心坐标。

        需要注意的是,图特重心的曲面参数化可能不适用于所有类型的曲面。对于一些复杂的曲面几何形状,可能需要采用其他参数化方法。

        Orbifold Tutte Embeddings是一种曲面参数化的方法,其基本思想是在参数化过程中强制执行某些边界条件,以实现欧几里得双峰结构。该方法是无缝的全局双射参数化,与经典的Tutte嵌入类似,只需要求解稀疏线性系统即可进行计算。如果使用了余切权重,Orbifold Tutte嵌入将全局Dirichlet能量最小化,并显示为近似保形和四点拟保形映射。它是第一个对保形映射产生双射近似的全线性方法。

        除了参数化,Orbifold Tutte Embeddings还可以用于生成具有三个或四个地标和球型对称图案的双射表面间映射。这种方法适用于各种曲面拓扑,尤其是球面曲面的常见但未经处理的情况。

        CGAL::Seam_mesh是一个用于处理缝纫网格(Seammesh)的类。缝纫网格是一种特殊的网格类型,用于表示和处理三维模型的缝合部分。它主要用于三维模型的缝合和重构,以及计算机图形学和计算机视觉中的其他相关任务。

        CGAL::Seam_mesh类提供了用于创建、操作和查询缝纫网格的功能。它支持对缝纫网格的顶点、边和面进行操作,包括添加、删除、修改等操作。此外,它还提供了一些函数和算法,用于执行缝纫网格的合并、修剪、重构等操作。

        使用CGAL::Seam_mesh类,您可以方便地处理三维模型的缝合部分,并对其进行各种操作和查询。这对于计算机图形学、计算机视觉和三维建模等领域的应用非常有用。

CGAL 5.6 - Planar Parameterization of Triangulated Surface Meshes: User Manual

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/225330.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux---重定向命令

1. 重定向命令的介绍 重定向也称为输出重定向&#xff0c;把在终端执行命令的结果保存到目标文件。 2. 重定向命令的使用 命令说明>如果文件存在会覆盖原有文件内容&#xff0c;相当于文件操作中的‘w’模式>>如果文件存在会追加写入文件末尾&#xff0c;相当于文件…

C++执行系统命令的三种方式

C 执行系统命令可以使用以下几种方法&#xff1a; 1. 使用 system() 函数 system() 函数会调用操作系统的命令行处理器&#xff08;如 /bin/sh&#xff09;来执行命令。该函数的语法如下&#xff1a; int system(const char *command);其中&#xff0c;command 参数指定要执…

springboot 集成 redis luttuce redisson ,单机 集群模式(根据不同环境读取不同环境的配置)

luttuce 和redisson配置过程中实际上是独立的&#xff0c;他们两个可以同时集成&#xff0c;但是没有直接相关关系&#xff0c;配置相对独立。 所以分为Lettuce 和 Redisson 两套配置 父pom <!-- Spring Data Redis --><dependency><groupId>org.springframe…

Vue用<br>自定义换行,用v-html渲染,hover的时候title也需要使用自定义换行或者显示一行用省略号展示,hover展示全部

哈喽 大家好啊,最近遇到一个需求&#xff1a; 需求一&#xff1a;用<br>自定义换行&#xff0c;hover的时候title也需要使用自定义换行 然后我便想到了用<br>自定义换行&#xff0c;然后用v-html渲染&#xff0c;则就正常显示了 但是title只能用文本&#xff0c…

【专题】树和二叉树的转换

目录 一、树转换成二叉树步骤一&#xff1a;加线——在兄弟之间加连线步骤二&#xff1a;抹线——除结点的左孩子外&#xff0c;去除其与其余孩子之间的关系步骤三&#xff1a;旋转——以树的根结点为轴心&#xff0c;将整树顺时针转45 二、二叉树转换成树步骤1&#xff1a;加线…

node.js 启一个前端代理服务

文章目录 前言一、分析技术二、操作步骤2.1、下载依赖2.2、创建一个 serve.js 文件2.3、js 文件中写入以下代码 三、运行&#xff1a; node serve四、结果展示五、总结六、感谢 前言 有时候我们需要做一些基础的页面时&#xff0c;在研发过程中需要代理调用接口避免浏览器跨域…

Java数据结构-通过数组封装-结构分析

1、默认arrayList的数组未初始化 ArrayList<Integer> arrayList new ArrayList<>();System.out.println(ClassLayout.parseInstance(arrayList).toPrintable()); java.util.ArrayList object internals: OFF SZ TYPE DESCRIPTION …

自动驾驶学习笔记(十八)——Lidar感知

#Apollo开发者# 学习课程的传送门如下&#xff0c;当您也准备学习自动驾驶时&#xff0c;可以和我一同前往&#xff1a; 《自动驾驶新人之旅》免费课程—> 传送门 《Apollo 社区开发者圆桌会》免费报名—>传送门 文章目录 前言 Lidar感知 运动补偿 点云分割 总结…

spring面试:一、面试题分类总览+bean线程安全问题+AOP相关问题(定义、使用步骤、编程式事务管理和声明式事务管理和声明式事务管理失效)

面试题分类总览 bean线程安全问题 单例/多例 单例&#xff08;singleton&#xff09;&#xff1a;在每个spring ioc容器中都只有一个实例。 多例&#xff08;prototype&#xff09;&#xff1a;在每个spring ioc容器中有多个实例。 默认情况下spring中的bean都是单例的。但是…

高并发如何实现单用户信息查询接口

高并发如何实现单用户信息查询接口 故事情节 产品&#xff1a;小李&#xff0c;有个单用户信息查询的功能&#xff0c;需要你实现一下小李&#xff1a;这还不简单&#xff0c;两分钟我给你实现两分钟过去…小李&#xff1a;欧克了&#xff0c;部署上线了运维&#xff1a;哪个…

数组和链表-内存存储分析

1、pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.…

动态规划——斐波那契数列模型:1137.第N个泰波那契数

文章目录 题目描述算法原理1.状态表示(最重要的&#xff09;什么是状态表示&#xff1f;状态表示怎么来的呢&#xff1f;本题的状态表示 2.状态转移方程(最难的&#xff09;本题的状态转移方程 3.初始化(后三步完成剩下百分之一的细节问题&#xff09;本题的初始化 4.填表顺序本…

C语言实现快速傅立叶(FFT)(一)

1. FFT理论相关知识 FFT&#xff08;快速傅里叶变换&#xff09;其本质就是DFT&#xff0c;只不过可以快速的计算出DFT结果&#xff0c;所以首先应该理解DFT&#xff0c;DFT(Discrete Fourier Transform) 离散傅里叶变换的缩写&#xff0c;FFT(Fast Fourier Transform)快速傅里…

【算法与数据结构】376、LeetCode摆动序列

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;本题难点在于要考虑到不同序列的情况&#xff0c;具体来说要考虑一下几种特殊情况&#xff1a; 1、上…

4.qml 3D-Light、DirectionalLight、PointLight、SpotLight、AxisHelper类深入学习

今天我们学习灯光类 首先来学习Light类&#xff0c;它是所有灯光的虚基类&#xff0c;该类是无法创建的&#xff0c;主要是为子类提供很多公共属性。 常用属性如下所示&#xff1a; ambientColor : color&#xff0c;该属性定义在被该光照亮之前应用于材质的环境颜色。默认值…

oracle 锁表解决办法

相关表介绍 V$LOCKED_OBJECT&#xff08;记录锁信息的表&#xff09;v$session&#xff08;记录会话信息的表&#xff09;v$sql&#xff08;记录 sql 执行的表&#xff09;dba_objects&#xff08;用来管理对象&#xff0c;表、库等等&#xff09; 查询锁表的 SID select b.…

Cockpit upload文件上传漏洞(CVE-2023-1313)

0x01 产品简介 Cockpit 是一个自托管、灵活且用户友好的无头内容平台,用于创建自定义数字体验。 0x02 漏洞概述 Cockpit assetsmanager/upload接口处存在文件上传漏洞,攻击者可通过该漏洞在服务器端任意上传代码,写入后门,获取服务器权限,进而控制整个web服务器。 0x0…

Web开发伴侣 Prepros 7.17 Crack

您友好的 Web 开发伙伴&#xff0c;Prepros 编译您的文件、转译您的 JavaScript、重新加载您的浏览器并 使开发变得非常容易测试您的网站&#xff0c;以便您可以专注于制作 他们完美。 编译一切 Prepros 可以编译 Sass、Less、Stylus、Pug/Jade、Haml、Slim、CoffeeScript 和 …

翻译: 为什么需要微调大模型 Why Fine-tuning LLM

虽然RAG提供了一种方式来给大型语言模型提供额外的信息&#xff0c;但还有另一种叫做微调&#xff08;fine-tuning&#xff09;的技术&#xff0c;也是给它更多信息的一种方式。特别是&#xff0c;如果你有的上下文比大型语言模型的输入长度或上下文窗口长度更大&#xff0c;那…

如何使用ArcGIS Pro拼接影像

为了方便数据的存储和传输&#xff0c;我们在网上获取到的影像一般都是分块的&#xff0c;正式使用之前需要对这些影像进行拼接&#xff0c;这里为大家介绍一下ArcGIS Pro中拼接影像的方法&#xff0c;希望能对你有所帮助。 数据来源 本教程所使用的数据是从水经微图中下载的…