- 博客(127)
- 收藏
- 关注
原创 threejs 弧度,角度,欧拉角,四元数,法线 -数字名词
本文系统介绍了计算机图形学中的关键数学概念与应用方法。第一部分对比了弧度和角度两种角度量单位,阐明弧度在数学计算中的优势。第二部分详细解析欧拉角的定义、表示方法和优缺点,指出其存在的万向锁问题。第三部分深入探讨四元数的数学原理、运算规则及其在三维旋转中的优势。第四部分全面讲解法线的基础概念、变换矩阵原理及其在光照计算和渲染中的应用,重点分析了Three.js中的实现方式和常见问题解决方案。全文逻辑清晰,从基础数学概念到实际编程应用层层递进,为计算机图形学开发提供了系统的理论指导和实践参考。
2025-06-06 10:02:50
911
原创 threejs 移动时要用那个坐标
Three.js移动物体的坐标选择方法:1.局部坐标(object.position)适用于相对父物体的移动和独立动画;2.世界坐标(getWorldPosition)用于全局精确定位和物体对齐,需配合矩阵运算;3.设备坐标转换(Raycaster)处理屏幕交互。决策流程建议:先判断是否需要相对父物体移动,再考虑全局定位或交互需求,优先使用局部坐标以提高性能。注意频繁获取世界坐标会影响性能,必要时缓存结果。
2025-06-05 09:11:28
256
原创 Threejs世界坐标,局部坐标,设备坐标理解
Three.js中的三种坐标系统解析:1)世界坐标是全局坐标系,用于确定物体在场景中的绝对位置;2)局部坐标是相对于物体自身的坐标系,用于处理物体间的相对位置;3)设备坐标与屏幕相关,用于交互处理。系统间可通过localToWorld等方法相互转换,这些坐标系统对3D场景中的对象定位、动画和交互至关重要。
2025-06-05 09:05:34
285
原创 threejs-为什么通过clock.getDelta() 时间差控制旋转速度
在Three.js中,使用clock.getDelta()方法可以实现帧率无关的动画控制,确保不同设备上动画速度一致。该方法通过计算帧间时间差,将动画增量与实际时间而非帧数绑定,从而避免因帧率差异导致的动画速度问题。当与速度参数(speed)结合使用时,公式"cube.rotation.x += speed * delta"能保证每秒动画位移量恒定。该方法还支持暂停恢复和物理模拟,首次调用需注意异常值,极端情况下建议限制最大delta值。这是实现跨设备平滑动画的基础技术。
2025-05-24 06:43:06
302
原创 Three.js Clock 详解
Three.js中的Clock工具类专为3D动画和游戏开发设计,提供精准的时间管理功能。核心功能包括计算帧间时间差(deltaTime)和总运行时间,支持启动/暂停控制,与requestAnimationFrame完美配合实现帧率无关的平滑动画。通过getDelta()和getElapsedTime()方法,开发者可精确控制动画速度、触发定时事件和监控性能。典型应用场景包括:多物体异步动画、页面不可见时暂停优化、物理模拟等。相比原生Date对象,Clock针对动画场景优化,自动处理时间精度问题,是创建流畅3
2025-05-24 06:38:30
998
原创 Three.js 中的 Octree(八叉树)详解
Octree(八叉树)是Three.js中用于3D空间分区的重要数据结构,主要用于优化碰撞检测、视锥体裁剪和场景管理。它通过递归地将3D空间划分为8个八分体,形成一个树状结构,每个节点有八个子节点。查询时,从根节点开始递归搜索,直到找到叶子节点,从而高效检测物体间的碰撞。在场景管理中,Octree可以优化复杂场景的对象组织。使用Octree时,首先需要导入Octree模块,然后创建并构建Octree,最后可以通过球体碰撞检测或射线碰撞检测来实现碰撞检测。Octree的构建原理是通过处理网格几何体创建三角形结
2025-05-23 17:05:01
313
原创 threjs-方向向量(Direction Vector)详解
方向向量在3D图形学和Three.js中扮演着核心角色,用于精确描述空间中的朝向。它是一个标准化向量,长度为1,与普通向量不同,方向向量通过单位向量形式表示,满足x²+y²+z²=1的条件。在Three.js中,可以通过直接创建单位向量或从任意向量标准化来生成方向向量。方向向量在物体朝向控制、运动方向控制、光线/视线检测等场景中具有广泛应用。理解方向向量的几何意义和常见误区,如必须使用.normalize()方法进行标准化,是掌握3D编程的基础。此外,normalize()方法在Three.js中用于将任意
2025-05-23 09:40:40
594
原创 threejs角度与方向的区别(3D旋转中的核心概念)
角度(Angle)表示旋转的"量"(大小)标量值(单个数值)单位通常是弧度(radians)或度(degrees)例如:旋转45度、π/2弧度方向(Direction/Orientation)表示物体在空间中的"朝向"向量或复杂数学对象(如四元数)需要多个分量来描述例如:面向正北方向、指向前方45度倾斜。
2025-05-23 09:23:58
323
原创 threejs 四元数(Quaternion)和欧拉角(Euler)学习
四元数和欧拉角是3D图形编程中常用的两种旋转表示方法。四元数由四个分量(x,y,z,w)组成,其中(x,y,z)表示旋转轴的方向,w表示旋转角度的一半的余弦值。四元数具有单位长度,能够避免万向节锁问题,并且支持平滑的球面插值(Slerp),适合复杂旋转和动画。欧拉角则由三个角度值(x,y,z)表示绕三个轴的旋转,直观易懂,但存在万向节锁问题,且插值效果较差,适合简单的单轴旋转。在Three.js中,四元数通过THREE.Quaternion类表示,欧拉角通过THREE.Euler类表示。两者可以相互转换,但
2025-05-23 09:21:30
1242
原创 Threejs从零开始实现第三人称漫游
本文介绍了如何使用Three.js实现一个第三人称视角的3D场景,重点讲解了相机控制、模型加载、人物行走控制、碰撞检测及动画播放的实现。首先,通过OrbitControls实现相机的环绕控制,并加载外部模型文件(如FBX、GLTF)作为场景和人物模型。接着,通过键盘事件监听实现人物的行走控制,并利用八叉树进行碰撞检测,确保人物在场景中不会穿模。最后,通过AnimationMixer实现人物动画的播放与切换,如行走、跑步等。文章还详细解释了如何根据相机旋转调整人物的移动方向,确保人物始终面向相机的视角方向。整
2025-05-22 15:48:17
862
原创 threejs方向向量和速度向量学习
本文介绍了在Three.js中使用方向向量和速度向量控制3D物体运动的基本方法。方向向量表示物体的朝向,可通过getWorldDirection()获取,并通过旋转改变。速度向量结合方向和速率,用于移动物体。文章还讨论了时间补偿(DeltaTime)以确保帧率一致性,并提供了键盘控制运动的综合示例。常见问题包括方向向量未归一化、忽略四元数更新以及局部与全局坐标系的转换。通过这些技术,可以实现复杂的3D运动效果。
2025-05-22 09:03:16
1059
原创 THREE.Object3D.add: object not an instance of THREE.Object3D. 错误解析(TransformControls 场景)
在使用Three.js时,添加TransformControls辅助对象到场景中可能会遇到错误。正确的方法是通过.getHelper()方法获取辅助对象后再添加到场景,而不是直接添加TransformControls实例。此外,异步加载的模型(如OBJ、GLTF)在未完成初始化或未通过类型验证时,直接绑定到控件会导致类型不匹配的错误。Three.js的r147+版本对Object3D类型检查更严格,旧代码若直接操作未封装的底层对象(如未三角化的模型)会报错。因此,建议使用scene.add(transfor
2025-05-17 14:13:31
192
原创 解决 Three.js Raycaster 点击位置与实际交点偏差问题
在使用Three.js的Raycaster时,若发现点击位置与碰撞点存在偏差,通常是由于坐标系统不匹配或参数设置错误。以下是系统性的排查和解决方案:首先,检查鼠标坐标到标准化设备坐标(NDC)的转换是否正确,确保考虑了Canvas的尺寸和位置。其次,验证相机参数,包括位置、朝向和投影矩阵,确保它们正确设置。此外,检查场景和物体的缩放,确保物体矩阵已更新。高级调试技巧包括创建可视化调试场景和使用屏幕空间标记点击位置。常见问题如Canvas元素样式影响、尺寸不匹配或透视变形,都有相应的解决方案。通过系统性的调试
2025-05-17 11:31:30
339
原创 Three.js 中调试 Raycaster 的方法
在Three.js中,Raycaster是一个用于光线投射的关键工具,广泛应用于物体选择和碰撞检测等场景。为了调试Raycaster并验证其准确性,可以采用以下几种方法:1. 可视化射线:通过创建箭头辅助线来显示射线的方向和长度。2. 显示交点:在检测到的交点位置放置一个小球,以便直观地看到交点的位置。3. 控制台输出调试信息:将射线的起点、方向以及检测到的交点信息输出到控制台,便于详细分析。4. 使用GUI控制参数:通过GUI界面动态调整射线的长度、是否显示射线和交点等参数,实时观察效果。5. 使用Thr
2025-05-17 11:27:37
173
原创 查看Electron 应用的调试端口
如果该 Electron 应用在启动时添加了类似 `--remote-debugging-port=xxxx` 或 `--inspect=xxxx` 的参数,那么其调试端口就是该参数指定的端口号。* 在 Chrome 浏览器中访问 `chrome://inspect` 页面,若该 Electron 应用开启了远程调试功能,会显示在 “Remote Target” 列表中,点击 “Inspect” 链接即可打开开发者工具进行调试,同时可以查看到对应的调试端口信息。
2025-05-10 08:58:35
373
原创 LangChain、Dify 和 Ollama三者的关系
LangChain选择场景:需要代码级控制、复杂逻辑编排、多模型/工具集成。典型用例:定制化 Agent、多步骤任务链、结合外部 API 的智能应用。Dify选择场景:快速搭建生产级应用、非技术人员参与开发、注重可视化操作。典型用例:企业级 AI 客服、低代码 RAG 系统、安全可控的模型部署。Ollama选择场景:本地运行开源 LLM、模型轻量化部署、数据隐私敏感场景。典型用例:离线环境下的模型推理、结合 LangChain 开发本地化 AI 应用。
2025-03-07 08:52:45
3994
原创 dify中使用NL2SQL
务须确保本地已完成 Docker 之安装,并通过 Git 克隆 Dify 之代码库抑或下载源码包。运用双向模式链接技术(诸如 RSL-SQL 框架),结合 LLM 生成的关键组件以及精确列名匹配,增进相关表/列的召回率,削减冗余信息的干扰。经由上述步骤,能够在 Dify 中高效达成 NL2SQL 能力,将自然语言查询转化为可执行的数据库操作,显著降低非技术用户的数据访问门槛。运用 Dify 的智能体编排功能,分配不同模型处理任务(如 Claude 解析用户意图,GPT-4 生成 SQL),平衡成本与性能。
2025-03-07 08:51:14
2628
1
原创 FastAPI常用的组件库
FastAPI是一个高性能的Web框架,用于构建API,它本身提供了丰富的功能,但还可以与许多其他库和组件一起使用,以扩展其功能。
2025-03-06 09:13:18
616
原创 提升大模型Text-to-SQL能力应用的实践
什么是Text-to-SQL?Text-to-SQL也称为NL2SQL,是将自然语言查询转换为可在关系数据库上执行的SQL查询的技术。其核心目标是准确捕捉并反映用户意图,生成相应的SQL查询,确保执行后返回符合预期的结果。早在生成式人工智能LLM技术出现之前,已有很多专注于Text-to-SQL任务的机器学习项目。随着大模型技术的快速发展,凭借其强大的自然语言理解能力和推理能力,Text-to-SQL的性能得到了显著提升的同时,也大大降低了访问关系数据库和进行数据分析的门槛,并能够支持各种企业级应用。Tex
2025-03-05 08:57:41
1109
原创 从零到一打造商用AIAgent
这篇内容将从整体上介绍打造 AI Agent 的七个步骤,分别是需求梳理、软件选型、提示工程、数据库、构建 UI 界面、测试评估和部署发布。
2025-03-05 08:43:29
1290
原创 DeepSeek四种知识库布置方案,选一种最适合你的!
AI时代,知识库的构建和管理变得愈发重要。无论是企业级应用还是个人项目,选择一个合适的知识库方案都能大大提升效率和效果。本文将基于DeepSeek的强大,深入分析 Dify + DeepSeek、Anything LLM + DeepSeek、Ollama + DeepSeek 和硅基流动 + DeepSeek 四种方案,帮助你找到最适合自己的选择。首先,我们来看功能与特性方面的对比。这四个方案在知识库构建能力、检索模式、多模态支持、本地化部署、模型微调支持和扩展性上各有优劣。接下来,我们来看性能与资源方面
2025-03-04 09:36:54
1340
原创 如何进行SQL调优的?列举思路与Java实战代码
优先通过EXPLAIN分析执行计划索引优化能解决80%的性能问题Java侧重点关注:预编译防注入、合理使用连接池、减少网络传输对于复杂查询,考虑定期生成物化视图调优需要结合具体数据库实现(如MySQL的B+树索引、Oracle的位图索引)和业务场景进行,建议通过压测工具(JMeter)验证优化效果。你是否能条理清晰地分析问题并提供解决方案?SQL调优是一个复杂的过程,需要根据具体情况进行具体分析。本文介绍的11个问题只是SQL调优中的冰山一角,实际工作中还会遇到各种各样的问题。
2025-03-04 08:43:49
1196
原创 以太坊标准合约-ERC标准
例如,当用户在一个借贷合约中收到还款(以ERC - 677代币形式)时,合约可以根据收到的通知立即更新用户的信用额度或者其他相关状态,增强了智能合约之间的交互性和自动化程度。提高安全性和用户体验:在安全方面,ERC - 777对代币的操作进行了更精细的控制,降低了一些因ERC - 20可能存在的安全漏洞导致的风险。例如,具有不同等级但又属于同一类型的会员卡。例如,在一个虚拟土地NFT中,可以包含该土地上的建筑物、道具等其他NFT,以及代表土地产出的ERC - 20代币,增强了NFT的价值和实用性。
2025-03-01 08:43:02
1261
4
原创 Controller层代码怎么写,打通任督二脉
它的定位,我认为是「不可或缺的配角」,说它不可或缺是因为无论是传统的三层架构还是现在的COLA架构,Controller 层依旧有一席之地,说明他的必要性;Java API 的规范 JSR303 定义了校验的标准 validation-api ,其中一个比较出名的实现是 hibernate validation ,spring validation 是对其的二次封装,常用于 SpringMVC 的参数自动校验,参数校验的代码就不需要再与业务逻辑代码进行耦合了。那这样就可以把统一包装的工作放到这个类里面。
2025-02-26 10:12:26
621
原创 Vue性能翻倍秘籍
某电商大促因工程化缺失导致页面崩溃!本文通过双11级别流量压测,揭秘Vue项目性能优化的6大核心策略,涵盖构建提速、首屏优化、SSR实战等全链路方案。
2025-02-26 10:07:41
353
原创 java内存泄露终结者:jmap + MAT 组合拳
内存泄露是 Java 开发中常见的性能问题,它会导致应用程序内存使用量不断增长,最终引发 OutOfMemoryError 错误,导致服务崩溃。本文将介绍如何使用 jmap 和 MAT 工具来分析和定位内存泄露问题。jmap 和 MAT 是分析 Java 内存泄露问题的利器。通过生成 heap dump 文件,并使用 MAT 进行分析,我们可以快速定位内存泄露的根源,并修复代码问题。希望这篇文章能够帮助你更好地理解和解决 Java 内存泄露问题!
2025-02-26 10:06:29
555
原创 五种Web消息推送常用技术
• SSE(Server - Sent Events):基于HTTP协议,服务器向客户端推送事件,客户端通过EventSource接收实时数据,数据流仅从服务器到客户端,适用于不需要客户端反馈的场景,连接中断时浏览器会自动尝试重新连接服务器。• 长轮询:客户端向服务器发送请求后,服务器不会立即响应,而是保持连接直到有新数据需要推送,依赖HTTP持久连接(Keep - Alive)和超时机制。• 短轮询:客户端定期向服务器发送请求询问有无新数据,每次请求后,无论有无数据,服务器都快速响应并关闭连接。
2025-02-25 09:10:10
235
原创 SpringBoot如何做线程池优化与线程池隔离呢
优化关键:根据业务类型(CPU/IO密集型)调整参数,合理设置拒绝策略,持续监控。隔离策略:通过多线程池划分资源边界,结合熔断机制增强容错能力。工具推荐:Micrometer监控指标,Arthas在线诊断线程池问题。通过合理配置和隔离,可显著提升系统的吞吐量和稳定性。
2025-02-25 09:05:46
525
原创 Spring可以这样推送消息到客户端!
SseEmitter是Spring Framework中用于服务器发送事件(Server-Sent Events, SSE)的类。SSE是一种允许服务器主动向客户端推送数据的技术,通常用于实现如实时通知、数据流等功能。其工作原理基于HTTP协议,客户端通过HTTP请求订阅服务器的事件流,服务器则通过SseEmitter对象持续向客户端发送事件。SseEmitter的核心特性单向通信:SSE是单向的,只允许服务器向客户端推送数据,客户端不能通过此通道向服务器发送数据。
2025-02-25 09:03:46
274
原创 阿里蚂蚁设计团队开源AI前端界面工具:Ant Design X
该库提供了一键接入智能对话组件与 API 服务的功能,使得开发者能够更轻松地集成 AI 能力,构建智能化的用户界面。这使得 Ant Design X 成为开发 AI 应用的有力工具,能够帮助开发者提升开发效率,同时确保设计风格的一致性和用户体验的优化。由阿里旗下的蚂蚁设计团队开源,遵循 Ant Design 的设计哲学,专注于利用人工智能技术来提升界面交互体验。
2025-02-25 08:59:50
716
原创 高并发线程池7条拒绝对策
Override// 启动异步重试线程while (!try {});适用场景:支付订单、交易流水等不可丢失任务“线程池拒绝策略的本质,是在系统稳定性与业务完整性之间寻找平衡点。你在生产环境中遇到过最奇葩的线程池问题是什么?评论区吐槽!
2025-02-24 15:34:56
961
原创 解决idea一个非常坑的问题
我发现直接重启idea还不好使,这样按上面的菜单方式操作才能真正清除缓存,点击之后,发现maven开始进度加载了。这大概就是idea的bug,pom没有刷新,按理来说直接 点击reload maven 就好了,但是实际情况,很多时候没有用的。后来查阅了很多资料,终于发现idea还留了一手,可以通过 invalidate cache来解决,中文的意思是缓存失效。这个包,竟然飘红了。我clean了好几次没有效果。dea中经常会遇到这样问题,明明maven的pom中已经添加了依赖,总是提示jar包找不到,
2025-02-24 08:45:46
788
原创 java高级技术人员要掌握哪些技术
大厂对高级Java工程师的要求不仅是技术深度,更看重复杂场景的实战经验和技术判断力。建议通过开源项目贡献(如Apache项目)、技术博客输出、内部系统重构案例积累差异化竞争力。
2025-02-24 08:39:43
1124
原创 Spring Boot中整合Flink CDC
在上面介绍中,我们介绍了如何在Spring Boot中整合Flink CDC来实现数据库数据变化的实时捕获监听操作,在实际实现中,我们可以根据具体的业务需求对操作进行进一步的扩展,例如可以将CDC数据写入Kafka、Hadoop、Elasticsearch等实时数据平台,构建更强大的数据流处理系统。
2025-02-24 08:38:22
530
原创 Spring Boot中整合Flink CDC 数据库变更监听器来实现对MySQL数据库
在上面介绍中,我们介绍了如何在Spring Boot中整合Flink CDC来实现数据库数据变化的实时捕获监听操作,在实际实现中,我们可以根据具体的业务需求对操作进行进一步的扩展,例如可以将CDC数据写入Kafka、Hadoop、Elasticsearch等实时数据平台,构建更强大的数据流处理系统。
2025-02-22 09:27:06
552
原创 Spring Boot 如何保证接口安全
Spring Boot如何保证接口安全,需要架构设计、示例代码以及系统逻辑分析。首先,我得考虑常见的接口安全措施,比如身份认证、权限控制、数据加密、防止常见攻击等。然后,要结合Spring Boot的功能来实现这些措施。首先,身份认证,通常用Spring Security或者OAuth2。Spring Security比较基础,适合大部分场景。可能用JWT来做无状态认证,这样适合分布式系统。然后权限控制,可以用基于角色的访问控制(RBAC),或者更细粒度的权限管理。
2025-02-22 09:25:04
1439
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人