- 博客(208)
- 资源 (8)
- 收藏
- 关注
原创 网格纹理采样算法
本文介绍了一种将二维纹理数组渲染到屏幕的方法。由于无法直接将相机渲染结果存入纹理数组,作者采用将多张纹理拼接成网格纹理的方案,并配合索引纹理存储每个像素对应的纹理下标。文章重点阐述了在Shader中如何通过索引纹理定位到网格纹理的具体子图:先将归一化索引乘以行数分离出行列信息,再结合原始UV坐标计算出最终采样位置。该方法通过优化计算步骤,仅用一行代码即可完成行列坐标转换,显著提升了渲染效率。文中提供了完整的Shader代码实现,展示了如何从网格纹理中正确采样RGB通道对应的像素值。
2025-08-31 00:11:16
867
原创 Unity自定义Inspector面板之使用多选框模拟单选框
摘要:Unity中可通过继承Editor类自定义Inspector面板,但缺少原生单选框支持。文章介绍了使用Toggle模拟单选框的方法:先用bool变量实现双选一(需处理点击已选项的问题),后用int变量扩展至多选一(更稳定)。核心思路是让多个Toggle共享状态变量,点击时更新变量值。最终方案能实现真正的单选效果,且支持任意数量选项。(149字)
2025-08-27 10:26:35
308
原创 贝叶斯定理 vs 条件概率
贝叶斯定理是概率论中的重要概念,它描述了条件概率之间的关系。基础公式为P(A∩B)=P(A)×P(B|A),即联合概率等于单独概率乘以条件概率。贝叶斯公式变形为P(B|A)=[P(B)×P(A|B)]/P(A),揭示了先验概率(P(B))、似然度(P(A|B))和后验概率(P(B|A))之间的关系。该定理可用于证据更新,如通过天气观测调整是否带伞的决策(示例中乌云出现使下雨概率从50%升至75%)。贝叶斯定理在分类、预测等实际问题中有广泛应用,体现了通过新信息不断修正概率估计的思想。
2025-08-08 16:59:32
723
原创 概率密度 vs 正态分布
本文探讨了概率密度与概率的区别与联系。作者通过高尔顿板实验类比正态分布,指出概率密度本质上是样本数量的增长率而非概率本身。文章强调,正态分布的函数值代表的是样本分布规律,其积分能表示概率是归一化带来的数值巧合。通过离散到连续的转化过程,作者解释了概率密度作为样本数量增长率的数学定义,并说明其函数值需乘以微小区间宽度才能得到实际样本数量或概率增量。最终指出概率密度函数表示的是概率增长率,而非直接的概率值。
2025-08-08 16:15:22
578
原创 Elixir 协议与行为
Elixir中的协议(protocol)和行为(behaviour)是实现多态的两种机制。协议基于数据类型实现多态,通过defprotocol定义接口,用defimpl为特定类型提供实现。行为则针对模块,使用@behaviour和@callback定义模块接口,确保实现模块符合规范。两者的关键区别在于:协议作用于数据类型,行为作用于模块。协议允许扩展内置类型,而行为更适用于模块间的接口约定。 (150字)
2025-08-01 17:54:19
805
原创 Unity相机控制
本文探讨了如何实现相机视角控制,重点解决锁定Z轴旋转时出现的镜头歪斜问题。作者首先分析常规旋转控制方法存在的缺陷,包括欧拉角解算导致的视角异常,然后尝试使用世界坐标系旋转,但发现仍无法完全解决问题。最终提出通过记录初始欧拉角并手动更新旋转的方案,同时引入Y轴方向校验机制,确保相机在任何角度下都能保持"镜头朝上"的效果。文章通过代码示例和GIF动图直观展示了不同方案的优缺点,为开发者提供了实用的相机控制实现思路。
2025-08-01 17:45:52
1008
2
原创 WindowsTerminal美化
本文介绍了Windows终端美化配置方法。主要内容包括:1)下载安装Fira Code字体并设置为终端字体;2)通过安装包或官网教程安装OhMyPosh工具;3)创建PowerShell配置文件并设置主题,可更换多种官方主题样式;4)最后修改执行权限完成配置。整个流程简洁明了,适合想要美化终端界面的用户。
2025-06-28 16:43:57
443
原创 Ubuntu20.04离线安装Realtek b852无线网卡驱动
在Ubuntu 20.04安装过程中遇到无线网卡驱动问题,需手动安装Realtek RTL8852BE驱动。首先通过lshw和lspci命令确认网卡型号,从GitHub下载源码并编译安装。安装前需解决gcc、make等依赖问题,并关闭BIOS安全启动。安装完成后需修复因离线安装导致的库版本问题。此外还提供了有线网卡驱动安装方法。整个过程涉及硬件识别、驱动编译、依赖管理和系统修复,展现了Linux环境下硬件适配的典型挑战和解决方案。
2025-06-28 16:42:05
1355
原创 Mix工程的运行方式
这篇文章总结了Elixir工程管理工具Mix的运行方式,主要包括: 创建方式:mix new创建库,mix new --sup创建带监督树的应用 运行方式: iex -S mix: 开发调试时在交互式Shell中运行 mix run: 运行应用,默认启动入口是Application行为中的start函数 自定义Mix任务:将代码放在lib/mix/tasks/目录下,通过mix命令调用 打包发布方式: Escript:打包为命令行程序,需要escript执行 Release:构建自包含的发布包,包含Erla
2025-06-27 12:06:34
1336
原创 Go和Elixir极简HTTP服务对比
摘要:本文对比了Go和Elixir两种语言实现原生HTTP服务的过程。在Go中,标准库提供了简洁的网络服务实现,只需几行代码即可完成;而Elixir则需要依赖Plug库,使用Mix工具创建项目并添加相关依赖。两者在处理HTTP请求的方式上有明显差异:Go使用接口实现处理器,Elixir通过Plug行为定义处理逻辑。最新Go 1.22版本增强了路由功能,支持方法匹配和路径参数,而Elixir则通过Plug.Router提供路由功能。两种语言在设计理念和实现方式上各有特色,体现出不同的编程范式。
2025-06-27 12:04:24
1096
原创 编译UltraleapTrackingWebSocket
示例代码看起来很简单,但是要实际运行起来还需要一些条件。在示例代码中,我们看到它连接的是6437端口,这其实是一种比较老的 Leap Motion 使用方式了,6437实际上是一个 websocket 端口,Leap Motion 驱动会通过这个端口将数据帧发送给连接的客户端,这一功能是给LeapJs库使用的,让网页端也能使用 Leap Motion,但是自从5.0版本以后,这一功能就从 Leap Motion SDK 中删除了。LeapJs。
2025-06-26 16:59:53
951
2
原创 Qt 5.15.2编译安卓QGC指南
编译安卓版QGC的血泪史:作者多次尝试在不同Qt版本(6.8.2/5.12.9/5.15.2)下编译均告失败,最终通过Qt 5.15.2成功。过程曲折包括:Qt版本兼容问题、安卓环境配置困难、磁盘空间不足等。关键解决步骤:使用阿里云镜像安装Qt 5.15.2、配置JDK 11、正确设置Android SDK路径。文章详细记录了开发环境配置的坑与解决方案,为安卓版QGC编译提供了宝贵经验。
2025-06-26 13:48:17
1672
8
原创 APM 仿真遥控指南
地面站开发了一段时间了,由于没有硬件,所以一直在 APM 模拟器中验证。我们已经实现了 MAVLink 消息接收和解析,显示无人机状态,给无人机发送消息,实现一键起飞,飞往指定地点,降落,返航等功能,本期我们来看看如何在模拟器中实现对无人机的遥控。
2025-03-22 23:11:59
1392
原创 PostgREST 权限篇
PostgREST 本身并没有权限管理的功能,而是将权限验证下放到了数据库层,通过数据库的角色来控制用户访问数据的权限,而 PostgREST 唯一要做的事就是获取每个请求发起者的角色,然后切换到这个角色再去执行 SQL,成败就看这个角色所具备的权限了。为了安全的获取用户的角色,PostgREST 使用了 JWT 来传递角色信息。但是 PostREST 只能解析 JWT token,用户登录以及如何生成 jwt token 需要我们自己实现。在中,我们创建了todos。
2025-03-19 15:00:38
1091
原创 PostgREST 入门篇
PostgREST 是一个为 PostgreSQL 数据库提供 REST API 的后端服务, 是用 Haskell 开发的开源软件,源代码非常值得学习。有了 PostgREST,搭配 PostgreSQL,只要建好表,加上一个简单的配置,就可以拥有一个 REST API 后端,简直不要太爽。
2025-03-14 13:04:47
962
原创 使用easytier远程内网电脑
最近换了个工作地,需要用自己的笔记本去远程另一台内网主机,因为我的笔记本和要远程的主机在不同的局域网内,无法直连,所以前一段时间一直用的向日葵远程桌面进行远程。用了一段时间实在受不了了,要强制登录,还到处弹广告,右下角浮窗也关不掉,加上最近连接也不是很稳定,加上工作的问题,搞得心情实在是很糟糕,一怒之下我决定自己搭建一个vpn连接,用Windows原生的远程桌面。顺便一提,之前写的这篇说的就是向*葵。搭建VPN需要一台公网电脑做为跳板,我没有可以公网访问的电脑。于是我找到了。
2025-03-12 10:45:07
3253
1
原创 Go加spy++隐藏窗口
除了使用 spy++ 去获取句柄,还可以直接在 Go 中调用 Windows 的相关 API 获取窗口句柄,比如获取活动窗口句柄,获取当前鼠标下的窗口句柄等。更进一步,窗口句柄可能会变,这里的方法其实是一次性的。但是窗口的类名一般不会变,我们可以记录下要隐藏窗口的类名,然后定期检查,只要窗口出现就给它隐藏掉。思路很简单,用 spy++ 找到要隐藏的窗口的句柄,然后调用 Windows 的。最近发现有些软件的窗口就像狗皮膏药一样,关也关不掉,一点就要登录,属实是有点不爽了。啊,世界终于清净了。
2025-03-06 18:12:14
454
原创 关于 mavproxy 中消息签名的补充
在的最后一节中,我介绍了如何在 mavproxy 中启用消息签名,因为我在开发一个地面站的项目,在没有硬件的情况下,只能先用模拟器来测试。但是当我在 mavproxy 中设置了签名密钥之后,地面站这边解析消息签名时却出现了问题,经过一番斗智斗勇,发现问题并不简单,所以在此扒一扒其中的细节,作为前面文章的补充,因为那篇文章也修改好几次了,因此还是决定单开一篇,专门讲讲关于消息签名的问题。
2025-02-24 18:46:26
743
5
原创 解决 ** (Mix.Error) Can‘t continue due to errors on dependencies
这个问题在最新版的 ElixirLS 插件中任然存在,只要我修改了依赖库版本就会出现。好在并不影响运行,如果不觉得它碍眼的话,其实也可以不用管它。最新在 VSCode 中开发 elixir 程序遇到了这个问题,当我修改依赖库版本的时候它就会出现,但是程序本身是可以正常编译运行的。,号称是下一代 Elixir 语言服务器,这是一个社区开源项目,大家可以尝试或者参与贡献一下。这其实是 ElixirLS 插件的问题,可以参考这个。按照 issues 里的讨论,删掉。之后确实能解决这个问题。
2025-02-18 11:49:26
165
原创 Ardupilot模拟器配置与使用基础
我们介绍了无人机模拟环境的搭建,并在 MAVProxy 控制台通过命令让无人机飞了起来。这一篇让我们来继续探索 MAVProxy 的功能。
2025-02-18 11:00:03
1163
原创 在Windows环境下搭建无人机模拟器
最近要开发无人机地面站,但是没有无人机,开发无人机对我来说也是大姑娘坐花轿——头一回。我们要用 MAVLink 和无人机之间通信,看了几天 MAVLink,还是不得劲儿,没有实物实在是不好弄,所以想先装一个无人机模拟器来试试。
2025-01-10 20:39:53
1366
原创 Elixir+MAVLink=玄学
首先是有很多警告,都是由于我的 elixir 版本过高,一些被弃用的语法和函数导致的,找到发出警告的代码,一一改过来就可以了,其实也不是很多。我用的是 elixir 1.17.3,导入这个库之后,不出意外的报错了。目前还没有回复,MAVLink已经不重要了,我现在比较好奇这个错误是怎么个事儿,希望有高人指点,等问题解决来再来写后续吧。不知道什么原因这里始终报错说找不到这个库,我试了导出 erlang 的其他库的头文件中的记录,比如。是 erlang 的 xml 库的头文件,它在 erlang 安装目录的。
2025-01-08 15:39:44
444
原创 Phoenix升级到1.7.18报错问题解决
一不留神,没想到已经是2025年的第二天了,没有时间感慨岁月如梭了,今年的第一篇博客是要解决去年的一个问题。说是依赖错误,但就是愣看不出来哪个依赖有问题,而且项目也能正常运行,真是见了鬼了。不得不说这方面资料是真的少,这个问题网上压根查不到,AI都不好使,不过好在问题是解决了。之后,后面生成的项目都是用的最新版本的库了,不过并不影响已经用低版本的。在各种调整依赖版本,装了清,清了装,一通折腾之后,还是报错。其实已经不算兼容了,导致旧的项目都会出问题。的版本,旧的项目就没问题了。生成页面时,坏了,报错了。
2025-01-02 15:30:48
411
原创 在Phoenix中使用daisyUI
phoenix 的视图使用的是 tailwind CSS,写原生的 tailwind CSS 对于前端小菜鸡来说还是挺有挑战性的。提供的组件来构建UI,这样我们可以统一在组件库中去处理 CSS 样式。当然,在组件中我们也可以使用 daisyUI 来简化样式编写。是一个纯 CSS 库,就像一个基于 tailwind CSS 的 bootstrap,但是它不包含 js。默认的 tailwind 的表单可能会和 daisyUI 的表单冲突,我们可以将。中还有更多命令别名,我们可以添加自己的命令别名,非常方便。
2024-12-30 10:05:23
559
原创 Elixir日志详解
Elixir 的日志功能由 Logger 模块提供,它基本上是 Erlang 的:logger的封装。:emergency:alert:critical:error:warning:notice:info:debug当然常用的还是:error到:info之间的几个。每个级别都有对应的函数用来记录日志,支持和,以及返回结构化或非结构化数据的。所谓结构化数据就是 keyword list 和 map,Elixir 也称之为“report”。非结构化数据就是字符串或字符串列表。
2024-12-17 15:56:02
1083
原创 Elixir Registry
关于 Elixir 的 Registry,官方文档写的不太容易理解,因此这里我们采取意会的方式来介绍它。Registry 这里还是翻译为“注册表”,也比较贴合它的实际功能。我们知道在 Elixir 中,可以为进程注册一个名称,这样就可以通过这个名称向进程发送消息了,而需要 PID。这就跟域名和 DNS 很像,同理,Elixir 也需要一个地方来记录名称和 PID 的对应关系。像 GenServer 等这些在start_link函数中可以直接指定进程名称,对于多个节点的分布式环境,Erlang 也提供了。
2024-12-13 11:38:02
949
原创 Mix.Project
定义和操作 Mix 项目。Mix 项目是通过在模块中调用 来定义的,通常放置在 文件中:配置为了配置 Mix,使用 的模块需要导出一个 函数,该函数返回一个关键字列表,代表项目的配置。这个配置可以通过 读取。注意,如果没有定义项目, 也不会失败;这使得许多 Mix 任务在没有项目的情况下也能工作。如果一个任务需要项目被定义,或者需要访问项目中的特定函数,可以调用 ,如果项目没有定义,它会抛出 异常。 返回的选项列表并不固定,因为许多 Mix 任务都会从这个配置列表中读取自定义的选项。以
2024-12-11 17:15:53
554
原创 Elixir修改Hex镜像源及相关配置
在 Elixir 项目中,我们通过运行获取依赖,如果使用默认的国外镜像源,下载依赖时可能会遇到网络问题。这里我已经配置成国内镜像源了。要修改 Hex 镜像源,既可以通过命令,也可以通过命令行配置。环境变量是HEX_MIRROR。其实在的“修改镜像源”一节我也介绍了如何配置 Elixir 的镜像源。除了mirror_url,Hex 还有许多其他配置,我们可以通过以上是 Hex 2.0.6 版本的配置。
2024-12-09 14:34:27
754
原创 Elixir GenServer
GenServer是一个用来实现客户端-服务器模式中服务器的行为模块。GenServer是一个普通的 Elixir 进程,同其他 Elixir 进程一样,它可以用来保存状态、异步执行代码等。使用这个模块来实现通用服务器进程(GenServer)的优势在于,它有一套标准的接口函数,并提供用于跟踪和错误报告的功能。同时它也可以用到一个监督树中。fill:#333;color:#333;color:#333;fill:none;
2024-12-07 19:03:34
737
原创 Elixir Task.Supervisor
是一个任务监督者。该模块定义了一个监督者,可以用来动态监督任务。子进程描述支持的选项参见的文档。更多示例请参见Task模块。
2024-12-06 10:38:42
329
原创 Elixir DynamicSupervisor
一个被优化为仅动态启动子进程的监督者。Supervisor模块被设计用来处理静态子进程,它们在监督者启动时按给定顺序启动。启动时没有子进程。相反,子进程是通过按需启动的,且子进程之间没有顺序。这使得能通过使用高效的数据结构管理数百万子进程以及并发执行某些操作(如关闭)。
2024-12-06 10:13:34
706
UltraleapTrackingWebSocket
2025-08-28
Unity相机控制脚本
2025-08-01
Geany美化配置文件
2019-11-09
Geany暗黑主题文件
2019-11-09
ColorBlack.css
2020-05-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人