背景本章讲述三维渲染管线中的一个非常重要的部分——插值,它是光栅器对从顶点着色器中输出的变量所做的操作。正如你已经看到的,为了在屏幕上得到一些有意义的东西,你需要在顶点着色器(VS)中为 OpengGL 的一个内置变量 “gl_Position” 指定值。这个变量是一个四维向量,它里面存放的是顶点的其次坐标。
背景缩放矩阵也很简单!它的作用是放大或缩小物体的尺寸!在很多情况下,你可能想对某些对象做这些处理,例如,当你想用同一模型产生一些差异(大树和小树本质上是一样的),亦或你想将物体的尺寸与其现实世界的尺寸联系起来!对于上面的例子,你可能想使点的三个坐标分量进行相同的缩放。然而,有时候你可能只想缩放两个坐标轴上的分量,导致模型变“厚”或“薄”。
背景接下来的变换是旋转变换,就是说给定一个角度和点,我们将点绕着一个坐标轴旋转。在旋转过程中发生变化的总是x,y,z三个坐标里面的其中两个,而不让第三个坐标值变化。这意味着,旋转路径总在三个坐标轴平面中的一个之中:绕 Z 轴的是 xy 面、绕 X 轴的是 yz 面、绕 Y 轴的是 xy 面。
背景这一课中我们来看一看如何在三维场景中对场景中的物体进行各式各样的变换,并且在保持场景的立体感的情况下将其渲染到屏幕上去!常见的方法是用矩阵表示每一个变换, 之后将它们挨个儿相乘,最后乘以顶点位置产生最后的结果!接下来的每一章都将着重介绍一种转变。
Background在本教程中我们将接触到一个新的着色器变量类型——一致变量。属性变量与一致变量之间的区别:属性变量包含顶点特性数据所以每次调用shader都会从顶点缓冲区中重新导入新的数据,而一致变量中的值在整个绘制过程中都保持不变。这意味着我们在绘制过程之前就为一致变量赋值并且在着色器的每次调用中都可以访问这个相同的值。
Background从这一节开始,我们要加入的所有效果都会使用 Shaders 来实现,Shaders 是进行三维图形学编程的先进方法,从某种意义上来说 Shader 的出现是图形学中的一种”退步”,因为在这之前所有的功能都直接由固定管线提供,而开发人员只需要为其指定参数(如光照属性、旋转角度等),但是由于 Shader 的出现这些功能现在都需要开发者自己通过 Shader 实现。
Background这一节是非常短的。我们简单的扩展上一节的内容来画一个三角形。在这一节中我们再一次在规范化空间中安排我们的顶点坐标。能够看见的顶点一定要在盒子内部,这样视口矩阵才能将这些顶点映射到窗口可以看见的地方。当我们忽略 Z 轴时,我们看到的盒子如下图: 点(-1.0,-1.0)是被映射到窗口的左下角,(-1.0,1.0)被映射到窗口的左上角等等。
背景这将是我们第一次遇到 GLEW,GLEW 是OpenGL的扩展功能库。它能帮助你解决OpenGL不断扩展的问题。一旦你初始化它之后,它在你的系统上将查询所有可用的扩展功能,自动的加载它们并且通过一个单一的头文件提供简单的接口。在这一节中,我们将第一次看见顶点缓冲区对象(VBOs)的使用。顾名思义,它们是被用来储存顶点数据的。加载顶点进入 GPU 最有效率的方法是 VBOs。
BackgroundOpenGL 标准没有指定任何用于建立和使用窗口的 API。在x系统中提供 OpenGL 的接口为 GLX。Windows 提供 WGL 而 MacOS 提供 CGL。为了建立一个能够显示图像的窗口,我们直接使用这些接口,这样就不用关心在不同操作系统中的具体实现细节。我们这里使用的库叫 ‘OpenGL utility library’ 简称 GLUT。
翻译: http://ogldev.atspace.co.uk/index.html (连载)OpenGL是一个跨编程语言、跨平台的专业图形程序接口,是一个功能强大,调用方便的底层图形库。
这部分介绍一些正处于试验阶段的 Scrapy 特性, 这些特性所涉及到的函数接口等还不够稳定, 但会在以后的发布版中趋于完善。所以在使用这些特性过程中需更谨慎,并且最好订阅我们的邮件列表以便接收任何有关特性改变的通知。虽然这些特性不会频繁的被修改,但是这部分文档仍有可能是过时的、不完整的或是与已经稳定的特性文档重复。所以你需要自行承担使用风险。
当你抓取了你要的数据(Items),你就会想要将他们持久化或导出它们,并应用在其他的程序。这是整个抓取过程的目的。为此,Scrapy 提供了 Item Exporters 来创建不同的输出格式,如 XML,CSV 或 JSON。使用 Item Exporter如果你很忙,只想使用 Item Exporter 输出数据,请查看 Feed exports。
内置异常参考手册(Built-in Exceptions reference)下面是 Scrapy 提供的异常及其用法。DropItemexception scrapy.exceptions.DropItem该异常由 item pipeline 抛出,用于停止处理 item。详细内容请参考 Item Pipeline。CloseSpiderexception scrapy.exceptions.CloseSpider(reason='cancelled')该异常由 spider 的回调函数(callback)抛出,来暂停/停止 spider。
Scrapy 使用信号来通知事情发生。您可以在您的 Scrapy 项目中捕捉一些信号(使用 extension)来完成额外的工作或添加额外的功能,扩展 Scrapy。虽然信号提供了一些参数,不过处理函数不用接收所有的参数 - 信号分发机制(singal dispatching mechanism)仅仅提供处理器(handler)接受的参数。您可以通过信号(Signals) API 来连接(或发送您自己的)信号。
Scrapy 设定(settings)提供了定制 Scrapy 组件的方法。您可以控制包括核心(core),插件(extension),pipeline 及 spider 组件。设定为代码提供了提取以 key-value 映射的配置值的的全局命名空间(namespace)。设定可以通过下面介绍的多种机制进行设置。设定(settings)同时也是选择当前激活的 Scrapy 项目的方法(如果您有多个的话)。内置设定列表请参考内置设定参考手册。
新版功能。该节文档讲述 Scrapy 核心 API,目标用户是开发 Scrapy 扩展(extensions)和中间件(middlewares)的开发人员。Crawler APIScrapy API 的主要入口是 Crawler 的实例对象,通过类方法 from_crawler 将它传递给扩展(extensions)。该对象提供对所有 Scrapy 核心组件的访问,也是扩展访问 Scrapy 核心组件和挂载功能到 Scrapy 的唯一途径。
扩展框架提供一个机制,使得你能将自定义功能绑定到 Scrapy。扩展只是正常的类,它们在 Scrapy 启动时被实例化、初始化。扩展设置(Extension settings)扩展使用 Scrapy settings 管理它们的设置,这跟其他 Scrapy 代码一样。通常扩展需要给它们的设置加上前缀,以避免跟已有(或将来)的扩展冲突。
Spider 中间件(Middleware)下载器中间件是介入到 Scrapy 的 spider 处理机制的钩子框架,您可以添加代码来处理发送给 Spiders 的 response 及 spider 产生的 item 和 request。激活 spider 中间件要启用 spider 中间件,您可以将其加入到 SPIDER_MIDDLEWARES 设置中。该设置是一个字典,键位中间件的路径,值为中间件的顺序(order)。
下载器中间件是介于 Scrapy 的 request/response 处理的钩子框架。 是用于全局修改 Scrapy request 和 response 的一个轻量、底层的系统。激活下载器中间件要激活下载器中间件组件,将其加入到 DOWNLOADER_MIDDLEWARES 设置中。该设置是一个字典(dict),键为中间件类的路径,值为其中间件的顺序(order)。这里是一个例子:DOWNLOADER_MIDDLEWARES = { 'myproject.
本文档介绍了 Scrapy 架构及其组件之间的交互。概述接下来的图表展现了 Scrapy 的架构,包括组件及在系统中发生的数据流的概览(绿色箭头所示)。下面对每个组件都做了简单介绍,并给出了详细内容的链接。数据流如下所描述。组件Scrapy Engine引擎负责控制数据流在系统中所有组件中流动,并在相应动作发生时触发事件。 详细内容查看下面的数据流(Data Flow)部分。
关注时代Java