- 博客(36)
- 收藏
- 关注
原创 [学习笔记][Unity3D网络游戏实战]客户端基本网络框架(重制版)
此项目基于unity,使用c#语言构建一个通用的简单的客户端框架,比较简陋但是易懂。
2024-09-24 18:21:55
1138
2
原创 分享:我的服务器搭建思路与实现
有一台可以公网访问的服务器能做很多事:搭建个人网站、运行游戏服务器、提供 Linux 实验环境等。作为计算机专业的学生,没有一台自己的服务器可不太行。但要把服务器搭建得既好用又靠谱,过程中会遇到不少问题需要解决。
2025-11-13 22:38:09
453
原创 Windows平台编译C++项目都有哪些方法?—— Windows 平台 C++ 项目开发解决方案
本文介绍了Windows平台C++开发的主流解决方案。主要分为集成开发环境(IDE)和构建系统+编译器两类方案。IDE推荐Visual Studio 2022(Windows原生支持)和CLion(跨平台);构建系统推荐Xmake/CMake结合MinGW/MSYS2(类Unix环境)或MSVC(Windows原生)。文章详细对比了Xmake和CMake的特性差异,并解析了MinGW与MSYS2的区别,同时提供了MSVC工具集的安装和使用指南,强调使用官方命令提示符的重要性。各方案均给出适用场景和优缺点分析
2025-07-28 10:12:27
917
原创 理解 `.sln` 和 `.csproj`:从项目结构到构建发布的一次梳理
在 .NET 开发中,.sln 和 .csproj 文件是项目结构和管理的关键。.sln 文件作为解决方案,用于管理多个项目(.csproj),而每个 .csproj 文件则代表一个独立的编译单元,如前端、后端或共享库。项目之间可以通过 <ProjectReference> 进行引用,确保代码复用和类型安全。构建和发布时,.csproj 是核心入口,而 .sln 仅用于组织项目结构。通过合理使用这些文件,开发者可以实现模块化、可维护性强的项目架构,特别是在大型项目中,这种设计尤为重要。
2025-05-09 17:49:06
1286
原创 从零开始用 AI 编写一个复杂项目的实践方法论
以上流程是我个人实践中总结的一套文档驱动 AI 编码法,欢迎参考。如你有其他想法或补充建议,欢迎交流!
2025-05-08 16:47:03
899
原创 【项目分享】解决家用公网ip动态变换问题(轻量python脚本工具)(带源代码仓库)
家庭宽带用户的公网IP地址会定期变化,若需要远程访问家庭网络设备(如NAS、摄像头等),IP变动可能导致连接中断。 本工具通过爬虫技术自动从路由器管理页面抓取公网IP,实时监控变动,并通过邮件通知用户,解决「IP变化却不知情」的痛点。
2025-04-14 15:18:02
828
原创 用于解决个人使用的公网ip动态变化问题的解决方案
systemctl服务配置问题,原先ai说需要使用虚拟屏幕环境,但是实际不需要。我的网关是TP-Link电信的,可能对于不同平台的网关设备的管理界面,需要特定的爬取方法,请更具自己的设备做个性化调整。在服务器上部署一个脚本,每隔一段时间登陆本地网关控制网站爬取公网ip信息,如果发生变化,就通过邮箱发送给我。我设想的进一步是发生变化就自动配置DDNS,但是由于我暂未使用域名,所以暂时没完成这个功能。于是我手动下载了对应的驱动,写明了路径,解决此问题。一个从网关管理界面拉取信息的工具。
2025-04-05 15:51:34
745
原创 【Javascript】一等公民——函数
在 JavaScript 中,函数可以赋值给变量、作为参数传递、作为返回值返回,甚至可以像对象一样拥有属性和方法。这种特性使得 JavaScript 非常灵活,适合函数式编程风格。
2025-02-13 08:52:23
389
原创 OpenGL的基础光照知识
面片着色的环面是通过在顶点着色器和片段着色器中将 flat 插值限定符添加到相应的法向量属性声明中得到的。对模型中每个多边形的一个顶点进行光照计算,然后以每个多边形或每个三角形为基础,将计算结果的光照值复制到相邻的像素中。位置光在 3D 场景中具有特定位置,用以体现靠近场景的光源,位置光的效果取决于照射角度;使用L+V得到角平分线向量,再将其点乘法向量N,得到夹角,夹角的值的2倍和V与反射角的夹角相等。光照计算是按像素而非顶点完成的,其中 N 和 L 在顶点着色器中进行计算,并在栅格化期间插值。
2025-02-12 23:17:39
660
原创 OpenGL读取与构造3D模型
一些模型使用索引定义三角形顶点数组:一个数组计算每个切片的顶点位置,索引数组:为三角形关系数组,通过整形引用索引到顶点数组的元素上。这是为了节省内存因为顶点坐标数据,需要按照正确的顺序,并且1个四边面需要2个三角面,1个三角面需要3个顶点。所以需要通过利用索引来构造真正的顶点值数组。在真正构造顶点数据的时候,通过遍历索引遍历顶点来构造真正需要的顶点数据。i++) {
2025-02-12 23:16:36
572
原创 【学习笔记】OpenGL的基础纹理贴图相关知识
在 OpenGL 中,可以通过将 GL_TEXTURE_MIN_FILTER 参数设置为所需的缩小方法来选择多级渐远纹理的采样方法。使用多级渐远纹理贴图(mipmapping)技术可以在很大程度上校正这一类的采样误差伪影,它需要用各种分辨率创建纹理图像的不同版本。可以通过在包含纹理坐标的顶点属性的声明中添加关键字“noperspective”来禁用 OpenGL 的透视校正。在没有纹理加载库(如 SOIL2)的情况下加载和使用纹理时需要了解的一些细节。思考如何将纹理的坐标和几何体的顶点相对应,并构造。
2025-02-07 09:16:40
994
原创 【学习笔记】OpenGL管理3D图形数据
画一个三棱柱先AI生成一波// 底面三角形 (z = -1)-1.0f, -1.0f, -1.0f, // 顶点 01.0f, -1.0f, -1.0f, // 顶点 10.0f, 1.0f, -1.0f, // 顶点 2// 顶面三角形 (z = 1)-1.0f, -1.0f, 1.0f, // 顶点 31.0f, -1.0f, 1.0f, // 顶点 40.0f, 1.0f, 1.0f, // 顶点 5// 侧面 1 (底面顶点 0, 1 到顶面顶点 3, 4)
2025-02-06 11:33:51
837
原创 【学习笔记】计算机图形学的几何数学基础知识
点:直接使用变换矩阵。普通向量:直接使用变换矩阵。法向量:通常使用逆转置矩阵,除非变换矩阵是正交矩阵。正交矩阵与它的转置相乘=单位矩阵,转置:把行列互换逆矩阵:AB=BA=E(单位矩阵)
2025-02-04 18:43:34
1180
原创 【开发日志】ASP.NET Core Minimal APIs开发日志
报错信息,这是我在提交注册请求时,后端报的错,看起来是在生成JWT Token时出现了异常,导致注册API无法正常执行。这个问题是密钥长度不足导致的,解决方法是在appsettings.json中添加密钥配置,密钥长度至少为256位。报错信息,这是在注册API中,生成JWT Token时出现的异常,看起来是密钥长度不足导致的问题。报错信息,这是在注册API中,生成JWT Token时出现的异常,看起来是密钥长度不足导致的问题。发现在生成时,调用了配置文件,但是我却没有正确的配置密钥,导致了这个问题。
2024-12-16 08:33:20
1237
原创 【游戏设计模式】【行为型模式】子类沙盒
子类沙盒是一种将操作封装在基类中,然后在子类中组合这些操作的方法。这样可以减少子类的耦合,但是也会导致基类变得庞大。可以通过辅助类再次封装方法,或者通过构造函数传递、构造初始化方法传递、状态静态化、服务定位器等方法来传递实例。
2024-11-18 18:29:10
738
原创 【游戏设计模式】状态模式
状态模式是一种行为设计模式,它允许对象在内部状态发生变化时改变自己的行为。通过将不同状态的行为封装成独立的类,这样在切换状态时可以更灵活地替换当前状态对象,从而实现行为的变化。每个状态类实现具体的状态行为。IdleState(空闲状态)和RunState(跑动状态)。状态模式通过将不同状态封装为独立对象,使对象行为随着状态变化而改变,避免了大量条件判断,代码更清晰。它适用于各种具有有限状态的系统,但在状态关系较复杂的情况下,可能需要借助更复杂的AI系统。
2024-11-03 09:45:55
967
原创 【Unity Urp】实现Billboard广告牌效果详解
Billboard 是一种图形技术,用于使二维平面对象(如纹理)始终面向摄像机,从而在三维场景中实现“始终朝向玩家”或“始终正面显示”的效果。这种效果在游戏开发和可视化中广泛应用于显示树木、云朵、UI元素、敌人血条等,使其看起来总是正对着摄像机,即便摄像机移动或旋转。
2024-11-02 10:14:21
2345
原创 【学习笔记】【CPP】当指针指向nullptr的时候所引发的问题
nullptr是一个关键字,代表空指针常量。它在 C++11 中引入,用于表示指针不指向任何有效对象或地址。使用nullptr可以避免一些类型安全问题,因为它的类型是,可以被隐式转换为任何指针类型。它比传统的NULL更安全,后者通常定义为0,在某些情况下可能导致类型混淆。new是一个运算符,用于在堆上动态分配内存。使用new时,系统会在运行时分配所需的内存,并返回指向该内存块的指针。new操作符通常与构造函数一起使用,用于创建对象并初始化它们。使用new。
2024-10-30 19:35:20
347
原创 【Unity】2D横板-如何实现激光与激光反射效果
我需要实现人物可以朝着鼠标方向发射激光,并在特定的物体上,可以发生反射,而且可以检测到激光打到了按钮。
2024-10-27 09:47:08
1078
原创 【学习笔记】【计算机图形学】GAMES101-现代计算机图形学入门 - 05 Rasterization 光栅化 1 Triangles
将 -1,1 的投影空间,变换到[0,with] x []0,height]的屏幕空间。LED 发光二极管 Light emitting diode array。把屏幕空间的顶点构成的三角形,化为一个个像素,称为光栅化过程。利用可是角度,可计算出长方形的高低,再利用比例可计算长宽。我们定义的屏幕空间是,左下角为0.0,如图所示。判断一个像素与三角形的关系,进行光栅化。光栅化Raster:把图片画在屏幕上。Triangle Mesh 三角网格。将内存内的区域显示在显示器上。锯齿:像素化必然导致的问题。
2024-07-26 08:32:47
432
原创 【学习笔记】【计算机图形学】GAMES101-现代计算机图形学入门 - 04 Transformation Cont
我们发现,旋转矩阵,如果把角度从顺时针转化到逆时针,得到的矩阵和矩阵的转置矩阵相同。通过定义,我们又发现,反方向旋转的矩阵和矩阵的逆是相等的。将相机和物体同时切换到相机在默认(位置在原点,up在Y,方向朝-Z轴)点的空间当中;利用在near面的点在变换后,任然不变的性质,用near面的特殊点,补全透视矩阵。课后问题:中间部分的点在经过压缩后,Z坐标的变换,向近处还是远处,还是不变。透视投影矩阵 = 正交投影矩阵 乘 透视投影到正交的压缩变换矩阵。转置矩阵和逆矩阵相等的矩阵,也叫做正交矩阵。
2024-07-26 08:31:39
381
原创 【学习笔记】【计算机图形学】GAMES101-现代计算机图形学入门 - 03 Transformation 变换
Trade off:为了方便,引入一个新的概念,虽然解决了一个问题,但是会带了另一个方面的副作用。如:向量+向量=向量,坐标-坐标=向量,坐标+向量 = 坐标,(坐标+坐标=坐标的中点)如图。如果没有齐次坐标,平移变换,无法通过二维矩阵直接达成,不属于线性变换。所有为了方便和统一变换,引入齐次坐标,即为二维坐标添加了第三个维度。不仅如此,多出来的一维齐次坐标后,向量与坐标进行加减后,仍然。变换满足结合律,所以可以用一个矩阵,来表示一个复杂的变换。2d Transform 2D变换。
2024-07-23 20:15:24
296
原创 【学习笔记】【c#】对于协程与异步的深度理解
我在网上看到过相关的对于协程的理解,就是在每次执行代码时候,判断协程条件是否达成,达成就继续执行回调的方法(unity是继续执行接下来的代码,unity为什么一定用enumerator 类型作为协程的类型,什么是enumerator 作为返回值的方法?这么说,async/await 是属于多线程范畴,以同步的代码形式,来实现异步编程操作。阻塞操作:长时间的操作(如 I/O 操作)会阻塞线程,导致整个程序暂停,直到操作完成。非阻塞操作:长时间操作可以在单独的线程中执行,不会阻塞主线程。
2024-07-19 14:12:49
1022
原创 【学习笔记】【游戏美术】游戏视觉特效的艺术准则——来自Riot Games和暴雪的经验分享
本文内容来自Riot Games《英雄联盟》项目的Jason和来自暴雪《炉石》项目的Hadidjah在GDC上分享的一期名为《视觉特效的艺术准则》的讲座。在添加更多色彩让画面不那么平的时候,应该选用最主要的色彩,而不是使用大量的色彩(这会导致画面混乱)。调整特效节奏,做到调整玩家感觉,营造打击感(感觉这个图,就像音乐的节奏一般,表现画面的节奏)【【青幻译制】游戏视觉特效的艺术准则——来自Riot Games和暴雪的经验分享】用强度图(吸引你注意力的强度图,来表现画面变换,以展现节奏)伤害和治疗的节奏区别。
2024-07-19 13:14:49
628
原创 [学习笔记][C#]委托与事件的区别
委托是一种,表示对具有特定参数列表和返回类型的方法的引用。它可以看作是一个,允许你在运行时。委托可以绑定多个方法,这些方法会按顺序被调用。委托示例事件是基于,用于多播委托并限制其访问权限。事件在类的外部只能被触发(调用)和订阅(注册/取消注册),不能直接赋值或清空。这种机制增加了安全性和封装性,确保事件只能由定义它的类来触发。事件示例。
2024-06-30 20:31:41
406
原创 [服务器搭建]Forge服务端在linux Debian上搭建复盘过程
这个库是某些图形环境依赖的库,即使您不使用图形界面,某些程序仍然可能需要它。之后字运行使用命令java -Djava.awt.headless=true -jar forge-1.12.2-14.23.5.2859.jar nogui。问问chat,说Minecraft 服务器试图连接到 X11 窗口服务器,但在无头环境中不需要图形界面。
2024-06-12 01:35:02
1341
5
原创 [学习笔记][设计模式]单例模式
比如说我们在系统运行时候,就需要加载一些配置和属性,这些配置和属性是一定存在了,又是公共的,同时需要在整个生命周期中都存在,所以只需要一份就行,这个时候如果需要我再需要的时候new一个,再给他分配值,显然是浪费内存并且再赋值没什么意义,所以这个时候我们就需要单例模式或静态方法去维持一份且仅这一份拷贝,但此时这些配置和属性又是通过面向对象的编码方式得到的,我们就应该使用单例模式,或者不是面向对象的,但他本身的属性应该是面对对象的,我们使用静态方法虽然能同样解决问题,但是最好的解决方案也应该是使用单例模式。
2024-05-09 22:23:10
569
1
原创 [学习笔记][设计模式]桥接模式
如此,变可以使用组合的方式表现一种抽象的2个特质的多种变体,并且每次添加其中一种的新变体时,只需要再写一个新的类继承于抽象的实现变可以了,在具体调用的使用,通过组合实例的方式,把所需要的实例表现出来。将一种带有多个维度性质的物体抽象,如果只抽象成一种基类,然后通过继承把一种特质分离开,再继承添加分离一种特质,这将会导致继承类的规模爆增,如果后续如果一种特质多了一种变体,将会导致大量改动,所有使用继承的方式是不合适的。比如在炮塔基座上有武器,有防御外壳,有能源,共同构成炮塔。多个组合,而不满足于二者桥接。
2024-05-09 22:16:53
979
1
原创 [学习笔记][算法]往届低程真题(缺)
因为24*60-1)*1.5e6=2158500000>2147483647 超出了int的范围,所以用long long代替int。然而,这个同步可能导致性能损失,因为 C++ 的流库与 C 标准库之间的同步可能是相对昂贵的。在设置数组时,将遍历的起始点i=0变为i=1后,没有考虑清楚数组的范围,导致数组越界不够大。默认情况下,C++ 的输入输出流与 C 标准输入输出流是同步的,这就意味着每次调用。在竞赛编程等需要高效输入输出的场景下,关闭同步流和使用。是一个常见的优化手段,这样可以提高输入输出的速度。
2024-01-08 12:08:40
539
原创 [学习笔记]蓝桥题2023/12/10
反思:应在审题时,考虑数据规模,预估算法解决的可能方法范围,注意题目中,可能隐藏的数学规律,从而巧妙的解决问题。知识点:1.质数的求法 2.最大子数组(固定大小)的和 3.前缀和与差分。我的问题:暴力解法未考虑数据大小,导致数据过大时,无法正常输出结果。巧妙的应用了数学规律,直接输出所以可能结果。反思:应加强了解基础算法,并多刷题见题。我的问题:缺少基础算法知识。
2023-12-10 21:50:09
113
1
原创 二位数组作为参数传递
td::shared_ptr<int> sharedPtr 可共享一块内存的智能指针。std::unique_ptr<int> uniquePtr 智能指针的声明。了解到动态内存规划知识与智能指针。td::make_unique<int>(42) 创建;比赛中,无法正确的讲不确定大小的二位数组作为参数传递。1,明确第二维度的大小如(a[][3])2,指针参数(int *a[3])// 动态分配一个二维数组。// 输入二维数组的元素。// 释放动态分配的内存。详细可查看他人的相关文章.了解到智能指针的使用。
2023-11-26 16:09:49
80
1
灵感数据库管理系统-前后端分离Web-DOTNET Core开发
2025-02-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅