1.å¦ä¹ Cè¯è¨çç½ç«
2.开源协议专题(七):BSD、源码专题MIT、源码专题ApacheL
3.数据结构专题(三) | iVox (Faster-Lio): 智行者高博团队开源的源码专题增量式稀疏体素结构 & 源码解析
4.如何从源代码理解Windows内核的实现机理?
5.Java培训最好的是哪家?
6.韩版传奇 2 源码分析与 Unity 重制(三)客户端渲染管线
å¦ä¹ Cè¯è¨çç½ç«
VCç¥è¯åº
æä¾Visual C++ç¨åºæºä»£ç ãç¼ç¨ææãåå ¶å®VCèµæï¼è¿æ论å交æµã
å¯Cä¸ç
主è¦å æ¬Cè¯è¨æ室ãCæ°æ®ç»æã软件ä¸è½½ãææ¯è®ºåçï¼è¿éç论åä¸éçã
VC大æ¬è¥
VCç±å¥½è å¶ä½çç½ç«ï¼è§åè¿æ¯æºç³»ç»çï¼å 容ä¹ä¸éã
Cè¯è¨ä¹å®¶
æä¾æºç¨åºä»£ç åå¦ä¹ èµæçä¸è½½ï¼æ论å交æµã
C++ Builderå¼åè
æä¾æ§ä»¶ãæºä»£ç ãç³»ç»è¡¥ä¸ãçµå书ç±çä¸è½½ï¼å¦ææ§ä»¶ä½¿ç¨åç¼ç¨æå·§ã
Visual C++æå·§ä¸æºä»£ç
ä¸ä¸ºå¼åè 设计ï¼å¤§éçæºä»£ç ãå ¨é¢ç详ç»ä»ç»ã
åçæºçCè¯è¨
ä¸é¢è®ºåï¼åçæºçCè¯è¨ï¼Keil C解å¯çä¸è½½ã
VCä¹è·¯
综å软件å¼åç½ï¼ä»¥VC++ç¼ç¨ä¸ºä¸»ã
Visual C++å¼åæå
æ¯ä¸ä¸ªä¸Visual C++å¼åç¸å ³çä¸ä¸ç½ç«ï¼æ¬ç«ç®åçå½¢å¼ä¸»è¦ä»¥å¼åèµæºåå¼å论å为主ï¼ä¸»è¦æ¯ä¸ºäºç»å¹¿å¤§çå¼å人åæä¾ä¸ä¸ªè·åèµæºåèªç±äº¤æµçåºæã
VCç¼ç¨ç½
VCç¼ç¨å¦ä¹ çç½ç«ï¼æä¾å 大ä¸é¢å丰å¯çææ¡£èµæ以åå¾å¥½ç论åã
C++ Builderç¼ç¨ä¿±ä¹é¨
æ¶éçç¼ç¨æå·§ãä¾ç¨ãæ§ä»¶çè½ç¶éä¸å¤ï¼ä½é½æ¯ç«é¿ç²¾å¿çéçï¼ç½ç«å®æ¨æ¯ä¸å¹¿å¤§ç¼ç¨ç±å¥½è 们ä¸åè¿æ¥ã
VCCode
æä¾C/C++æºä»£ç ä¸ææ¯æç« ï¼å¤©å¤©æ´æ°ï¼é¾å æä¾ææ¯äº¤æµç¤¾åºã
开源协议专题(七):BSD、MIT、源码专题ApacheL
上篇文章介绍了 GPL、源码专题MPL、源码专题bigdata大屏源码LGPL ,源码专题本文继续介绍剩下的源码专题三个许可证 BSD、MIT、源码专题Apache License。源码专题
四、源码专题BSD 许可证:
1、源码专题概念:
BSD 许可协议,源码专题即 Berkeley Software Distribution license 的源码专题简称,是源码专题由加州大学伯克利分校发布并维护的开源软件许可证。BSD许可证是自由软件中使用最广泛的许可协议之一。
2、两个概念:
BSD:人们常说的BSD,指的是 Berkeley Software Distribution,即伯克利软件套件,是加州大学伯克利分校在AT&T贝尔实验室的Unix操作系统基础上,开发打包的操作系统及相关软件套件。
BSD许可协议:BSD套件遵循某种开源许可证的方式发布,这种许许可证因此而得名,被叫做 BSD许可证。
3、BSD协议特点:
BSD开源协议是一个给予使用者很大自由的协议,可以自由的使用、修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。
4、版本演进历史:
BSD协议的初稿内含有一项额外的条款,要求所有从以BSD许可证授权的软件派生著作,都必须要包含一段文字以交代源代码的浏览windows 源码来源。该条文列于原BSD许可证的第三条。
GNU项目将这个称为“令人感到不舒服的BSD交代条款”,GNU工程认为存在两个问题:
应自由软件基金会和GNU计划的发起者斯托曼的请求,年7月日,伯克利技术许可办公室的主管 William Hoskins 删除了BSD许可证的第三条。从此以后,自由软件作者就可以方便地采用BSD许可证下的软件,从而跟GPL下的作品融合。
原来的许可证有时被称为“BSD-old”(老BSD)或“4-clause BSD”(四句版BSD),当前的BSD许可证有的被称为“BSD-new”(新BSD)、“revised BSD”(修订的BSD)或“3-clause BSD”(三句版BSD)。
5、协议分析:
当发布使用了BSD协议的代码或以BSD协议代码为基础做二次开发自己的产品时,需满足以下三个条件:
BSD协议鼓励项目代码共享,但需要尊重作者的著作权。BSD协议由于允许使用者修改和重新发布代码,也允许在BSD代码上开发商业软件发布和销售,因此是对商业集成很友好的协议。
很多公司在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发。遵守BSD 协议的软件,允许用作商业用途,甚至可按照专属许可证进行再发布。
五、MIT 协议:
1、概念:
MIT 许可协议:即 The MIT License,该许可协议之名源自麻省理工学院(Massachusetts Institute of Technology, MIT),又称“X许可协议”(X License)或“X许可协议”(X License)。
2、版本演进历史:
,由自麻省理工学院(MIT)发布。
3、imsave函数源码协议特点:
MIT许可协议是许多软件许可条款中被广泛使用的其中一种。与其他常见的软件许可协议(如GPL、LGPL、BSD)相比,MIT是相对宽松的软件许可协议,赋予软件被许可人更大的权利与更少的限制。
4、协议分析:
5、其他重要特性:
有许多团体均采用MIT许可证,例如著名的SSH连线软件PuTTY与X窗口系统、Expat、Mono开发平台库、Ruby on Rails、Lua等等也都采用MIT许可协议。
六、Apache 许可协议:
1、概念:
Apache许可证,即 Apache License,是一个由Apache软件基金会(ASF)发布的自由软件许可证。
Apache许可证最初为 Apache Web 服务器而撰写,Apache许可证在Apache社区内外被广泛使用;Apache基金会下属所有项目都使用Apache许可证;许多非Apache基金会项目也使用了Apache许可证。
官网: apache.org/licenses/
2、版本演进历史:
Apache License 1.0,年发布。
apache.org/licenses/LIC...
Apache License 1.1,年发布。 apache.org/licenses/LIC...
Apache License 2.0,年发布。 apache.org/licenses/LIC...
3、协议要求:
Apache许可证,具体要求如下:
对所有未修改的部分应用相同的许可证,并且在每个许可文件中,必须保留再分发代码中的趣味评测源码任何原始著作权、专利、商标和归属通知(不需要包括任何部分的派生作品);
在每个更改的许可文件中,都必须添加一条通知,说明对该文件进行了更改。
不强制要求派生和修改产物使用相同的许可证进行发布。
4、协议分析说明:
如果声明文本文件是作为原始作品发布的一部分,则派生作品必须包含该通知文本文件的可读副本,可以是文档或显示在软件中。
声明文件的内容不会修改许可证,因为它们仅用于提供信息,并且可以在许可证文本中添加更多属性声明,前提是这些声明不能被理解为修改许可证。修改可能有适当的著作权声明,并可能为修改提供不同的许可条款。
七、许可证的对比与总结:
对于一个开源协议来说,规定得太宽松,会导致作者丧失对开源软件的很多权利,规定的太严格,又不利于开源软件的使用和传播。用一张图总结以上介绍的几个主流开源许可证的权限宽松情况:
我们在选择使用开源软件、或者准备开源自己的软件时,一定要明白自己的用途,选择合适的许可证。希望我们站在巨人肩膀上前行的同时,不忘用法律的武器来为我们自身保驾护航。
数据结构专题(三) | iVox (Faster-Lio): 智行者高博团队开源的增量式稀疏体素结构 & 源码解析
在年初,智行者高博团队和清华大学联合发表了Faster-Lio的工作,该成果收录于IEEE RA-Letters,其开源代码展示了如何通过增量式稀疏体素结构iVox,提升Lidar-inertial Odometry(LIO)的算法效率。相较于MaRS-Lab的活动试用源码FastLio2,Faster-Lio在保持精度的同时,得益于iVox的设计,尤其是在增删操作上的高效性,显著减少了维护local map和查询近邻的时间。
高博在知乎文章中详细解读了Faster-Lio,特别是iVox的创新设计。我们从数据结构的角度出发,通过简化的方式解释iVox:首先,利用哈希表(如C++的std::unordered_map)将体素空间坐标作为key,通过精心设计的空间哈希函数映射到有限的索引空间,实现快速的增删操作。哈希表的优化和抗冲突设计使得碰撞概率极低,即使有冲突,也能快速忽略。
此外,iVox采用了伪希尔伯特曲线(PHC)来组织体素,这种曲线将高维空间划分为一系列单元,并通过分段曲线连接,便于一维空间索引。尽管希尔伯特曲线是理想化的,但在工程实践中,PHC在接近填充空间的同时,保持了可接受的实现复杂度。
Faster-Lio的源码解析显示,核心在于IVox类,其中grids_map_和grids_cache_是关键数据结构。AddPoints()负责增量点的添加,通过哈希查找确保高效,而GetClosestPoint()则通过kNN搜索找到最近邻。
尽管论文与代码存在一些差异,如体素过时删除策略,但整体上,iVox的设计思路清晰,哈希表和空间组织策略的结合使得其在实际应用中表现出色。然而,对于体素内点的处理,实际工程中可能更倾向于简化,例如通过体素降采样和八叉树结构,这些方法在某些场景下可能会比PHC更易于实现。
最后,作者WGH无疆强调,iVox是简单实用的解决方案,但希尔伯特曲线在工程实践中的优势可能有限,尤其是在点数不多的情况下。未来,他们将探讨其他类似的工作,如CMU的Super Odometry,其中可能结合了哈希表和八叉树。欢迎大家继续关注和交流。
如何从源代码理解Windows内核的实现机理?
深入解析Windows内核的奥秘,本书以操作系统原理为基石,揭示了Windows如何构建现代操作系统的基石,如strong>进程管理、线程并发、物理和虚拟内存管理,以及Windows I/O模型的实现。作者采用Windows Research Kernel (wrk) 的源代码作为讲解的参照,让读者亲身体验庞大复杂系统如何在x处理器上运行的逻辑。
内容设计上,本书聚焦于Windows内核的核心组件,同时兼顾操作系统整体性,涉及strong>存储体系、网络架构和Windows环境子系统等关键组件,它们虽非内核模块,但对Windows的运行至关重要。而对于Windows Server 以后内核的演变和发展,书中也有所涵盖。
尽管书中详尽解析了Windows的代码实现,但并非逐行解读wrk源代码。每个技术专题都有框架图和深入细节分析,旨在让读者既能把握技术全貌,又理解关键实现。Windows作为历史悠久的操作系统,市面上资料众多,但本书首次从源代码层面解析Windows底层工作原理,部分内容是首次以文字形式公开。 本书的目标是满足对Windows好奇者了解核心机制的需求,同时也为计算机专业的学生、教师和系统软件工程师提供快速理解和掌握Windows先进系统技术的途径,以及编写高效软件的灵感。书中还附带实用工具,通过它们,读者可以直观观察内核信息,甚至跟踪系统动态,这些工具可通过互联网获取。Java培训最好的是哪家?
Java培训的机构很多,但AAA软件教育口碑不错,你可以了解一下,AAA软件教育总部位于北京IT科技企业云集的中关村,以中关村科技园区为依托,紧密结合软件企业人才需求,自主研发了专业的软件人才培养课程体系。
目前已在北京、郑州、深圳、武汉、沈阳、上海等全国主要城市开设直营教学中心和就业基地。在AAA未来的战略蓝图中,杭州、西安等教学中心也在计划筹建中。年来,AAA教育集团已成功帮助数万学子进入IT软件行业。学员毕业后大多进入阿里巴巴、京东、百度、新浪、云智慧、易酒批、数猎天下、广联达等知名IT企业,深受企业欢迎。
AAA三个字母分别从ADVANCED(专业)、SOFTWARE(软件)、EDUCATION(教育)这三个词中择取,A同时也是顺序第一的英文字母。这一标识,蕴含了AAA软件教育的办学目标:做最专业的软件教育机构。
韩版传奇 2 源码分析与 Unity 重制(三)客户端渲染管线
专题介绍
本次专题将深入分析基于韩版传奇2的.NET重写源码,涵盖数据交互、状态管理以及客户端渲染等技术细节。同时,我们将分享将客户端部分移植到Unity并用现代编程语言重写服务端的全过程。
系列文章概览
系列文章包含以下内容:
- 韩版传奇2源码分析与Unity重制(一)服务端TCP状态管理
- 韩版传奇2源码分析与Unity重制(二)客户端启动与交互流程
- 韩版传奇2源码分析与Unity重制(三)客户端渲染管线
文章概览
本文将开始探讨传奇客户端的2D渲染管线,揭示早期美术资产设计与渲染流程的细节。
底层图形接口分析
传奇初期可能未考虑跨平台性或追求极致性能,直接采用Direct3D图形接口构建2D渲染管线。在加载主窗体时,初始化Direct3D,并通过DXManager封装RenderState管理。
渲染循环解析
客户端事件循环调用UpdateEnviroment和RenderEnvironment,前者处理网络数据包和状态更新,后者负责渲染。在RenderEnvironment中,首先清屏,开启Scene管理每一帧的DrawCall,设置透明度混合和渲染目标,提交Scene的DrawCall并通过EndScene提交命令缓冲,最后通过Present进行屏幕切换。
渲染目标设置
RenderTarget通过SetSurface方法绑定至目标纹理,传奇未使用多目标模式,输出通过RT0绑定的Attachment进行。在渲染循环中,RT0绑定至DXManager.MainSurface,即BackBuffer,实现渲染内容的直接屏幕显示。
渲染管线总结
传奇渲染管线简单,主要包括两步渲染:场景渲染和游戏内渲染。场景渲染通过MapControl.DrawControl实现,利用帧缓存ControlTexture复用渲染结果。游戏内渲染分为地图背景、地图前景和游戏对象的绘制。
游戏场景渲染步骤
游戏场景渲染包括地图背景绘制、地图前景和游戏对象的绘制。核心步骤为DrawFloor绘制地图背景、DrawObjects绘制地图前景和游戏内对象。最终视觉效果显示游戏场景的呈现。
Tilemap地图绘制
Direct3D9的Sprite坐标系原点在左上角,传奇采用Tilemap地图,按照从左至右、从上至下的顺序绘制。每个Tile固定大小为xpx,通过计算x和y轴方向所需的Tile数量,避免出现黑边加4作为半屏下Tile数量。
DrawFloor实现
DrawFloor实现中,通过双层循环以用户当前坐标为中心,计算minY和maxY,内层循环迭代minX至maxX,绘制Tile顺序为自上而下、从左到右。Tile坐标转换为屏幕坐标,通过乘以CellWH完成绘制。实际Tile分辨率为x,是CellWH的2倍,产生%覆盖以避免裂缝。
遮挡关系处理
DrawObjects逻辑顺序先绘制地图元素,后绘制人物,但人物能被地图元素遮挡。在先绘制Tile,后绘制Objects的顺序下,实际上人物被绘制得比同一行的Tile更早,通过美术资产上的Y方向向上偏移实现。
半透明身影渲染
在DrawObjects绘制结束后,开启AlphaBlend,对角色进行0.4的透明度混合,当角色完全被景物挡住时,渲染半透明身影以避免玩家看不到角色。
技能与特效渲染
场景中的技能和特效采用Additive混合方式,设置SourceAlpha One,避免地图上产生黑色背景。正确的Additive混合方式产生明亮的特效。
下一步分析
本文着重分析了传奇客户端基于Direct3D9构建的2D渲染管线及细节。后续文章将深入探讨客户端渲染,分析装备、技能和动画的渲染方式。