自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(100)
  • 收藏
  • 关注

原创 Fisher-Yates洗牌算法解析

摘要:Fisher-Yates洗牌算法是高效公平的数组随机化算法,广泛应用于游戏开发等领域。其核心是从后往前遍历数组,每次将当前元素与随机位置的元素交换,确保每个元素出现在任意位置的概率均等(1/n)。该算法具有O(n)时间复杂度和O(1)空间复杂度,实现简洁高效。C#实现提供了数组和List两种版本,包括标准实现和性能优化方案,支持随机种子设置。数学证明表明该算法能保证完美的随机性,是Unity开发中随机化需求的首选方案。

2025-10-09 11:57:32 239

原创 了解一下啊面向对象的七大设计原则

本文深入解析面向对象设计的七大核心原则:单一职责、里氏替换、依赖倒置、接口隔离、迪米特法则、开闭原则和组合复用原则。通过Unity游戏开发的实战场景,提供了丰富的C#代码示例,展示如何在实际项目中应用这些设计原则。文章包含正反面对比案例、最佳实践指导和代码质量检查清单,帮助开发者编写高质量、可维护、可扩展的游戏代码。

2025-09-28 12:42:02 894

原创 Unity中多线程与高并发下的单例模式

本文深入探讨Unity多线程环境下单例模式的线程安全问题及解决方案。通过实际测试验证传统单例的不安全性,详细介绍四种线程安全实现方案:简单锁机制、双重检查锁定、静态初始化和Lazy<T>懒加载。

2025-09-01 23:35:46 1263

原创 单链表的基本原理与实现

单链表作为最基础的链式存储结构,是理解更复杂数据结构的重要基石。本文深入探讨单链表的设计原理、实现细节和操作机制,通过Java和C#的双语言实现,详细分析了链式存储相对于顺序存储的优势与局限性。文章涵盖了单链表的核心操作算法、时间复杂度分析以及实际应用场景,为开发者深入理解动态数据结构提供系统性指导。

2025-09-01 16:56:43 485

原创 Shader开发(十九)统一变量纹理亮度调节

本文系统阐述了基于统一变量的纹理亮度调节技术。从RGB颜色空间线性变换的数学原理出发,详细解析了GLSL向量分量访问机制和向量运算优化策略。通过完整的着色器代码实例,展示了从分量逐个操作到向量统一操作的技术进阶过程。

2025-09-01 12:42:09 693

原创 Shader开发(十八)实现纹理滚动效果

本文深入阐述了着色器中动态UV坐标操控的核心技术。从UV坐标扩展采样的理论基础出发,详细介绍了纹理环绕模式配置、时间统一变量传输机制以及基于数学变换的动态效果实现。通过完整的GLSL和C++代码示例,展示了从静态纹理映射到连续滚动动画的技术实现过程,为现代着色器特效开发提供了UV坐标操控的基础技术框架。

2025-08-29 19:02:17 1013

原创 实现动态数组

动态数组作为现代编程语言中最基础且重要的数据结构,其高效的实现直接影响应用程序的性能表现。本文深入探讨动态数组的核心实现机制,包括自动扩缩容策略、内存管理优化和边界检查机制,并提供Java和C#的完整实现代码。通过理论分析与实践相结合的方式,为开发者深入理解动态数组的底层原理提供系统性指导。

2025-08-29 16:22:25 402

原创 理解数组的基本原理

本文深入剖析数组的底层实现原理。从静态数组的连续内存布局和O(1)随机访问入手,分析增删查改操作复杂度:查改O(1)、末尾增删O(1)、中间增删O(n)。重点阐述动态数组扩容机制和均摊复杂度分析,结合Java和C#实现,为高效编程提供指导。

2025-08-28 13:08:22 723

原创 Shader开发(十七)着色器中的纹理采样与渲染

本文深入阐述了着色器中纹理映射技术的完整实现流程。从OpenFrameworks框架的数据结构设计出发,详细讲解了纹理数据的CPU到GPU传输机制、统一变量的纹理绑定方法以及GLSL中的采样器实现。文章重点分析了OpenGL坐标系统兼容性问题及其解决方案,提供了完整的代码实例和调试策略。通过系统性的技术解析,为读者构建了从图像文件到屏幕像素的完整纹理渲染知识体系。

2025-08-27 15:48:56 1042

原创 417. 太平洋大西洋水流问题(中等)题解

417. 太平洋大西洋水流问题(中等)题解

2025-08-22 12:46:20 866

原创 Shader开发(十六)UV 坐标介绍

本文深入阐述了UV坐标系统的理论基础和技术实现。文章从UV命名规范的历史背景出发,详细解析了标准化坐标范围[0,1]的定义特征和映射原理。通过完整的着色器代码实例,展示了UV坐标在顶点着色器和片元着色器中的传递机制,并介绍了OpenFrameworks的顶点属性布局规范。文章还提供了UV坐标可视化调试技术,为纹理映射的后续学习奠定了坚实的理论和实践基础。

2025-08-21 15:02:22 968

原创 Shader开发(十五)创建四边形

本文细介绍了四边形网格构建技术和索引缓冲区的实现原理。文章分析了纹理映射相比顶点颜色的技术优势,阐述了从三角形到四边形的几何转换方法,重点解析了索引缓冲区的顶点重用机制和内存优化效果。通过完整的代码实现和技术原理分析,为后续纹理映射和UV坐标系统的学习奠定了坚实的几何基础。

2025-08-19 15:04:40 774

原创 Unity开发中的浅拷贝与深拷贝

本文深入解析Unity开发中浅拷贝与深拷贝的工作原理和应用实践。从C#内存模型出发,详细阐述两种拷贝机制的本质差异:浅拷贝共享引用、性能优异但存在数据污染风险;深拷贝创建独立副本、安全可靠但开销较大。文章提供手动实现、序列化、反射三种深拷贝方案,结合GameObject克隆、ScriptableObject处理、游戏状态管理等实际场景,给出性能对比数据和选择策略,帮助开发者在数据安全与性能效率间找到最佳平衡点。

2025-08-18 15:16:23 975

原创 Shader开发(十四)介绍一下统一变量(Uniform Variable)

本文详细介绍了统一变量(Uniform Variable)的概念、原理和应用。文章涵盖了uniform与顶点属性的对比分析、GPU内存分布机制、setUniform函数族的用法。通过纯色三角形渲染实例和交互式颜色实验,读者可以掌握高效的着色器数据传递技术,理解现代GPU编程的核心优化策略。

2025-08-18 13:21:04 668

原创 Shader开发(十三)理解片元插值

本文深入解析了片元插值的工作原理和技术机制。文章涵盖了重心坐标插值算法、GPU硬件加速特性、线性混合规则。通过彩虹三角形实例分析,读者可以理解GPU如何从3个顶点生成数万个平滑渐变的片元,掌握现代计算机图形学的核心技术,为后续uniform变量学习奠定基础。

2025-08-15 12:19:31 605

原创 429. N 叉树的层序遍历(中等)题解

LeetCode 429. N 叉树的层序遍历 - 详细题解

2025-08-13 16:46:53 630

原创 Shader开发(十二)用顶点属性添加颜色

本文详细介绍了顶点属性和颜色插值技术的应用。文章涵盖了顶点颜色属性的添加方法、布局限定符的使用、着色器间数据传递机制,以及GPU片元插值的工作原理。通过创建彩虹渐变三角形的实战项目,读者可以掌握重心坐标插值、GLSL语法和调试技巧,理解从单色到多彩渐变的技术进阶,为后续纹理映射和高级特效开发奠定基础。

2025-08-13 15:19:01 741

原创 Shader开发(十一)在项目中使用着色器

本文详细介绍了如何在openFrameworks项目中集成和使用自定义着色器。文章涵盖了ofShader类的使用方法、着色器文件加载流程、begin/draw/end渲染机制,以及完整的项目代码结构。通过实际案例展示了从着色器编写到最终渲染红色三角形的完整过程,并提供了常见问题调试和性能优化建议,帮助读者掌握着色器开发的完整工作流程。

2025-08-13 09:00:00 840

原创 Shader开发(十)编写第一个片元着色器

本文详细介绍了片元着色器的编写方法和工作原理。文章涵盖了片元概念、GLSL的out关键字用法、RGBA颜色模型,以及片元着色器与顶点着色器的区别。通过创建输出红色的简单片元着色器,读者可以掌握像素颜色控制的基础技术,理解现代OpenGL中自定义输出的灵活性,为后续着色器程序组合和高级特效开发奠定基础。

2025-08-12 11:53:46 951

原创 Mac上安装和配置MySQL(使用Homebrew安装MySQL 8.0)

本文介绍在macOS 15.6上使用Homebrew安装配置MySQL 8.0:涵盖安装、环境变量、启动服务、安全加固与常用命令,帮助快速上手。

2025-08-08 15:07:11 952

原创 C#字典Dictionary的内部实现原理

本文深入解析C# Dictionary的内部实现原理,从基本概念入手,详细讲解哈希表核心机制、内部数据结构、工作流程和哈希冲突处理。重点阐述了链地址法解决冲突、动态扩容机制,并分析了时间复杂度和性能优化策略。

2025-08-07 16:09:55 1130

原创 Shader开发(九)编写第一个顶点着色器

本文详细介绍了编写第一个顶点着色器的完整过程。文章涵盖了GLSL语法基础、着色器文件组织、版本声明、输入输出变量、向量数据类型等核心概念,重点解析了归一化设备坐标系统与屏幕像素坐标的区别。通过实战代码示例,读者可以掌握顶点着色器的工作原理和坐标变换技术,为后续片元着色器开发奠定基础。

2025-08-07 15:12:23 972

原创 Shader开发(八)创建第一个三角形

本文详细介绍了在openFrameworks中创建第一个三角形网格的完整流程。文章涵盖了ofMesh类的使用、GLM向量库的应用、OpenGL屏幕坐标系统的特点,以及从setup()到draw()的渲染循环机制。通过实战代码和交互实验,读者可以掌握网格创建、顶点操作和坐标变换的基础知识,为后续编写自定义着色器奠定坚实基础。

2025-08-06 16:07:07 736

原创 Shader开发(七)创建第一个Shader项目

本文是Shader开发实战系列的第一篇实践教程,详细介绍了如何使用openFrameworks创建第一个Shader项目。文章涵盖了openFrameworks的选择理由、Windows平台的完整安装配置流程、OpenGL 4.1版本升级方法,以及项目结构解析。通过项目生成器工具,读者可以快速搭建Shader开发环境,为后续的网格创建和着色器编程奠定基础。适合Shader开发初学者跟随实践。

2025-08-05 17:27:54 1070

原创 2407. 最长递增子序列 II(困难)题解

本文详细解析了LeetCode 2407题,这是经典最长递增子序列问题的变种,增加了相邻元素差值不超过k的约束。由于数据规模达10^5,朴素O(n²)动态规划会超时,需要使用线段树优化。核心思路是定义dp[v]表示以值v结尾的最长子序列长度,对每个元素查询区间[num-k, num-1]内的最大dp值进行状态转移。线段树支持O(log n)的区间最大值查询和单点更新,总时间复杂度O(n log maxVal),有效解决了大规模数据的效率问题。

2025-08-04 00:27:22 827

原创 什么是树状数组

树状数组(Fenwick Tree)是一种基于二进制表示的高效数据结构,专门用于处理动态前缀和问题。它利用 lowbit(x) = x & -x 操作,将数组元素组织成树形结构,每个节点存储特定区间的和。核心操作包括单点更新和前缀和查询,时间复杂度均为 O(log n)。相比线段树,树状数组实现更简洁,代码量更少,但功能主要局限于前缀和相关问题。通过 i += lowbit(i) 和 i -= lowbit(i) 实现高效的父子节点跳跃,广泛应用于算法竞赛和数据处理场景。

2025-08-03 14:05:08 913

原创 了解一下x & -x

x & -x的原理和应用

2025-08-03 12:57:03 479

原创 了解一下线段树

线段树是一种二叉树结构,用于存储和处理区间相关的信息。

2025-08-02 15:50:52 403

原创 Shader开发(六)什么是着色器

在计算机图形学的奇妙世界中,**着色器(Shader)** 是驱动视觉奇迹的核心力量。从游戏中逼真的光影效果,到电影动画中细腻的材质表现,再到虚拟现实中的沉浸式体验,着色器无处不在。

2025-08-01 23:43:08 918

原创 Shader开发(五)什么是渲染管线

在计算机图形学中,**渲染管线**(Rendering Pipeline)是一个至关重要的概念。它描述了图形处理单元(GPU)将3D网格数据转换为屏幕上可见图像的完整流程。对于shader开发者而言,深入理解渲染管线的工作原理是必不可少的,因为着色器正是在这个管线的特定阶段发挥作用的核心程序。

2025-07-31 23:57:44 787

原创 Shader开发(四)计算机图形学中的颜色定义

在图形编程的世界中,颜色不再是艺术家调色板上的感性表达,而是需要精确数字化表示的数据。无论是shader编程还是图形API调用,正确理解颜色的数字化表示方法是每个图形开发者的基础技能。本文将深入探讨计算机图形学中颜色定义的核心概念。

2025-07-29 22:25:52 475

原创 300. 最长递增子序列(中等)

LeetCode 300. 最长递增子序列 - 详细题解

2025-07-29 15:39:45 407

原创 Shader开发(三)向量入门

向量是计算机图形学中最基础也是最重要的数学概念之一。无论是在shader编程中处理顶点位置,还是计算光照效果,向量都扮演着核心角色。对于图形开发者来说,深入理解向量不仅是技术需求,更是创造视觉奇迹的基础。

2025-07-25 13:32:57 925

原创 Shader开发(二)什么是网格

网格是3D图形的基础,理解它的组成和原理能帮助你更好地掌握图形编程或建模技术。

2025-07-22 19:39:22 436

原创 Shader开发(一)什么是渲染

渲染技术是现代计算机图形学的核心,理解其基本概念是深入学习shader编程和图形优化的重要基础。随着硬件技术的发展和新算法的出现,渲染领域仍在快速演进,为开发者提供了更多创新的可能性。

2025-07-21 14:44:12 654

原创 了解一下Unity Object的内存管理机制

通过理解 UnityEngine.Object 的内存管理机制和最佳实践,开发者可以有效避免内存泄漏,优化游戏性能。

2025-07-16 13:33:44 729

原创 LeetCode 541. 反转字符串 II - 题解

LeetCode 541. 反转字符串 II - 题解

2025-07-01 19:19:50 167

原创 LeetCode 344. 反转字符串

LeetCode 344. 反转字符串详解

2025-06-30 18:10:55 169

原创 了解一下Unity AssetBundle 的几种加载方式

Unity 的 AssetBundle 系统提供了多种加载方式,以满足不同场景下的资源管理和性能需求。

2025-06-26 13:46:58 1314

原创 6.6. 区间覆盖问题

6.6. 区间覆盖问题 - 详细题解

2025-06-25 12:40:00 892

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除