- 博客(301)
- 资源 (10)
- 收藏
- 关注

原创 透过源码理解Flutter InheritedWidget
通过分析flutter framework源码,掌握InheritedWidget的原理。
2023-08-29 20:59:30
1178
2

原创 透过源码理解Flutter中widget、state和element的关系
通过分析flutter framework源码,掌握widget、state和element之间的关系。
2023-08-16 12:11:29
1102

原创 C语言代码的x86-64汇编指令分析过程记录
本文通过分析一个简单的C程序的x86-64汇编代码以及栈的存储情况,使读者对汇编程序的执行步骤有一个初步的了解。
2023-08-06 01:32:23
1866
原创 Metal学习笔记十三:阴影
在本章中,您将了解阴影。阴影表示表面上没有光。当另一个表面或对象使对象与光线相遮挡时,您会看到对象上的阴影。在项目中添加阴影可使您的场景看起来更逼真,并提供深度感。
2025-04-04 14:38:28
1082
原创 Metal学习笔记十二:渲染通道
到目前为止,您创建的都是只有一个渲染通道的项目。换句话说,您仅使用一个渲染命令编码器将所有绘制调用提交给GPU。在更复杂的应用程序中,您通常需要在一个通道中将内容渲染到一个离屏纹理中,并在随后的通道中使用该结果,最后才将纹理呈现给屏幕。您需要使用多通道的原因有很多,可能是:•阴影:在下一章中,您将创建一个阴影通道并从方向灯光呈现深度图,以帮助在随后的通道中计算阴影。•延迟光照:您呈现几种具有颜色,位置和法线值的纹理。然后,在最终通道中,您可以使用这些纹理来计算光照。
2025-03-18 14:55:50
1020
原创 Metal学习笔记目录
Metal学习笔记十五:基于平铺的延迟渲染。Metal学习笔记二十一:基于图片的光照。Metal学习笔记十六:GPU计算编程。Metal学习笔记二十二:反射与折射。Metal学习笔记九:3D场景导航。Metal学习笔记十九:镶嵌和地形。Metal学习笔记二十:片段后处理。Metal学习笔记十二:渲染通道。Metal学习笔记十四:延迟渲染。Metal学习笔记十七:粒子系统。Metal学习笔记十八:粒子行为。Metal学习笔记十三:阴影。
2025-03-04 16:54:50
213
原创 Metal学习笔记十一:贴图和材质
在上一章中,您设置了一个简单的 Phong 光照模型。近年来,研究人员在基于物理的渲染 (PBR) 方面取得了长足的进步。PBR 尝试准确表示真实世界的着色,其中离开表面的光量小于表面接收的光量。在现实世界中,对象的表面并不像到目前为止那样完全平坦。如果你观察周围的物体,你会注意到它们的基本颜色是如何根据光线照射到它们身上的方式而变化的。有些对象具有光滑的表面,而有些对象具有粗糙的表面。哎呀,有些甚至可能是闪亮的金属!以这个带有砖块纹理的球体为例。左侧的渲染显示一个简单的颜色纹理,阳光直接照射在其上。
2025-03-03 14:59:42
990
原创 Metal学习笔记十:光照基础
光和阴影是使场景流行的重要要求。通过一些着色器艺术,您可以突出重要的对象、描述天气和一天中的时间并设置场景的气氛。即使您的场景由卡通对象组成,如果您没有正确地照亮它们,场景也会变得平淡无奇。最简单的照明方法之一是 Phong 反射模型。它以 Bui Tong Phong 的名字命名,他在 1975 年发表了一篇论文,扩展了旧的照明模型。这个想法不是尝试复制光线和反射物理学,而是生成看起来逼真的图片。这种模型已经流行了 40 多年,是开始使用几行代码来学习如何伪造照明的好地方。
2025-03-01 19:15:54
1211
原创 Metal学习笔记八:纹理
到目前为止,您已经学习了如何使用片段函数和着色器为模型添加颜色和细节。另一种选择是使用图像纹理,您将在本章中学习如何作。更具体地说,您将了解:• UV 坐标:如何展开网格,以便可以对其应用纹理。• 纹理化模型:如何读取片段着色器中的纹理。• 资产目录:如何组织纹理。• 采样器:读取 (采样) 纹理的不同方式。• Mipmaps:多级纹理,以便纹理分辨率与显示大小匹配并占用更少的内存。
2025-02-27 22:28:06
1269
原创 Metal学习笔记七:片元函数
知道如何通过将顶点数据发送到 vertex 函数来渲染三角形、线条和点是一项非常巧妙的技能 — 尤其是因为您能够使用简单的单行片段函数为形状着色。但是,片段着色器能够执行更多操作。➤ 打开网站 https://shadertoy.com,在那里您会发现大量令人眼花缭乱的社区创建的出色着色器。这些示例可能看起来像复杂 3D 模型的渲染图,但外观具有欺骗性!您在此处看到的每个 “模型” 都是完全使用数学生成的,用 GLSL 片段着色器编写。
2025-02-27 15:24:04
1123
1
原创 Metal 学习笔记六:坐标空间
要在网格上轻松找到一个点,您需要一个坐标系。例如,如果网格恰好是您的 iPhone 15 屏幕,则中心点可能是 x:197、y:426。但是,该点可能会有所不同,具体取决于它所处的空间。在上一章中,您了解了矩阵。通过将顶点的位置乘以特定矩阵,可以将顶点位置转换为不同的坐标空间。顶点在经过渲染管线时通常有 6 种空间:1.物体局部空间2.世界空间3.相机空间4.裁剪空间5.规格化设备空间:NDC(Normalized Device Coordinate)6.屏幕空间。
2025-02-27 09:28:46
777
原创 Metal 学习笔记五:3D变换
在上一章中,您通过在 vertex 函数中计算位置数据,来平移顶点和在屏幕上移动对象。但是,在 3D 空间中,您还想执行更多操作,例如旋转和缩放对象。您还需要一个场景内摄像机,以便您可以在场景中移动。要移动、缩放和旋转三角形,您将使用矩阵 - 一旦您掌握了一个三角形,就可以一次旋转具有数千个三角形的模型!对于我们这些不是数学天才的人来说,向量和矩阵可能有点可怕。幸运的是,在使用数学时,您不必总是需要知道引擎盖下的内容。为了提供帮助,本章的重点不是数学,而是矩阵。
2025-02-26 15:02:49
933
原创 Metal 学习笔记四:顶点函数
到目前为止,您已经完成了 3D 模型和图形管道。现在,是时候看看 Metal 中两个可编程阶段中的第一个阶段,即顶点阶段,更具体地说,是顶点函数。
2025-02-25 20:53:24
943
原创 Metal 学习笔记三:渲染管线
现在,您对 3D 模型和渲染有了更多的了解,是时候了解一下渲染管线了。在本章中,您将创建一个渲染红色立方体的 Metal 应用程序。在学习本章时,您将仔细了解负责将 3D 对象转换为在屏幕上看到的华丽像素的硬件。首先是 GPU 和 CPU。每台计算机都配备了图形处理单元(GPU)和中央处理单元(CPU)。GPU是一种专业的硬件组件,可以非常快速地处理图像,视频和大量数据。在处理大量数据时,我们会用吞吐量,来衡量数据在一个指定时间单位内处理的数据量。另一方面,CPU管理资源并负责计算机的运作。
2025-02-25 11:04:13
991
原创 Metal 学习笔记二:3D模型
3D模型是由顶点组成的。每个顶点都是3D空间的一个点,由 x, y, z 值组成。就像你在前一章看到的,你会发送这些顶点数据到GPU来渲染它们。打开本章的starter的playground。这个playground包含两页,Render and Export 3D Model 以及 Import Train。它也包含了USDZ格式的train模型,如果你看不到这些东西的话,你可能需要使用右上角图标来显示项目导航。
2025-02-24 10:58:59
866
原创 Metal 学习笔记一:你好,Metal
在 3D 计算机图形学中,你把一堆点连接起来,然后在屏幕上创建一个图像。此图像称为渲染。从点渲染图像涉及计算屏幕上每个像素的明暗。光线会在场景周围反射,因此您必须确定光照的复杂程度以及渲染每个图像需要多长时间。Pixar 电影中的单个图像可能需要几天时间才能完成渲染,但游戏需要实时渲染,您可以立即看到图像。渲染 3D 图像的方法有很多种,但大多数都是从 Blender 或 Maya 等建模应用程序中构建的模型开始的。
2025-02-23 23:02:06
859
原创 H.264码流结构
H264的码流的打包方式有两种,一种为annex-b byte stream format 的格式,这个是绝大部分编码器的默认输出格式,就是每个帧的开头的3~4个字节是H264的start_code,0x00000001或者0x000001。另一种是原始的NAL打包格式,就是开始的若干字节(1,2,4字节)是NAL的长度,而不是start_code,此时必须借助某个全局的数据来获得编 码器的profile,level,PPS,SPS等信息才可以解码。
2025-01-23 12:01:28
692
原创 鸿蒙操作系统简介
Stage 模型:是为了解决FA模型无法解决的开发场景问题,方便开发者更加方便地开发出分布式环境下的复杂应用。自 API9 新增的模型。是日后长期演进的模型。在该模型中,由于提供了AbilityStage、WindowStage等类作为应用组件和Window窗口的“舞台”,因此称这种应用模型为Stage模型。
2024-12-18 11:37:48
1519
原创 Flutter动画(二)内建隐式动画Widget
中给出了选择动画的决策树:使用动画框架不在我们讨论的话题内。flutter支持的动画包括隐式动画和显式动画。
2024-12-05 12:15:58
1069
原创 SwiftUI疑难杂症(2):ZStack子视图transition动画问题
当将其设置为 true 时,它会重新渲染视图,添加蓝色矩形,然后动画将发生。例如,如果蓝色矩形可见,则绿色将变为 1,蓝色变为 2,按钮将变为 3。所以蓝色矩形在绿色矩形的上方,绿色矩形在蓝色矩形的后面。该按钮位于蓝色矩形上方,依此类推......当视图重新呈现时,按钮的 zIndex 将从 3 更改为 2。然而,在尝试制作 in-out 过渡的动画时,in 动画效果很好,但 out 动画效果不佳。如果这样做,则按钮将保持在 zIndex 3 处,因此它不会替换蓝色的矩形。现在运行动画,它将正常工作。
2024-11-14 13:55:10
383
原创 Swift并发笔记
结构化” (structured) 这个词天生充满了美好的寓意:一切有条不紊、充满合理的逻辑和准则。但是结构化并不是天然的。在隔离域之间传递数据,为了保证数据安全,我们需要一种方法来对此进行检查,核心问题是:“我们应该在什么时候,以什么方式允许数据在不同的并发域中传递?这个问题的答案是相当明确的:只有那些不会在并发访问时发生竞争和危险的类型,可以在并发域之间自由传递。像是 struct 这样的所有成员都具有值语义,它自身也具有值语义的类型是安全的;
2024-10-02 15:53:16
1561
1
原创 SwiftUI简明概念(4):如何对shape同时进行fill和stroke
效果也如我们所预料的:最终的效果是在Circle外边加了好几圈border。
2024-09-28 19:41:02
504
原创 SwiftUI简明概念(3):Path.addArc的clockwise方向问题
Path.addArc的参数分别表示圆弧的中心点位置,圆弧半径,开始角度,结束角度以及圆弧方向(顺时针还是逆时针)。我们来看看最终的效果:如果我们把时钟放在屏幕上,顺时针从0到180度,应该是从3点到9点的下半圆区域,跟我们实际绘制方向刚好相反。为什么呢?
2024-09-28 11:25:20
500
原创 SwiftUI疑难杂症(1):sheet content多次执行
经测试,发现该问题仅在.toolbar { ToolbarItem { Menu {}}}.sheet结构的时候才会发生。如果把Menu换成Button,或者把.sheet移到.toolbar之前都不会发生这个问题。环境iOS16+Xcode14。
2024-09-27 17:49:34
367
原创 SwiftUI简明概念(2):renderingMode VS symbolRenderingMode
Image的symbolRenderingMode可以设置四种值。我们知道SF symbol可能是有多个图层的,而.monochrome会将多个图层合并成一个,然后使用foregroundStyle渲染。对于.multicolor,SF symbol会保持多个图层,并使用它固有的样式或foregroundStyle进行渲染。
2024-09-27 10:43:35
672
原创 SwiftUI简明概念(1):ForegroundColor VS ForegroundStyle
在SwiftUI体系内,一个View可能包含一个或多个图层,那么最前面的一个图层就是ForegroundColor或ForegroundStyle作用的目标图层。当然这个图层可能不会响应前景色的要求:如上图所示,Rectangle作为shape图层,能响应前景色要求,导致图层变成前景色。Button的作用图层是Text,也能响应前景色要求。Image的话,要看具体情况,对于例子中的SF symbol能改变其最前面图层的颜色;如果是普通图片,则设置前景色无效;
2024-09-27 09:55:09
875
原创 初识uniapp
是一个DCloud出品的、使用开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)、快应用等多个平台。uni-app、uni-app x、uniCloud、HBuilder、uni 小程序 sdk。HBuilder自不必说,它是一款ide。uni 小程序 sdk是为原生打造的、可运行基于开发的小程序前端项目的框架,从而帮助原生App快速获取小程序的能力。
2024-04-23 23:22:23
1014
原创 Flutter动画(一)Ticker、Animate 原理
在任何系统的UI框架中,动画原理都是类似的,即:在一段时间内,快速地多次改变UI外观;由于人眼会产生视觉暂留,所以最终看到的就是一个“连续”的动画。Flutter中对动画进行了抽象,主要涉及 Animation、Curve、Controller、Tween这四个角色,它们一起配合来完成一个完整动画。
2024-03-22 16:48:07
1473
原创 React/RN组件避免重复渲染的一些技巧
这里我们只讨论Component和函数组件。我们知道Component是否发生重渲染是由shouldComponentUpdate决定的,默认情况下返true。自定义的Component会根据自身state和props是否发生变化,来决定自身是否需要重新渲染,这个过程往往需要进行深度比较的。而相对应的,PureComponent会通过shadowEqual对state和props进行浅比较,来决定是否需要重新渲染。一般而言,如果state和props没有发生变化,组件本身是不需要重新渲染的。
2024-03-13 17:14:33
1983
原创 Nest.js权限管理系统开发(八)jwt登录
虽然仅使用@nestjs/jwt就能实现身份验证的功能,但是使用passport能在更高层次上提供更多便利。Passport 拥有丰富的生态系统,实现了各种身份验证机制。虽然概念简单,但你可以选择的 Passport 策略集非常丰富且种类繁多。Passport 将这些不同的步骤抽象为一个标准模式,模块将这个模式封装并标准化为熟悉的 Nest 结构。
2024-02-26 14:52:19
2008
1
原创 Nest.js权限管理系统开发(六)新建模块
这个注解表示的是路由路径前缀,UserController中的每个方法对应一个具体的路由,如果这些路由有相同的前缀,我们就可以将这个前缀上升到类本身,这样每个路由只要标注不同的后缀部分即可。方法参数中也存在着注解,例如findOne(@Param('id') id: string)表示id是路由中的参数值,同理@Query("id")就表示id是路由中的查询参数值。要启用这个转换,需要使用。每个方法都有例如@Post(),@Get(':id')之类的注解,Post、Get本身表示该路由支持的请求方法。
2024-02-25 20:01:34
1147
原创 Nest.js权限管理系统开发(五)返回格式化
这样做之后我们会发现请求成功的 code 只能是 200,一般项目中请求成功还需要很多业务异常状态码返回给前端,所以我们需要新建一个抛出业务异常的类我们先创建/** 公共错误 *//** 服务器出错 *//** 数据为空 *//** 参数有误 */在common/filter/http-exception下新建创建一个类继承,接受三个参数错误信息错误码codehttp状态码(默认是200)) {然后我们可以在需要的地方抛出相应的异常了。
2024-02-25 16:18:33
1377
原创 Nest.js权限管理系统开发(四)Swagger API接入
Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务()。它的主要作用是:1. 使得前后端分离开发更加方便,有利于团队协作2. 接口的文档在线自动生成,降低后端开发人员编写接口文档的负担3. 功能测试。
2024-02-25 16:14:42
1081
原创 Nest.js权限管理系统开发(三)环境变量与配置文件
这样生成环境的NODE_ENV 就是命令中指定的值了,我们可以根据这个加载不同配置文件。想要加载配置文件,NestJS 给我们提供了我们创建一个config文件夹来专门存放配置文件。在其中创建不同环境对应的配置文件:创建一个ts文件来读取和解析 YAML 文件,我们可以利用js-yaml包。安装包后,我们使用yaml#load在构建过程中,Nest CLI 不会自动将 "assets"(非 TS 文件)移动到dist文件夹。为了确保你的 YAML 文件被复制,你必须在文件的对象中指定它。例如,如果。
2024-02-24 19:42:40
1119
3
原创 Nest.js权限管理系统开发(二)连接MySQL、Redis
前往下载最新版本的MySQL。打开系统设置,拉到最下方可以看到MySQL,打开看到两个绿点表示安装成功,也可以在这里修改MySQL密码。
2024-02-24 19:38:06
1582
ARKit by Tutorials, 2nd Edition
2019-05-21
iOS 7 App Development Essential
2013-11-27
iOS Programming: The Big Nerd Ranch Guide (4th Edition) (Big Nerd Ranch Guides)
2014-03-04
[cnswift.org翻译]最新swift 5.5中文翻译
2021-08-24
Effective Objective-C 2.0
2013-11-27
[cnswift.org翻译]最新swift 5.3中文翻译
2021-04-06
[cnswift.org翻译]最新swift 5.1中文翻译
2019-07-07
[cnswift.org翻译]最新swift 5中文翻译
2019-03-09
Apress.Beginning.Machine.Learning.in.iOS.CoreML.Framework
2019-02-22
[cnswift.org翻译]最新swift 4.2 alpha中文翻译
2018-08-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人