【unity】(3) Terrain Editor

news2024/11/19 17:43:42

Terrain Editor

启动Terrain Editor

  1. 创建Terrain: 在Unity的Hierarchy视图中,右键选择 Create > 3D Object > Terrain 来创建一个新的Terrain对象。

  2. 打开Terrain Inspector: 选择Hierarchy中的Terrain对象,Inspector视图会显示Terrain的各种属性和工具。
    在这里插入图片描述

从左到右这些按钮的功能是:

  1. Create Neighbor Terrains(创建相邻地形):这个工具允许你创建与当前地形平铺相接的新地形块,方便地形的扩展和连续性管理。
  2. Paint Terrain(绘制地形):这是用于修改地形高度或应用不同的地表纹理的工具。可以雕塑地形的高低起伏或给地面涂上不同的纹理材料。
  3. Paint Trees(种植树木):此工具允许你在地形上放置和管理树木和其他类似的细节物件,如草和灌木。
  4. Paint Details(绘制细节):用于在地形上添加更细小的装饰性细节,例如草丛、小花或其他小型植被。
  5. Terrain Settings(地形设置):提供了一系列设置,让你能够调整地形的基本属性,如分辨率、材质设置、地形的物理属性等。

Terrain Settings

Basic Terrain

  1. Grouping ID: 用于识别属于同一组的多个地形对象。当你有多块地形需要协同处理时,这个设置非常有用。

  2. Auto Connect: 当这个选项被勾选时,具有相同Grouping ID的地形会自动连接在一起,形成一个连续的大地形。

  3. Draw: 控制地形是否被渲染。如果取消勾选,地形将不会在游戏中显示,可以用于临时隐藏地形进行测试。

  4. Draw Instanced: 如果勾选,地形将使用GPU实例化渲染,这可以显著提高渲染多个地形块时的性能。

  5. Enable Ray Tracing: 如果勾选,地形将支持光线追踪技术,增强光影效果。这需要硬件支持并可能影响性能。

  6. Pixel Error: 控制地形的细节层次与视距的关系。数值越小,地形从远处看起来越精细,但渲染成本也越高。

  7. Base Map Dist.: 基础贴图的绘制距离,设置地形贴图在多远的距离下转为基础贴图,以优化性能。

  8. Cast Shadows:
    关闭(Off):完全禁用地形的阴影投射。这意味着地形在场景中不会产生任何阴影,这在不需要阴影或为了优化性能的情景中很有用。

    开启(On):启用地形的阴影投射,使用默认设置。地形将根据场景中设置的光照条件投射阴影。

    双面(Two Sided):允许地形从顶部和底部两个表面投射阴影。这个选项在地形的底面也可能可见且应该投射阴影的情况下非常有用。

    仅阴影(Shadows Only):此设置使地形只投射阴影,而不在场景中渲染地形的表面。这在优化性能时很有用,比如当不需要地形的视觉呈现但需要其通过阴影影响光照的情况。

  9. Reflection Probes: 控制地形如何与环境反射探头交互。
    关闭(Off):此选项将禁用地形的反射探针。地形将不会接收任何反射探针的影响,这可能用于优化性能或当场景设计中不需要反射时。

    混合探针(Blend Probes):地形将使用场景中存在的多个反射探针,并在它们之间进行混合。这可以在地形跨越多个反射探针区域时创建更平滑和逼真的反射效果。

    混合探针和天空盒(Blend Probes and Skybox):除了使用和混合场景中的反射探针外,还会考虑天空盒在计算反射时的影响。这增加了视觉上的丰富性,尤其是在开阔的室外环境中,可以更真实地反映天空和远处对象。

    简单(Simple):此选项提供一种基本的反射处理方式,通常用于对性能要求较高的场景,不需要复杂的探针混合,只利用最近的单个反射探针的数据。

  10. Material: 显示当前地形使用的材质。可以选择现有材质或通过点击“Create…”创建新的材质。通常使用“TerrainLit”材质,它特别为地形渲染优化。

Tree & Detail Objects

这里可以添加和配置地形上的树木和细节对象,如草和小植被。你可以控制这些对象的密度、分布以及它们如何随风动作。

  1. 绘制(Draw):勾选此项会在地形上显示树木和细节物体。

  2. 烘焙光照探针(Bake Light Probes):启用此项允许树木和细节物体使用光照探针的数据,这可以改善场景的光照效果,使植被更自然地融入周围环境。

  3. 移除光照探针(Remove Light Probes):此选项允许在地形修改时自动从光照探针的影响中移除树木和细节物体。

  4. 保留树木原型(Preserve Tree Prototypes):启用此项可以在编辑地形时保留树木的原始模型设置,避免因地形编辑造成的树木属性丢失。

  5. 树木运动矢量(Tree Motion Vector):控制树木受风的影响方式,可以选择“从原型继承”(Inherit From Prototype),这意味着树木的运动将基于它们原型的设置。

  6. 细节距离(Detail Distance):定义了地形细节物体(如草)的最大可视距离,单位为米。

  7. 细节密度比例(Detail Density Scale):控制地形上细节物体的整体密度,值越大显示的细节物体越多。

  8. 树木距离(Tree Distance):设置树木在地形上的最大渲染距离,超出这个距离的树木将不会被渲染。

  9. 广告牌起始(Billboard Start):树木在远距离时开始使用广告牌效果的距离,广告牌效果是一种优化技术,用于提升远处树木的渲染效率。

  10. 淡出长度(Fade Length):控制树木从完全渲染到只显示广告牌效果的过渡区域长度。

  11. 最大网格树木(Max Mesh Trees):设置在地形上可以使用完整3D模型的树木的最大数量。

  12. 细节散布模式(Detail Scatter Mode):定义细节物体在地形上的散布模式,如“覆盖模式”(Coverage Mode)将根据地形的覆盖层设置细节物体的分布。

Wind Settings for Grass

调整影响地形上草和其他细节对象的风的设置,包括风的强度、方向和风对这些细节对象的影响程度。

  1. Speed:

    • 控制风的速度。
    • 较高的值会使草在风中摆动得更快。
  2. Size:

    • 控制风的影响范围。
    • 较高的值会使更大范围的草受到风的影响。
  3. Bending:

    • 控制草在风中的弯曲程度。
    • 较高的值会使草在风中弯曲得更多。
  4. Grass Tint:

    • 控制草的颜色。
    • 你可以选择一个颜色来调整草的外观。

Mesh Resolution (On Terrain Data)

设置地形网格的分辨率。高分辨率的网格允许更复杂的地形形状,但可能会降低性能。

  1. Terrain Width:
    • 地形的宽度(以世界单位计)。
  2. Terrain Length:
    • 地形的长度(以世界单位计)。
  3. Terrain Height:
    • 地形的最大高度(以世界单位计)。
    • 这个设置定义了地形在Y轴方向上的最大高度,也就是说,地形从最低点到最高点的高度差。
  4. Detail Resolution Per Patch:
    • 每个补丁的细节分辨率。
    • 这个设置定义了每个地形补丁(Patch)的细节分辨率。较高的值会提供更多的细节,但会增加计算量和渲染负担。
  5. Detail Resolution:
    • 细节分辨率。
    • 这个设置定义了整个地形的细节分辨率。较高的值会使地形的细节更加丰富,但同样会增加计算量和渲染负担。

Holes Settings (On Terrain Data)

此设置用于在地形中创建“洞”,即地形的某部分可以透明或被完全移除,通常用于创建如湖泊和河流的地形特征。

  1. Compress Holes Texture:
    • 选项描述:启用或禁用地形洞的纹理压缩。
    • 当勾选此选项时,地形洞的纹理将被压缩,从而减少纹理的内存占用和提高渲染性能。
    • 当你在地形上创建洞时,Unity会生成一个洞的纹理贴图,用于标记地形哪些部分应该被渲染为空洞。
    • 这对于大型地形或具有多个洞的复杂地形尤其有用,因为可以有效地管理资源和性能。

如果你在创建具有大量洞的地形时遇到性能问题,可以尝试启用这个选项。

Texture Resolutions (On Terrain Data)

在这个部分,你可以设置地形的纹理分辨率。这影响地形的贴图如何被渲染,是影响性能和视觉质量的重要因素。

  1. Heightmap Resolution:

    • 决定了地形的高度图的精细程度。较高的分辨率可以提供更多的高度细节,但也会增加内存和计算负担。
  2. Control Texture Resolution:

    • 决定了控制纹理的精细程度。控制纹理用于定义地形上的不同区域(例如,草地、泥土、沙地等)的混合方式。较高的分辨率可以提供更细致的区域控制,但也会增加内存和计算负担。
  3. Base Texture Resolution:

    • 基础纹理分辨率,定义地形基础纹理的分辨率。
    • 决定了基础纹理的清晰度。基础纹理是应用在整个地形上的纹理,较高的分辨率可以提供更清晰的地形外观,但也会增加内存和计算负担。
  4. Import Raw / Export Raw:

    • 用于导入和导出地形高度图的原始数据(RAW文件格式)。
    • 通过这些按钮,你可以将高度图数据导入或导出,进行进一步编辑或备份。

Lighting

控制地形的光照设置,如地形的光照模型(如使用标准光照或简化光照)以及地形如何接收和反射光。

  1. Contribute Global Illumination:

    • 选项描述:启用或禁用地形对全局光照的贡献。
    • 勾选此选项后,地形会参与全局光照的计算,这样会使光线在地形上的反射和散射效果更加逼真,从而提升整体的光照质量。
  2. Receive Global Illumination:

    • 选项描述:控制地形接收全局光照的方式。
    • 选项包括“Lightmaps”和“Light Probe”。
    • Lightmaps:选择此选项时,地形会使用预计算的光照贴图来接收全局光照。这种方法通常在场景光照静态且光照效果需要高质量时使用。
    • Light Probes:选择此选项时,地形会使用光探针来接收全局光照。光探针捕获场景中不同位置的光照信息,适用于动态场景和移动对象。

Lightmapping

允许地形参与全局光照计算和光照贴图。你可以选择地形的渲染层遮罩,这影响哪些光源会影响地形。此外,你还可以选择忽略品质设置,这通常用于优化,可以针对不同的硬件配置提供不同的渲染品质。

  1. Rendering Layer Mask:
    • 渲染层蒙版用于控制地形在渲染过程中应用的层。可以将地形分配到特定的渲染层,以便在光照贴图烘焙和渲染过程中进行更细粒度的控制。
    • 可以在项目的图层设置中定义和选择其他自定义的渲染层。

图片显示的是Unity Terrain组件中的“Quality Settings”部分。具体设置项如下:

Quality Settings

  1. Ignore Quality Settings:
    • 作用:当此选项被勾选时,地形将忽略Unity项目中的全局质量设置,并使用地形自身的质量设置。这允许你为特定地形单独定义质量设置,而不受全局设置的影响。
    • 使用场景:如果你希望为特定的地形对象提供不同于全局质量设置的配置,比如在一个场景中有多个地形对象,每个地形对象需要不同的渲染质量,这时就可以启用此选项。

图片显示的是Unity Terrain组件中的“Create Neighbor Terrains”设置部分,用于创建相邻的地形。具体设置项如下:

Create Neighbor Terrains

  1. Fill Heightmap Using Neighbor

    • 作用:当启用此选项时,Unity会使用相邻地形的数据来填充新创建的地形高度图。这有助于确保相邻地形之间的高度过渡平滑,从而避免出现明显的边界或不连续的地形变化。
    • 使用场景:在创建大型连续地形时,启用此选项可以使多个地形片段无缝连接,提供更自然的过渡效果。
  2. Fill Heightmap Address Mode

    • Clamp:使用相邻地形的边缘高度填充新地形的高度图边缘。边缘值被“钳制”到最近的相邻高度值。
    • Wrap:高度图在边缘处循环,创建连续的周期性高度变化。
    • Mirror:高度图在边缘处反射,创建镜像的高度变化。

示例代码

假设你想通过脚本动态设置地形的这些选项,可以使用以下代码:

using UnityEngine;

public class AdjustNeighborTerrains : MonoBehaviour
{
    public Terrain terrain;
    public bool fillHeightmapUsingNeighbor = true;
    public TerrainFillAddressMode fillHeightmapAddressMode = TerrainFillAddressMode.Clamp;

    void Start()
    {
        if (terrain == null)
        {
            terrain = GetComponent<Terrain>();
        }

        // 设置是否使用相邻地形填充高度图
        terrain.allowAutoConnect = fillHeightmapUsingNeighbor;

        // 设置填充高度图的地址模式
        terrain.terrainData.heightmapAddressMode = fillHeightmapAddressMode;
    }
}

public enum TerrainFillAddressMode
{
    Clamp,
    Wrap,
    Mirror
}

在这个示例中,fillHeightmapUsingNeighbor设置为true表示启用使用相邻地形填充高度图,fillHeightmapAddressMode设置为Clamp表示使用“Clamp”地址模式。

Paint Terrain

Paint Texture 工具用于在地形上应用和绘制不同的纹理。这可以帮助你创建多样化的地形外观,例如草地、泥土、沙地等。

设置和使用 Paint Texture 工具

Brushes(刷子)
  • 选择刷子:在 Brushes 部分选择一个刷子形状。Unity 提供了多种默认的刷子形状,如圆形、方形等。你也可以创建自定义刷子。
  • 新建刷子:点击 New Brush... 按钮可以创建自定义刷子。
Brush Mask(刷子遮罩)
  • 这个部分允许你应用一个遮罩来限制刷子的作用区域。比如,可以使用噪声遮罩来创造更自然的过渡。
Stroke(笔触)
  • Target Strength:控制刷子的强度,即应用纹理的强度。你可以通过滑块来调整这个值。
Material(材质)
  • Material 部分,你可以选择地形的材质。通常,地形材质会包含多层纹理,用于不同的地形类型。
Layers(层)
  • Layer Palette Profile:保存和加载纹理层配置。
  • Layer Palette:显示当前地形的纹理层。可以在这里添加、移除和管理纹理层。
创建新层
  1. 点击 Add Layer 按钮来添加新的纹理层。
  2. 在弹出的窗口中选择你想要应用的纹理,或者创建一个新的纹理。

绘制纹理

  1. 选择纹理层:在 Layer Palette 中选择你要绘制的纹理层。
  2. 选择刷子:在 Brushes 部分选择一个刷子形状。
  3. 调整刷子参数:调整 Target Strength 和其他参数,以获得所需的效果。
  4. 绘制:在地形上点击并拖动鼠标,应用选定的纹理。

图层管理

  1. 添加图层:点击 Add Layer 按钮并选择或创建一个新的纹理层。
  2. 移除图层:选择一个图层并点击 Remove Layer 按钮。
  3. 调整图层顺序:在 Layer Palette 中拖动图层条目以调整它们的绘制顺序。
示例:绘制草地纹理
  1. Layers 部分,点击 Add Layer 并选择一个草地纹理。
  2. Brushes 部分选择一个柔和的圆形刷子。
  3. 调整 Target Strength 到适当的值,比如 0.5。
  4. 在地形上点击并拖动鼠标,绘制草地纹理。

Paint Trees

设置和使用 Paint Trees 工具

添加树木原型

  1. 点击 Edit Trees... 按钮:在 Trees 部分,点击 Edit Trees... 按钮,然后选择 Add Tree...
  2. 选择树木预制件:在弹出的窗口中,点击 GameObject 下拉菜单,选择一个树木预制件(Prefab)。你可以使用Unity提供的默认树木预制件,或者导入和创建自己的树木预制件。
  3. 设置树木参数:你可以调整树木的参数,如最大高度、最小高度、颜色等。

设置刷子参数

  1. Brush Size:调整刷子的大小。这个参数控制你在地形上种植树木时的影响范围。
  2. Tree Density:调整树木密度。这个参数控制在刷子范围内种植的树木数量。
  3. Color Variance:设置树木颜色的变化范围。
  4. Height:调整树木高度的范围。
    • 树木高度:设置树木的高度范围,以控制生成的树木大小。
    • Random Tree Rotation:勾选此选项,树木将以随机旋转角度种植,使它们看起来更加自然。
    • Lock Width to Height:勾选此选项,树木的宽度和高度将按比例锁定。

在地形上种植树木

  1. 选择树木类型:在 Trees 部分,选择你想要种植的树木类型。
  2. 调整刷子参数:调整 Brush SizeTree DensityColor VarianceHeight 参数。
  3. 种植树木:在地形上点击并拖动鼠标,种植树木。
  4. 移除树木:按住 Ctrl 键并拖动鼠标,可以移除已种植的树木。

示例操作

示例:种植松树
  1. 添加树木原型:点击 Edit Trees... 按钮,然后选择 Add Tree...。在弹出的窗口中,选择一个松树预制件。
  2. 设置刷子参数:调整 Brush Size 到适中的大小(例如 30),将 Tree Density 设置为高密度(例如 50)。
  3. 种植树木:在地形上点击并拖动鼠标,种植松树。你会看到在刷子范围内生成了许多松树。
  4. 调整高度和颜色:在 Height 部分设置树木的高度范围(例如 4 到 8),并在 Color Variance 部分调整颜色变化范围,使树木看起来更加自然。

示例代码

假设你想通过脚本动态添加树木,可以使用以下代码:

using UnityEngine;

public class AddTreesToTerrain : MonoBehaviour
{
    public Terrain terrain;
    public GameObject treePrefab;
    public int treeCount = 100;
    public float areaSize = 100f;

    void Start()
    {
        if (terrain == null)
        {
            terrain = GetComponent<Terrain>();
        }

        TerrainData terrainData = terrain.terrainData;

        for (int i = 0; i < treeCount; i++)
        {
            float x = Random.Range(0, areaSize) / terrainData.size.x;
            float z = Random.Range(0, areaSize) / terrainData.size.z;
            float y = terrainData.GetHeight((int)(x * terrainData.heightmapResolution), (int)(z * terrainData.heightmapResolution)) / terrainData.size.y;

            TreeInstance treeInstance = new TreeInstance
            {
                position = new Vector3(x, y, z),
                prototypeIndex = 0,
                widthScale = Random.Range(0.8f, 1.2f),
                heightScale = Random.Range(0.8f, 1.2f),
                color = Color.Lerp(Color.white, Color.green, Random.value),
                lightmapColor = Color.white
            };

            terrainData.AddTreeInstance(treeInstance);
        }

        terrainData.RefreshPrototypes();
    }
}

在这个示例中,treePrefab 是你要种植的树木预制件,treeCount 是你要种植的树木数量,areaSize 是种植树木的区域大小。脚本会在指定区域内随机位置种植树木。

Paint Details

在Unity中,使用Paint Details工具可以在地形上添加草地、花朵和其他细小的植被或细节对象。

设置和使用 Paint Details 工具

添加细节对象原型

  1. 点击 Edit Details... 按钮:在 Details 部分,点击 Edit Details... 按钮,然后选择 Add Grass Texture...Add Detail Mesh...
  2. 选择细节对象:在弹出的窗口中,选择一个草地纹理或细节网格(例如,花朵、灌木)。你可以使用Unity提供的默认细节对象,或者导入和创建自己的细节对象。
  3. 设置细节对象参数:你可以调整细节对象的参数,如渲染模式、最小和最大宽度、高度等。
添加草地纹理示例:
  1. 点击 Add Grass Texture...
  2. 选择草地纹理:在弹出的窗口中,选择一个草地纹理。
  3. 设置草地参数
    • Detail Texture:选择草地的纹理。
    • Min WidthMax Width:设置草地的最小和最大宽度。
    • Min HeightMax Height:设置草地的最小和最大高度。
    • Healthy ColorDry Color:设置草地的健康颜色和干燥颜色。
    • Render Mode:选择草地的渲染模式(例如,草地或细节网格)。
添加细节网格示例:
  1. 点击 Add Detail Mesh...
  2. 选择细节网格:在弹出的窗口中,选择一个细节网格(例如,花朵或灌木)。
  3. 设置细节网格参数
    • Detail Mesh:选择细节对象的网格。
    • Min WidthMax Width:设置细节对象的最小和最大宽度。
    • Min HeightMax Height:设置细节对象的最小和最大高度。
    • Healthy ColorDry Color:设置细节对象的健康颜色和干燥颜色。
    • Render Mode:选择细节对象的渲染模式(例如,草地或细节网格)。

设置刷子参数

  1. Brush Size:调整刷子的大小。这个参数控制你在地形上添加细节对象时的影响范围。
  2. Opacity:调整刷子的透明度。这个参数控制细节对象的密度。
  3. Target Strength:调整细节对象的强度。

在地形上添加细节对象

  1. 选择细节对象类型:在 Details 部分,选择你想要添加的细节对象类型。
  2. 调整刷子参数:调整 Brush SizeOpacityTarget Strength 参数。
  3. 添加细节对象:在地形上点击并拖动鼠标,添加细节对象。
  4. 移除细节对象:按住 Ctrl 键并拖动鼠标,可以移除已添加的细节对象。

示例操作

示例:添加草地
  1. 添加草地纹理:点击 Edit Details... 按钮,然后选择 Add Grass Texture...。在弹出的窗口中选择一个草地纹理,并设置草地参数。
  2. 设置刷子参数:调整 Brush Size 到适中的大小(例如 20),将 Opacity 设置为较高值(例如 0.8)。
  3. 添加草地:在地形上点击并拖动鼠标,添加草地。你会看到在刷子范围内生成了许多草地。
示例:添加花朵
  1. 添加细节网格:点击 Edit Details... 按钮,然后选择 Add Detail Mesh...。在弹出的窗口中选择一个花朵网格,并设置花朵参数。
  2. 设置刷子参数:调整 Brush Size 到适中的大小(例如 10),将 Opacity 设置为较低值(例如 0.5)。
  3. 添加花朵:在地形上点击并拖动鼠标,添加花朵。你会看到在刷子范围内生成了许多花朵。

示例代码

假设你想通过脚本动态添加细节对象,可以使用以下代码:

using UnityEngine;

public class AddDetailsToTerrain : MonoBehaviour
{
    public Terrain terrain;
    public Texture2D grassTexture;
    public GameObject detailMesh;

    void Start()
    {
        if (terrain == null)
        {
            terrain = GetComponent<Terrain>();
        }

        TerrainData terrainData = terrain.terrainData;

        // 添加草地纹理
        DetailPrototype grassPrototype = new DetailPrototype();
        grassPrototype.prototypeTexture = grassTexture;
        grassPrototype.renderMode = DetailRenderMode.Grass;
        grassPrototype.minWidth = 0.5f;
        grassPrototype.maxWidth = 1.5f;
        grassPrototype.minHeight = 0.5f;
        grassPrototype.maxHeight = 1.5f;
        grassPrototype.healthyColor = Color.green;
        grassPrototype.dryColor = Color.yellow;

        // 添加细节网格
        DetailPrototype meshPrototype = new DetailPrototype();
        meshPrototype.prototype = detailMesh;
        meshPrototype.renderMode = DetailRenderMode.VertexLit;
        meshPrototype.minWidth = 0.8f;
        meshPrototype.maxWidth = 1.2f;
        meshPrototype.minHeight = 0.8f;
        meshPrototype.maxHeight = 1.2f;
        meshPrototype.healthyColor = Color.white;
        meshPrototype.dryColor = Color.gray;

        // 设置细节对象
        terrainData.detailPrototypes = new DetailPrototype[] { grassPrototype, meshPrototype };
        terrainData.RefreshPrototypes();
    }
}

在这个示例中,grassTexture 是你要添加的草地纹理,detailMesh 是你要添加的细节网格(例如花朵)。脚本会在地形上添加这些细节对象,并设置它们的参数。

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

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

相关文章

智能水抄表系统是什么?

1.概述&#xff1a;智能水抄表系统的概念与意义 智能水抄表系统是现代科技与水资源管理的完美结合&#xff0c;它利用先进的传感器技术、无线通信技术和数据分析能力&#xff0c;实现了远程、实时的水表读取和管理。这种系统不仅提高了抄表效率&#xff0c;降低了人力成本&…

Canny算子

Canny算子_百度百科 (baidu.com)https://baike.baidu.com/item/Canny%E7%AE%97%E5%AD%90/8821789?frge_ala 图像处理中最经典的边沿检测算法&#xff1a; Canny边缘检测_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1U4411277i/?spm_id_from333.1007.top_right_bar_…

【静态分析】在springboot使用太阿(Tai-e)02

参考&#xff1a;使用太阿&#xff08;Tai-e&#xff09;进行静态代码安全分析&#xff08;spring-boot篇二&#xff09; - 先知社区 本文章使用的被分析代码为GitHub - JoyChou93/java-sec-code: Java web common vulnerabilities and security code which is base on springb…

docxtemplater避坑!!! 前端导出word怎么插入本地图片或base64 有完整示例

用docxtemplater库实现前端通过模板导出word&#xff0c;遇到需求&#xff0c;要插图片并转成word并导出&#xff0c;在图片转换这块遇到了问题&#xff0c;网上查示例大多都跑不通&#xff0c;自己琢磨半天&#xff0c;总算搞明白了。 附上清晰完整示例&#xff0c;供参考。 …

医卫兰大药学试题及答案,分享几个实用搜题和学习工具 #媒体#微信

这些软件以其强大的搜索引擎和智能化的算法&#xff0c;为广大大学生提供了便捷、高效的解题方式。下面&#xff0c;让我们一起来了解几款备受大学生欢迎的搜题软件吧&#xff01; 1.彩虹搜题 这个是公众号 题库内容丰富全面&#xff0c;细致分类整理。找题再也不费力&#…

数据库|基于T-SQL添加默认约束、外键约束、内连接查询

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 前边学习了基于T-SQL48_47.基于T-SQL添加数据、CRUD操作、标识列详解&#xff1a;《数据库|基于T-SQL向数据库数据表中添加、修改、删除数据》 接下来接着学习基于T-SQL添加默认约束、外键约束、内连接查询&#xff0c…

多个文本如何一键导出二维码?在线批量生码的制作方法

当存在多条文本数据并且需要将每条数据生成单独的二维码来使用&#xff0c;很多小伙伴可能还在用一个一个来制作的方法&#xff0c;在二维码生成器上将文本转二维码。这种方式操作起来比较的繁琐&#xff0c;需要浪费大量的时间&#xff0c;那么有什么方法可以简化这个过程吗&a…

【Python】 如何将列表转换为字符串

基本原理 在Python中&#xff0c;列表&#xff08;list&#xff09;和字符串&#xff08;string&#xff09;是两种不同的数据类型。列表是一个有序的元素集合&#xff0c;可以包含不同类型的元素&#xff0c;而字符串则是一个字符序列。有时&#xff0c;我们可能需要将列表中…

记录一次cnvd事件型证书漏洞挖掘

事件起因是因为要搞毕设了&#xff0c;在为这个苦恼&#xff0c;突然负责毕设的老师说得到cnvd下发的证书结合你的漏洞挖掘的过程是可以当成毕设的&#xff0c;当时又学习了一段时间的web渗透方面的知识&#xff0c;于是踏上了废寝忘食的cnvd证书漏洞挖掘的日子。 前言&#x…

卷径计算(PID输出补偿法 SCL源代码)

卷径计算有很多方法,这里我们提供另一个思路,这里我们采用的是通过速度控制间接控制张力通过线速度和系统卷径我们可以计算出我们的速度前馈量(主速度)。具体收放卷前馈量计算可以参考下面文章链接: 收放卷前馈量计算FC(梯形图+SCL代码)-CSDN博客文章浏览阅读584次。这篇博…

Hexo最新实战:(一)Hexo7.0+GitHub Pages博客搭建

前言 很多平台都能写博客还有创作激励&#xff0c;为什么我又要搭一个&#xff1f;为什么这次要选择用Hexo框架&#xff1f; 对应的原因是流量自由和省钱&#xff0c;第一个&#xff0c;很多平台能写但不是都有收益&#xff0c;而且平台有自身的规则&#xff0c;比如会屏蔽一…

鸿蒙大厂目前政策变现沉淀思考

鸿蒙引擎定制优化 鸿蒙端hotfix&#xff1a; 技术栈太大了&#xff0c;但是鸿蒙需要学习什么呢&#xff1f; 什么最有价值&#xff1f; 这就是接下来需要表达下我的观点&#xff1a; 1、APP开发 2、应用市场技术专员 【游戏、电商重型APP性能的处理 SmartPerf、构建自己的工…

如果一个开发初学者从今天开始,他们应该学习什么?

What should a beginner developer learn if they were to start today? by Scott Hanselman 如果从今天才开始学习&#xff0c;新手开发者要学习什么&#xff1f; 新的开发人员今天应该从哪里开始&#xff1f; 他们应该学习什么来为自己的职业生涯做好准备&#xff1f;Sco…

做微火全域运营服务商要注意的风险有哪些?

随着全域运营赛道日渐兴起&#xff0c;微火全域运营服务商申请人不断增多&#xff0c;逐渐成为众多新兴职业中的一大热门。 所谓微火全域运营服务商&#xff0c;顾名思义&#xff0c;就是通过操作微火全域运营系统做全域运营的一类群体&#xff0c;其业务范围为公域和私域内所有…

IC开发——Verilator

1. 简介 Verilator 是一个开源的 Verilog 和 SystemVerilog 硬件描述语言 (HDL) 仿真器。它是一个高性能的仿真器,可以将 Verilog 和 SystemVerilog 代码转换为 C/SystemC 代码,并生成可执行的仿真模型。 Verilator 的主要特点包括: 高性能:Verilator 生成的仿真模型具有非常…

Bootstrap 3.x 版本基础引入指南

Bootstrap 是一款广受欢迎的前端框架&#xff0c;它简化了网页设计与开发流程&#xff0c;帮助开发者快速创建响应式布局和美观的网页界面。本文将向您介绍如何在项目中引入 Bootstrap 3.x 版本的基本步骤&#xff0c;包括 CSS 和 JavaScript 文件的引用&#xff0c;以及必要的…

关于Java Agent的使用、工作原理、及hotspot源码 解析

说明&#xff1a; 本文很长&#xff0c;长到超出了掘金编辑器的限制字符数 10万&#xff0c;所以我在最后边只是图解&#xff0c;没有更多的文字和代码描述了&#xff0c;本文知识点较多&#xff0c;如果没接触过agent那必然大概率会懵&#xff08;大部分知识点讲解完后&#x…

瑞_Windows环境下使用bat重启jar包等服务

文章目录 命令示例重启ray-project.jar重启redis服务 &#x1f64a; 前言&#xff1a;经验分享——Windows环境下使用.bat批处理文件重启 jar 包等服务。在学习或者工作日常中&#xff0c;有时候会需要在 Windows 系统环境下去启动 jar 包或其它服务&#xff0c;此时如果使用关…

百世慧入选第七届数字中国建设峰会“2024企业数字化转型典型应用案例”

5月24日-25日&#xff0c;第七届数字中国建设峰会在福州举行。本届峰会是国家数据工作体系优化调整后首次举办的数字中国建设峰会&#xff0c;主题为“释放数据要素价值&#xff0c;发展新质生产力”。 为了全方位展示各领域数字化最新成果&#xff0c;共创数字中国美好未来&a…

mail发送调用接口如何与三方服务无缝对接?

mail发送调用接口的性能怎么样&#xff1f;调用邮件接口的技巧&#xff1f; 为了提高效率和自动化水平&#xff0c;企业通常会选择使用mail发送调用接口。然而&#xff0c;仅仅使用这些接口还不够&#xff0c;如何与各种第三方服务无缝对接同样至关重要。AokSend将探讨如何有效…