RXSwift源码浅析(一)简述最近老大给了个新项目,我打算用Swift写.原来OC用的RAC,换到Swift自然框架也想试试新的,就用了RXSwift,对于这两个框架,我都是会用,但不解其中的原理,正好最近需求没下来,就研究了研究RXSwif,把自己的收获分享一下,文中要有不准确的地方还望大家多多指正~
关于RXSwift是什么和怎么用我就不废话了,网上资源很多,本文先从Observable实现原理入手,旨在以小见大,后面的Single什么的自然举一反三~
使用Demo下面是一段简单使用Observable的代码
123456789101112let numbers: Observab...
简述本文记录我记录我学习 坐标体系和矩阵转换的过程,加深学习便于后续查询,可能有些描述不够准确,或者内容不够充实,还请多多指正,共同学习.
光源分类在基础光照时,学习了光照对物体的作用,也就相当于物体的材质,这次主要说 现实生活中的光源
平行光当光源无限远时,从其发射过来的的光可以近似的看做平行光(例如太阳);这时 光线的方向都是一致的.
1234567891011121314151617181920212223242526272829303132float ambientStrength = 0.3; //环境因子 float specularStrength = 2.0; ...
简述本文记录我记录我学习 坐标体系和矩阵转换的过程,加深学习便于后续查询,可能有些描述不够准确,或者内容不够充实,还请多多指正,共同学习.
颜色一个没有Alpha通道的颜色可以用一个3维向量来表示 例如 glm::vec3(1.0,1.0,1.0); 表示白色.
在现实世界中,一个物体的颜色是它反射的颜色导致的, 例如我们将纯红光 照射在纯绿物体上, 因为红光都被吸收,所以显示为黑色.
将吸收反射的过程用向量表示出来
123glm::vec3 lightColor(0.0f, 1.0f, 0.0f); //绿色光源向量glm::vec3 objColor(1.0f, 0.5f, 0.31...
简述本文记录我记录我学习 坐标体系和矩阵转换的过程,加深学习便于后续查询,可能有些描述不够准确,或者内容不够充实,还请多多指正,共同学习
矩阵变换我们将物体坐标进行一系列变换,达到自己期望的位置,需要使用到矩阵.先说一下矩阵的公式.这里我是本着了解的心态去学习的,因为已经有趁手的数学工具了,把重要的学完~ 我会再来研究这里的.
矩阵相乘这是一个简单的矩阵相乘例子,这是矩阵乘法过程~
注意:
1, 矩阵相乘不遵守交换律 即 A B ≠ B A2, 只有当左侧矩阵列数 等于 右侧矩阵行数 两矩阵才能相乘.
在我们对坐标进行缩放,位移,旋转 等变换时,我们多用4x4矩阵来进行~
缩放我...
简介纹理是用来丰富我们绘制物体细节的,它可以是一张2D图片(除了图像外,纹理也被用来存储大量数据,传递到着色器上),就像贴图一样贴在绘制的物体上.
纹理属性纹理坐标为了将纹理映射到绘制的物体上,我们需要指定 某个顶点对应着 纹理的那个位置. 通过纹理坐标,标明顶点从纹理图像那一部分采样,之后在图形的其它片段进行片段插值.
纹理坐标系和顶点坐标系有所不同,顶点坐标系 (0,0)点位于窗口中心. 纹理坐标系 (0,0)点位于 纹理左下角.
顶点坐标系
纹理坐标系
纹理环绕方式当我们将顶点位置设置到纹理坐标之外时,则需要设置纹理环绕方式 来显示纹理图案
环绕属性
效果
GL_RE...
简介Uniform是一种从CPU中的应用向GPU中的着色器发送数据的方式,但uniform和顶点属性有些不同。
首先,uniform是全局的(Global)。全局意味着uniform变量必须在每个着色器程序对象中都是独一无二的,而且它可以被着色器程序的任意着色器在任意阶段访问。第二,无论你把uniform值设置成什么,uniform会一直保存它们的数据,直到它们被重置或更新。
单独统一变量声明uniform vec3 color
赋值12345//获取指定统一变量的locationint vertexColorLocation = glGetUniformLocation(_prog...
概述EAGLContext对象是管理OpenGL ES渲染上下文,若想使用OpenGL ES 进行绘制工作,则必须一个上下文对象.
API初始化12- (nullable instancetype) initWithAPI:(EAGLRenderingAPI) api;- (nullable instancetype) initWithAPI:(EAGLRenderingAPI) api sharegroup:(EAGLSharegroup*) sharegroup NS_DESIGNATED_INITIALIZER;
参数:
api 表示将要使用的OpenGL ES 版本. kEAG...
简介本文记录了我初学Opengl 绘制彩色矩形的过程,可能我对内容的描述不够准确,还请多多指正
实现配置图层123+(Class)layerClass{ return [CAEAGLLayer class];}
将当前View的Layer替换成 CAEAGLLayer类,opengl的绘制内容也是在该View上显示的.
1234//设置不透明度为YES,因为透明图层性能不好self.layer.opaque = YES;self.layer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKe...
YYAsyncLayer 学习简介YYAsyncLayer是用于图层异步绘制的一个组件,将耗时操作(如文本布局计算)放在RunLoop空闲时去做,进而减少卡顿.
组件内容YYAsyncLayer主要有3个类.
1, YYTransaction,负责将 YYAsyncLayer委托的绘制任务在RunLoop空闲时执行.
2, YYSentine, 是一个线程安全的计数器,在进行队列分配和任务取消时作为参考使用
3, YYAsyncLayer, 将其替换为View的Layer类,实现异步绘制
YYTransaction+ (YYTransaction *)transactionWithT...
iOS进程信息 – NSProgressInfo NSProcessInfo *processInfo = [NSProcessInfo processInfo];
//获取运行该进程的参数
NSArray *arr = [processInfo arguments];
NSLog(@"运行该程序的参数为:%@", arr);
//获取该进程的进程标示符
NSLog(@"该程序的进程标示符(PID)为:%d", [processInfo processIdentifier]);
//获取该进程的进程名
NSLog(@&q...