在之前的教程中我们学习了如果当相机不位于初始位置时,如何使得得场景中的物体正确的投影到屏幕上面,那么我们下一步就应该学着去控制这个相机,使得相机可以在场景中自由移动。我们可以用鼠标和键盘控制相机——鼠标控制视口方向,键盘控制相机的位置。这些都和第一人称视角相似,这一节我们主要来学习鼠标和键盘对相机的控制。 我们仍然使用上下左右四个方向键。记住,我们的相机的变换取决于相机的位置、target 向量和
使用简单的纯文本文件只能实现有限的功能。没错,使用它们可以做很多事情,但有时需要额外的功能。你可能想要自动序列化,这时可以选择shelve模块(见第十章)和pickle(与shelve模块关系密切)。但有时,可能需要比这更强大的特性。例如,可能想自动地支持数据并发访问——想让几个用户同时对基于磁盘的数据进行读写而不造成任何文件损坏这类的问题。或者希望同时使用多个数据字段或属性进行复杂的搜索,而不是
运动模糊在现如今的 3D 游戏中是一项非常流行的技术,他主要是为运动的物体添加一个模糊效果,增强了玩家真实感。运动模糊有多种实现方式,有的是基于相机来实现,主要专注于相机的运动;有的是基于对象的,在这一课中会学习其中一种方法来完成这个功能。 运动模糊背后的原理就是我们可以计算出两帧之间每个像素运动的向量(即运动矢量)。通过沿着这个运动矢量在当前颜色缓存中进行采样并对他们取平均值就能得到代表当前物体
在 23 和 24 课中我们学习了阴影纹理,这是一个相对简单的在 3D 世界中实现阴影的方法。阴影纹理在处理点光源产生的阴影的时候有一些缺陷,因为在生成阴影纹理的时候我们需要一个方向向量,但是对于点光源来说它产生的光线的方向是朝向所有方向的,所以要得到这样一个向量比较困难。但是还有其他方法可以解决这个问题,这个方法会比较复杂一点但同时它也可以用于聚光灯光源上,这个方法就是模板阴影体,这个技术是由
本节重点 处理下拉框 switch_to_alert() accept() 下拉框是我们最常见的一种页面元素,对于一般的元素,我们只需要一次就定位,但下拉框里的内容需要进行两次定位,先定位到下拉框,再定位到下拉框内里的选项。 drop_down.html <html><body><select id="ShippingMethod" onchange="updateShipping(opti
随着多媒体技术的迅猛发展和PC性能的大幅度提高,在PC机上运行的应用程序越来越多地采用了多媒体技术.如果你编写的应用程序能够发出美妙的声音,播放有趣的动画,无疑将会给人留下深刻的映象. Windows 95提供了对多媒体编程的良好支持,本章将帮助读者迅速掌握一些实用的多媒体编程技术,主要的内容包括: 调色板 位图 依赖于设备的位图(DDB) 与设备无关的位图(DIB) 动画控件 媒体控制接
导语 WebKit是一个开源的浏览器引擎。Qt中提供了基于WebKit的QtWebKit模块,它包含了一组相关的类。QtWebKit提供了一个Web浏览器引擎,使用它便可以很容易的将万维网(WorldWide Web)中的内容嵌入到Qt应用程序中。与此同时,本地也可以对Web内容进行控制。QtWebKit可以呈现HTML(HyperTextMarkup Language,超文本标记语言)文档、XH
接口的改变,是一个需要程序员们必须(虽然很不情愿)接受和处理的普遍问题。程序提供者们修改他们的代码;系统库被修正;各种程序语言以及相关库的发展和进化。我孩子的无数玩具中有一个简要地描述了这个两难局面:你无法合理安排一个不得其所的人。 问题 你如何避免因外部库的API改变而带来的不便?假如你写了一个库,你能否提供一种方法允许你软件的现有用户进行完美地升级,即使你已经改变了你的API?为了更好地适宜于
“渲染到纹理”是一系列特效方法之一。基本思想是:像通常那样渲染一个场景——只是这次是渲染到可以重用的纹理中。 应用包括:游戏(in-game)相机、后期处理(post-processing)以及你能想象到一切. 渲染到纹理 我们有三个任务:创建要渲染的纹理对象;将纹理渲染到对象上;使用生成的纹理。 创建渲染目标(Render Target) 我们要渲染的对象叫做帧缓存。它像一个容器,用来存纹理和一
基本概念 界面设计人员经常把UI、GUI等词汇挂载嘴边,那么到底什么是GUI?另外你可能还听说过HUD,HUD又是什么? 首先上结论:UI > GUI > HUD UI UI是User Interface的缩写,也是User Interaction的缩写。UI涵盖一切用户和机器交互的内容,如果把计算机程序抽象为“输入-处理-输出”这个过程,那么UI负责的就是“输入”和“输出”。 用户交互包含了用户
我在写这本书时的一个目标,就是尽量少教些Python。如果有两种实现方法,我会挑其中之一讲解,避免再提另一种方法。有时候可能会将第二种方法放在练习题里。 现在我想回过头来讲一些之前没有涉及的内容。Python提供的特性中,有一些其实并不是必须的——没有它们你也能写出好的代码——但是有了它们之后,有时候你能写出更简洁、可读性更高或者效率更高的代码,有时候甚至三个好处都有。 条件表达式 在有条件的执行
如果能把我们想做的东西写到一个文件或脚本中,并且像执行其他操作系统命令一样执行的话通常会非常方便。一些重量级的程序通常以脚本的形式提供接口,用户可以经常编写他们自己的脚本或修改已有的脚本来满足特定的需求。毫无疑问大部分的编程任务都以脚本的形式来执行。对于很多用户而言,这是他们唯一会做的编程了。 Unix或DOS等操作系统(以及Windows系统提供的命令行接口)都提供了脚本的机制。但是这些脚本语言
关联表是Scheme一种特殊形式的列表。列表的每一个元素都是一个点对,其中的car(左边的元素)被称为一个“键”,cdr(右边的元素)被称为和该键关联的值。例如: ((a . 1) (b . 2) (c . 3)) 调用程序(assv k al)能在关联表al中找到和键k关联的CONS单元。在查找时关联表中的键与k使用eqv?过程来比较。然而有时我们可能希望自定义一个键的比较函数。例如,如果键是不
本章的目标是完成一个简单的 HTML 生成器 —— 这个程序可以自动生成一系列包含超文本链接的网页。除了介绍特定 Lisp 技术之外,本章还是一个典型的自底向上编程(bottom-up programming)的例子。 我们以一些通用 HTML 实用函数作为开始,继而将这些例程看作是一门编程语言,从而更好地编写这个生成器。 16.1 超文本标记语言 (HTML) HTML (HyperText M
描述 服务端请求伪造,或者 SSRF,是一种类型,它允许攻击者使用目标服务器来代表攻击者自己执行 HTTP 请求。这和 CSRF 类似,因为两个漏洞都执行了 HTTP 请求,而不被受害者察觉。在 SSRF 中,受害者是漏洞服务器,在 CSRF 中,它是用户的浏览器。 这里的潜力非常大,包括: 信息暴露,其中我们欺骗服务器来暴露关于自身的信息,在示例 1 中使用 AWS EC2 元数据描述。 XSS