安装node.js 和 git 安装Node.js最简单的方式就是下载安装程序来安装。 使用Homebrew,MacPorts或下载安装程序安装,如果你的电脑上装了Xcode的话,则无需安装,Xcode自带Git。 检查是否安装成功 $ node -v v12.16.1 $ npm -v 6.13.4 $ Git --version git version 2.24.1 (Apple Git
OpenGL 文章汇总基础知识一、了解 OpenGL 常见专有名词二、屏幕卡顿 及 iOS中的渲染流程解析三、OpenGL 渲染架构分析四、深入剖析【离屏渲染】原理五、OpenGL 渲染技巧:正背面剔除六、OpenGL 渲染技巧:深度测试、多边形偏移、 混合七、OpenGL中观察方式与矩阵的关系八
常见的图形API目前比较常见的图形API主要有以下几种OpenGLOpenGL ESOPenCVDirectXMetal下面来具体介绍下各种API的特
写这篇文章的目的是为了自己做笔记,以免下次再出现同样的错误,如果对你有帮助,你可以接着往下看看。。。。1、配置APNs相关证书 关于相关证书的配置,参考的是网上的博客:http别
创建约束phoneNumLabel.snp.makeConstraints { (maker) in maker.left.equalToSuperview().offset(16) maker.top.equalToSuperview().offset(16)
在OpenGL ES 案例04:GLSL加载图片案例中,我们发现加载的图片是倒置的,如下图所示倒置的原因很简单,主要是由于纹理坐标的原点(0,0)是在左下角,而屏幕的坐标原点(0,0)是在左上角,形成倒置图形的过程如图所示下面介绍几种纹理倒置的解决方案方案一:图形顶点翻转180°,纹理保持原状图形顶点利用旋转矩阵旋转180°,如图所示在自定义的顶点着色器中实现顶点数据的翻转180°,需要将顶点 * 旋转矩阵,得到新的顶点坐标,在赋值给内建变量gl_Positionattribute v
本案例的主要目的是理解GLSL中如何索引绘图在介绍本案例之前,首先说说什么是索引绘图一个图形中,有许多顶点,例如本案例中的金字塔,有5个面,由6个三角形组成,一共有18个顶点,然而实际肉眼可见的只有5个顶点,如下图所示索引绘图技巧就是指将图形中的肉眼可见的顶点,通过索引的方式表示顶点之间的连接,将重复顶点复用进行图形绘制的一种技巧案例的整体效果图如下案例的整体流程如图所示主要包含三部分准备工作:主要是导入三方数学库以及全局变量的定义自定义着色器:自定义顶点、片元着色器layoutS
本文案例代码有OC及Swift版本,详情见文末链接,讲解以OC版本为主本案例的主要目的是理解GLKit中的索引绘图如果对索引绘图有不了解的,请先看OpenGL ES 案例05:GLSL使用索引绘图文章前半部分,有简要说明案例的效果如图所示[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5Dppo4C4-1596349638198)(https://upload-images.jianshu.io/upload_images/2251862-ee0529b898e4d.
本文案例代码有OC及Swift版本,详情见文末链接,讲解以OC版本为主本案例是在OpenGL ES 案例05:GLSL使用索引绘图案例的基础上新增纹理与颜色的混合填充功能整体效果图如下:这个案例的思路很简单,主要就是OpenGL ES 案例04:GLSL加载图片与OpenGL ES 案例05:GLSL使用索引绘图案例中功能结合的一个综合案例,下面主要针对新增的功能作一个说明如图所示,在案例05的基础上,作了以下修改注:图中标准的(!!!)即表示需要修改或者新增代码的位置主要需要修改和新增.
本文案例代码有OC及Swift版本,详情见文末链接,讲解以OC版本为主本案例是在OpenGL ES 案例06:GLKit使用索引绘图案例的基础上新增纹理与颜色的混合填充功能相比GLSL案例的纹理颜色填充,GLKit中就相对比较简单很多,因为大部分代码apple都已经封装好了,我们只需要使用即可整体案例的效果如下整个案例也是OpenGL ES 案例06:GLKit使用索引绘图与OpenGL ES 入门:GLKit加载图片案例综合的一个例子在原有代码的基础上,需要修改的整体图示如下主要也是在.
本文案例代码有OC及Swift版本,详情见文末链接本案例的目的是理解如何用GLSL实现分屏(2/3/4/6/9)滤镜案例的效果图如下准备工作自定义着色器完成无分屏滤镜的着色器代码顶点着色器attribute vec4 Position;attribute vec2 TextureCoords;varying vec2 TextureCoordsVarying;void main(){ gl_Position = Position; TextureCoordsV.
OpenGL ES 案例12:灰度+颠倒+马赛克(共5种)滤镜本案例的目的是理解如何用GLSL实现灰度+颠倒+马赛克(共5种)滤镜整体的效果图如下:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c4SodLTT-1597156566845)(https://upload-images.jianshu.io/upload_images/2251862-be323a8ac7062d5e.gif?imageMogr2/auto-orient/strip)]准备工作的代码与
本次案例的目的在于理解纹理的使用案例整体效果图如下整体流程图如图所示简单说下几个函数的作用main:这个不用多说,程序入口SetupRC:初始化数据LoadTGATexture:加载纹理MakePyramid:设置金字塔顶点数据及纹理坐标RenderScene:渲染函数,绑定纹理、绘制金字塔SpecialKeys:图形根据特殊键位的出发进行旋转ShutdownRC:清理数据,类似于iOS中的dealloc函数下面重点介绍下跟纹理相关的几个函数SetupRC函数函数流程图如下
本案例主要目的多个纹理如何使用,加深对纹理的使用的理解。整体的案例效果如图所示下面接着说说隧道的绘制过程,整体的流程图如下:其中main、ChangeSize、ShutdownRC就不多作说明,SetupRC:初始化背景色、着色器,生成纹理,并设置顶点及纹理坐标RenderScene:清理缓存、绑定纹理并绘制隧道SpecialKeys:根据上下键位,记录前后移动的深度值,并重新渲染ProcessMenu:根据选择的菜单选项,for循环更换所有纹理的过滤方式,并重新渲染SetupRC函
本案例的目的在于理解大长腿效果的实现以及图片的保存操作流程如下最终的效果图如下准备工作准备工作主要有3部分主控制器UI界面逻辑:主要是一些控件的操作自定义的GLKView(LongLegView):用于显示 & 更新纹理图片两个封装的工具类LongLegVertexAttribArrayBuffer:缓存区初始化&更新、准备绘制及绘制的封装LongLegHelper:着色器编译及连接的封装这部分内容,将不作说明,如有疑问,请参考文末完整代码大长腿实现 &a
注:Objective-C Runtime Programming Guide.一、介绍重要提示:此文档不再更新。有关Apple SDK的最新信息,请访问 文档网站。Objective-C语言将尽可能多的决策从编译时和链接时间延迟到运行时。只要有可能,它都是动态的。这意味着该语言不仅需要编译器,还需要运行时系统来执行编译后的代码。运行时系统作为Objective-C语言的一种操作系统;它使语言工作。这个文档介绍了NSObject类以及Objective-C程序如何与运行时系统交互。特别是,它检查了在
Objective-C程序在三个不同的层次与运行时系统交互:通过Objective-C源码;通过在基础框架的NSObject类中定义的方法;通过直接调用运行时函数。Objective-C 源码在大多数情况下,运行时系统在后台自动工作。您只需编写和编译Objective-C源代码就可以使用它。当您编译包含Objective-C类和方法的代码时,编译器将创建实现语言动态特性的数据结构和函数调用。数据结构捕获类和类别定义以及协议声明中的信息;它们包括在用 _Objective-C _编程语言 定义类和 协议
本章介绍如何将消息表达式转换为objc_msgSend函数调用,以及如何按名称引用方法。然后解释如何利用objc_msgSend,以及如果需要,如何绕过动态绑定。objc_msgSend 函数在Objective-C中,消息直到运行时才绑定到方法实现。编译器转换消息表达式,[receiver message]调用消息传递函数 objc_msgSend。此函数将接收方和消息中提到的方法的名称(即方法选择器)作为其两个主要参数:objc_msgSend(receiver, selector)消息
本章描述如何动态地提供方法的实现。动态方法解析在某些情况下,您可能希望动态地提供方法的实现。例如,Objective-C声明属性特性(请参阅 _Objective-C _编程语言中的 声明属性)包括@dynamic指令:@dynamic propertyName;它告诉编译器将动态提供与属性关联的方法。可以实现 resolveInstanceMethod:和 resolveClassMethod: 方法,分别为实例和类方法的给定选择器动态提供实现。Objective-C方法只是一个C函数,它
当编译器遇到属性声明(请参阅 _Objective-C _编程语言中 声明属性)时,它会生成与封闭类、类别或协议相关联的描述性元数据。您可以使用支持在类或协议上按名称查找属性、以**@encode**字符串形式获取属性类型以及以C字符串数组形式复制属性属性列表的函数来访问此元数据
向不处理该消息的对象发送消息是错误的。但是,在宣布错误之前,运行时系统会给接收对象第二次处理消息的机会。转发如果将消息发送到不处理该消息的对象,则在宣布错误之前,运行时会向该对象发送一个forwardInvocation:message,其中NSInvocation对象作为其唯一参数,NSInvocation对象将封装原始消息及其传递的参数。您可以实现f**orwardInvocation:**方法来给消息提供默认响应,或者以其他方式避免错误。顾名思义,**forwardInvocation:**通常
为了帮助运行时系统,编译器将每个方法的返回和参数类型编码为字符串,并将字符串与方法选择器相关联。它使用的编码方案在其他上下文中也很有用,因此可以通过**@encode()编译器指令公开使用。当给定类型规范时,@encode()**返回对该类型进行编码的字符串。类型可以是基本类型,如int、指针、带标记的结构或联合,也可以是任何类型的类名,事实上,任何类型都可以用作C sizeof()运算符的参数。char *buf1 = @encode(int **);char *buf2 = @encode(str
注: _Run Loops _链接一、介绍运行循环是与线程相关联的基本基础结构的一部分。运行循环是事件处理循环,可用于安排工作并协调收到的事件的接收。运行循环的目的是在有工作要做时让线程忙,而在没有工作时让线程进入睡眠状态。运行循环管理不是完全自动的。您仍然必须设计线程的代码以在适当的时候启动运行循环并响应传入的事件。 Cocoa和Core Foundation均提供运行循环对象,以帮助您配置和管理线程的运行循环。您的应用程序不需要显式创建这些对象。每个线程(包括应用程序的主线程)都有一个关联的运行循
三、 什么时候使用运行循环?唯一需要显式运行runloop的时间是为应用程序创建辅助线程时。应用程序主线程的运行循环是基础架构的重要组成部分。因此,应用程序框架提供运行主应用程序循环的代码,并自动启动该循环。iOS中 UIApplication(或osx中的 NSApplication)的run方法作为正常启动序列的一部分启动应用程序的主循环。如果您使用Xcode模板项目来创建应用程序,则永远不必显式调用这些例程。对于辅助线程,您需要确定是否需要运行循环,如果需要,请自行配置并启动它。您不需要在所有情况
[OC RunLoop_翻译]一、介绍 & 二、剖析运行循环[OC RunLoop_翻译]三、 什么时候使用运行循环 & 四、使用运行循环对象[OC RunLoop_翻译]五、配置运行循环源注: _Run Loops _链接下面的部分展示了如何在Cocoa和corefoundation中设置不同类型的输入源的示例5-1、定义自定义输入源创建自定义输入源需要定义以下内容:希望输入源处理的信息.调度程序,让感兴趣的客户知道如何联系您的输入源.处理程序,用于执行任何客户端发.
Objective-C RuntimeObjective-C runtime是一个运行库,它提供对Objective-C语言的动态属性的支持,因此所有Objective-C应用程序都链接到它。Objective-C运行库支持函数在位于/usr/lib/libobjc.A.dylib的共享库中实现。在Objective-C中编程时,通常不需要直接使用Objective-C运行时库。此API主要用于开发Objective-C和其他语言之间的桥接层,或用于低级调试。Objective-C运行库的macO.
iOS 底层原理 文章汇总主要NSObject中的alloc是与自定义类的alloc的源码流程的区别,以及为什么NSObject中的alloc不走源码工程。在上一篇文章中分析了alloc的源码,这篇文章是作为对上一篇文章的补充,去探索为什么NSObject的alloc方法不走源码工程。NSObject的alloc无法进入源码的问题首先在objc4-781可编译源码中的main函数中增加一个NSObject定义的对象,NSObject 和 LGPersong同时加上断点在alloc的源码实
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号