本文用来水暑假的研究性学习报告 不要认真 摘要 本文给出了朴素 Marching Cubes 算法体素网格体在 Unreal Engine 4 中的实现方案,通过生成一个具有“光滑”表面的球体来演示算法的可行性。 关键词 MarchingCubes UnrealEngine 网格重建 游戏开发 研究背景 《Minecraft》是当下比较火热的游戏之一,他的体素地形系统大大提高了玩家对地形的修改能力,使得自由度大大提高,其体素表示是基于 立方体 而不是 Mesh ,这使得其对曲面的表达能力受限,同
作者: _Redstone_c_
本文用来水暑假的研究性学习报告 摘要 本文给出了一种基于 HFish 的网络威胁捕捉与诱骗系统的简单搭建模式,并通过此系统捕捉了当今互联网上的部分网络攻击,通过这些数据进行简单的整理分析,透漏出网络中的潜在威胁。 关键词 网络安全 黑客攻击 网络攻防 密码破译 研究背景 作为一个小型个人网站的站主,可能并不会感觉到自己的网站被扫描与攻击,但实际上,互联网中有不少潜在的威胁。网站在明处,潜在威胁在暗处,并不容易对潜在威胁做定性定量分析,所以就需要威胁捕捉与诱骗系统通过模仿真实网站的行为,捕捉潜在的
引擎: UE4.26.2 构建版本 事情的起因是写体素构建器的时候,想生成个球,就想到抄材质的 SphereMask 节点。 这里以 SphereMask 节点为例,分析材质蓝图节点的定义。 UMaterialExpression 材质节点的 C++ 父类为 UMaterialExpression ,定义在 MaterialExpression.h 头文件中,所有原生材质节点均为此类的子类,此类主要成员如下。 virtual int32 Compile(class FMaterialCompil
问题 在从 UE4.24 升级到 UE4.26 后,想打包安卓,删除了以前的 NDK 然后根据官网指示安装新的 NDK ,在打包时提示打包失败,Log 关键内容如下。 UATHelper: Packaging (Android (Multi:ASTC,DXT,ETC2)): ====2021-08-09 14:35:59====PERFORMING FINAL APK PACKAGE OPERATION=====-armv7====================================
这是 2021年山大未来科学营(夏季)- 人工智能与发明创造未来科学营 的作业 所以看看就行 基本信息 名称:远程智能房间巡逻警报机器人 解决家里/房间长期无人,但是有设备运行或其他需求,需要远程监控。可以方便远程监控家中环境,监控设备的运行状态,并且具有良好的机动性和灵活性,可以适应不同的房间环境。 硬件连接图 graph LR 摄像头 — 树莓派 超声传感器 — 扩展板 5路组件 — 扩展板 树莓派 — 扩展板 扩展板 — 电机驱动板 扩展板 — 测速左 扩展板 —
假设我们有一个带 USTRUCT 宏的结构体,我们希望在蓝图中可以以自己的方式 Make 或者 Break ,这个需求通常是因为我们在结构体里用了 C++ 中不支持反射的成员。 USTRUCT(BlueprintType, Meta = (HasNativeMake, HasNativeBreak)) struct FMeshVertex { GENERATED_BODY() UPROPERTY(EditAnywhere) FVector Position; UPROPERTY(EditAnyw
Establish Battlefield Control, Stand By — 战场控制建立,请等待。 Battle Control Online — 作战控制连线。 Incoming Transmission — 信号输入。 New Objective Received — 收到新的任务目标。 Objective Complete — 任务目标完成。 Mission Accomplished — 任务完成。 Missi
Lengyel-VoxelTerrain.pdf
ParallelFor 是 UE 内置的支持多线程并行处理任务的 For 循环,在渲染系统中应用得相当普遍。 调用方式 函数签名 void ParallelFor(int32 Num, TFunctionRef<void(int32)> Body, bool bForceSingleThread, bool bPumpRenderingThread = false); void ParallelFor(int32 Num, TFunctionRef<void(int32)>
UFUNCTION() virtual void FunctionName(…) PURE_VIRTUAL(ClassName::FunctionName, … );
CornerCoordOffset[8] – 表示顶点索引到顶点空间位置的映射,如 CornerCoordOffset[0] = (0,0,0) 表示 顶点-0 的位置是 (0,0,0) 。 Triangulation[256][5][3] – 表示三角形拆分,可以通过顶点状态(通过位掩码)拆分三角形,得到三角形对应的边索引,如 Triangulation[2][0][0] = 0 表示 顶点-1 在“内部”其余顶点在“外部”时,第一个三角形的第一个顶点在 边-0 上。
Vertices = { { -50.0f, -50.0f, -50.0f }, { 50.0f, -50.0f, -50.0f }, { 50.0f, 50.0f, -50.0f }, { 50.0f, 50.0f, -50.0f }, { -50.0f, 50.0f, -50.0f }, { -50.0f, -50.0f, -50.0f }, { -50.0f, -50.0f, 50.0f }, { 50.0f, -50.0f, 50.0f }, { 50.0f, 50.0f, 50.0f
基于 Mermaid 类图规范编写: Mermaid: Class diagrams “在软件工程中,统一建模语言 (UML) 中的类图是一种静态结构图,它通过显示系统中的类以及它们的属性和操作(或方法)再加上类之间的关系来描述系统的结构。” 维基百科 类图是面向对象建模的主要构建基础。它可以用于应用程序一般结构的概念建模,以及将模型转换为编程语言代码的详细建模。类图也可用于数据建模。类图中的类表示应用中的主要元素、交互和要编程的类。 Mermaid 可以渲染类图。 classDiagram A
引擎: UE4.26.2 构建版本 StaticMesh 简称 SM ,表示引擎中的 静态网格体 ,在新版本的引擎中, SM 也被允许在运行时构建,渲染一个 SM 需要 SMC 的支持, SMC 使用 静态/动态渲染路径 ,在允许的情况下优先使用 静态渲染路径 ,会缓存所有渲染命令。 类图 UStaticMesh 类图 classDiagram IInterface_AssetUserData <|.. UStaticMesh Interface_CollisionDataProvider
引擎: UE4.26.2 构建版本 ProceduralMeshComponent 简称 PMC ,提供一个程序化网格组件,可以通过自定义的三角形制作可渲染网格,使用动态渲染路径,在每帧收集渲染数据,没有任何数据缓存。 类结构 游戏 类图 classDiagram Interface_CollisionDataProvider <|.. UProceduralMeshComponent FPrimitiveSceneProxy <|– FProceduralMeshScenePro
众所周知 UE4 把 RTTI 给禁止了,这导致 dynamic_cast 的支持是不完全的,也就是说不支持从基类转换到子类,但是在阅读 TSoftObjectPtr (SoftObjectPtr.h) 代码时却看到: /** * Dereference the soft pointer. * * @return nullptr if this object is gone or the lazy pointer was null, otherwise a valid UObject point
开始记录状态到文件 stat startfile 停止记录状态到文件 stat stopfile 便捷作用域计时器 可以直接使用 QUICK_SCOPE_CYCLE_COUNTER(STAT_ClassName_FunctionName); 声明状态组 DECLARE_STATS_GROUP(TEXT("Group Name"), STATGROUP_GroupName, STATCAT_Advanced); 声明计数器 DECLARE_DWORD_ACCUMULATOR_S
成果 引擎版本 4.26.2 实现一个 UTexture2DArray 包裹器。 支持在 Runtime 的纹理数组创建与修改。 支持纹理数组 MipMap (官方实现只有第0层Mip)。 效果图 此纹理数组共5个元素,5个 Mip 层级。 其中,横向为元素,纵向为 Mip 层级。 代码 Texture2DArrayWrapper.h #pragma once #include "CoreMinimal.h" #include "UObject/Object.h&q
N 北 X+ S 南 X- E 东 Y+ W 西 Y- T 上 Z+ B 下 Z-
表现 Assertion failed: !FPaths::IsRelative(Dir) [File:/Engine/Source/Runtime/Projects/Private/ProjectDescriptor.cpp] [Line: 337] ../../../UGCExample/../RemappedPlugins/ is not an absolute path 解决方案 将 ProjectDescriptor.cpp 第 143 行处修改: // If this is a pa
为了防止 ICP 信息硬编码,试图修改主题 PHP 代码时发现,主题自带一个底部社交菜单,但是社交菜单会把菜单项换成图片,此操作是完全通过 CSS 代码进行的,所以只需要在自定义 CSS 中加入下面的 CSS 代码,即可覆盖。此代码通过重置社交区域的 li a 标签设置使其恢复文本显示。 .social-menu li a { all: revert; all: unset; } .social-menu { display: -webkit-box; display: -ms-flexbox;
void AsyncTask(ENamedThreads::Type Thread, TUniqueFunction<void()> Function); 一般任务线程: ENamedThreads::AnyHiPriThreadNormalTask 一般回调线程: ENamedThreads::GameThread
PRAGMA_DISABLE_OPTIMIZATION // Code PRAGMA_ENABLE_OPTIMIZATION
原文传送门 FRunnable & FRunnableThread FRunnable提供了最为原始的线程支持,类似std::Thread,虽然没那么优雅,但是功能略多于std::Thread FRunnable—-承载业务逻辑 +[f] Init : 初始化,可以失败 +[f] Run : 线程运行函数,返回退出代码 +[f] Stop : 提前终止这个线程 +[f] Exit : 进行退出前的清理 +[f] GetSingleThreadInterface : 平台不支持
原生插件 Adblock Plus – 通用广告拦截器 Adblock for Youtube™ – Youtube 广告拦截器 Dark Reader – 自适应暗色主题 Proxy SwitchyOmega – 网络代理智能控制 Tampermonkey – 油猴插件支持 User-Agent Switcher and Manager – 伪造客户端信息 Violentmonkey – 油猴插件支持 YouT
lli fac[maxn]; // 阶乘 lli inv[maxn]; // 逆元 lli invf[maxn]; // 逆元的阶乘 inline void init() { fac[0] = 1; for (lli i = 1; i < maxn; ++i) fac[i] = fac[i – 1] * i % mod; inv[1] = 1; for (lli i = 2; i < maxn; ++i) inv[i] = inv[mod % i] * (mod – mod / i)
struct fenwick_tree_t { lli n; vector<lli> tre; fenwick_tree_t(lli n) : n(n), tre(n + 1, 0) { } lli lowbit(lli x) { return x & -x; } void build(lli* arr) { for (lli i = 1; i <= n; ++i) upd(i, arr[i]); } void upd(lli i, lli x) { for (; i
lli gcd(lli x, lli y) { return y ? gcd(y, x % y) : x; }
std::chrono::system_clock::time_point bt = std::chrono::system_clock::now(); std::chrono::system_clock::time_point et = std::chrono::system_clock::now(); std::chrono::nanoseconds dt = std::chrono::duration_cast<std::chrono::nanoseconds>(et – bt
[ 络谷 ] lli dsu[maxn]; lli dis[maxn]; lli num[maxn]; void init_dsu() { for (lli i = 0; i < maxn; ++i) dsu[i] = i; for (lli i = 0; i < maxn; ++i) dis[i] = 0; for (lli i = 0; i < maxn; ++i) num[i] = 1; } lli find_dsu(lli x) { if (dsu[x] == x) r
约定存边方式为从左部到右部的有向边,左右部点编号相同 匈牙利算法 lli mch[maxn]; lli vis[maxn]; bool dfs_hun(lli u, lli dfn) { if (vis[u] == dfn) return false; vis[u] = dfn; for (lli i = head[u]; ~i; i = edge[i].nxt) { lli v = edge[i].v; if (mch[v] == 0 || dfs_hun(mch[v], dfn)) { mc
倍增思想 由 倍增 LCA 改的 lli mw[32][maxn]; lli fa[32][maxn]; lli dep[maxn]; void dfs_mw(lli u) { dep[u] = dep[fa[0][u]] + 1; for (lli i = 1; (1 << i) <= dep[u]; ++i) fa[i][u] = fa[i – 1][fa[i – 1][u]]; for (lli i = 1; (1 << i) <= dep[u]; ++
lli n; lli arr[maxn]; lli lg[maxn]; lli st[maxn][32]; inline lli flg(lli x) { if (lg[x]) return lg[x]; lli tmp = x; lli res = 0; while (tmp) tmp >>= 1, ++res; return lg[x] = res – 1; } inline void init_st() { for (lli i = 1; i <= n; ++i) st[
络谷 P1962 斐波那契数列
硬获取 UObjectLibrary* ObjectLibrary = UObjectLibrary::CreateLibrary(UUserDefinedStruct::StaticClass(), false, GIsEditor); ObjectLibrary->LoadAssetDataFromPath(TEXT("/Game")); TArray<FAssetData> AssetDatas; ObjectLibrary->GetAssetD
络谷 P3379 [模板] 最近公共祖先 LCA 欧拉序+线段树 int cnt; int dep[maxn]; int eoo[maxn]; int ooe[maxn << 1]; void dfs_ooe(int u, int f) { dep[u] = dep[f] + 1; ooe[++cnt] = u; eoo[u] = cnt; for (int i = head[u]; ~i; i = edge[i].nxt) { int v = edge[i].v; if (f ==
题解 [该代码需要配合线段树] int cnt; int fa[maxn]; int dep[maxn]; int siz[maxn]; int son[maxn]; int rk[maxn]; int top[maxn]; int id[maxn]; inline void init_tree() { cnt = 0; } void dfs_ss(int u) { int ms = -1; int mss = 0; siz[u] = 1; for (int i = head[u]; ~i; i
#ifdef __cpp_if_constexpr template <typename T, typename… Args> void read(T& x, Args&… r) { if constexpr (is_integral_v<T> && !is_same_v<decay_t<T>, char>) { x = 0; lli f = 1; char ch = getchar(); while (!i
r.VolumetricFog.GridPixelSize 体积雾像素大小 r.VolumetricFog.GridSizeZ 体积雾Z深度 r.VolumetricFog.TemporalReprojection 时间效果累加 r.VolumetricFog.HistoryWeight 时间效果累加长度[帧] r.VolumetricFog.Jitter 抖动累计
我见到你所说的那位玩家了。 (玩家姓名)? 是的。小心。他现在已达到了更高的境界。他能阅读我们的思想。 没关系。他认为我们是游戏的一部分。 我喜欢这个玩家。他玩得很好。他没有放弃。 他以屏幕上出现的文字的形式阅读着我们的思想。 在他深陷游戏的梦境时,他总以这种方式想象出各种各样的事物。 文字营造出了一种美妙的界面。非常灵活。而且比起凝视屏幕后的现实来说,不会让人那么恐惧。 他们也曾经听到过声音。在玩家能够阅读之前。那些不在玩的人们称呼玩家为女巫、术士。而玩家们梦见他们自己乘坐在被恶魔施加了力量的
向量和标量相乘 s\mathtt a = (sa_x,sa_y,sa_z) 不改变向量的方向,只改变长度。 向量的加减 \mathtt a+\mathtt b = [(a_x+b_x),(a_y+b_y),(a_z+b_z)] 将两个偏移量叠加,类似力的合力。 \mathtt a-\mathtt b = [(a_x-b_x),(a_y-b_y),(a_z-b_z)] 相当于加另一个向量的相反数。 方向 + 方向 = 方向 方向 – 方向 = 方向 点 + 方向= 点 点 –