所有文章

从比并 JSON 库谈开源意义
在开发 RapidJSON 期间,我建立了另一开源项目 nativejson-benchmark,至今已整合 41 个 C/C++ JSON 开源库,评测它们对标准符合程度以及性能。本文先谈一下评测结果,再谈这个项目的意义。 阅读内容 ›

RapidJSON v1.1.0 发布简介
时隔 15.6 个月,终于发布了一个新版本 v1.1.0。 阅读内容 ›

RapidJSON 代码剖析(四):优化 Grisu
我曾经在知乎的一个答案里谈及到 V8 引擎里实现了 Grisu 算法,我先引用该文的内容简单介绍 Grisu。然后,再谈及 RapidJSON 对它做了的几个底层优化。 阅读内容 ›

RapidJSON 代码剖析(三):Unicode 的编码与解码
RapidJSON 希望尽量支持各种常用 UTF 编码,用四百多行代码实现了 5 种 Unicode 编码器/解码器,另外加上 ASCII 编码。 阅读内容 ›

RapidJSON 代码剖析(二):使用 SSE4.2 优化字符串扫描
现在的 CPU 都提供了单指令流多数据流(single instruction multiple data, SIMD)指令集。最常见的是用于大量的浮点数计算,但其实也可以用在文字处理方面。其中,SSE4.2 包含了一些专为字符串而设的指令。我们通过使用这些指令,可以大幅提升某些 JSON 解析的性能。 阅读内容 ›

RapidJSON 代码剖析(一):混合任意类型的堆栈
大家好,这个专栏会分析 RapidJSON中一些有趣的 C++ 代码,希望对读者有所裨益。 阅读内容 ›

实际软件工程中是否真的需要100%代码覆盖率(code coverage)?
以下是我的个人经历,可以作为一个案例参考。最后尝试总结。 阅读内容 ›

SIGGRAPH Asia 2014 见闻之《高效地使用大量光源于实时着色》课程
在 SIGGRAPH Asia 2014 中,《高效地使用大量光源于实时着色(Efficient Real-TimeShading with Many Lights)》是和游戏技术最接近的课程之一。三位主讲分别是 Ola Olsson(瑞典查尔姆斯理工大学博士)、Emil Persson(Avalanche Studios研究部负责人)、Markus Billeter(瑞典查尔姆斯理工大学博士候选人)。课程内容比较前向、延迟、分块、群组和相关技术实现大量动态光源的渲染管道。由于现时未获演讲稿的电子版本,笔者尽量以记忆及相关文献简单介绍一下本课程的重点。 阅读内容 ›

如何用 C 语言画一棵圣诞树
Sierpinski 三角形 阅读内容 ›

如何用 C 语言画一个心形
基础版 阅读内容 ›

《代码本色》推荐序
我们在这个行星上已经生活了数十年,虽然不一定对这个世界的自然规律有深入的理解,但肯定已经习以为常。例如在足球比赛中,我们能欣赏到美妙的曲线任意球。如果足球在空中突然直角转向,我们一定会觉得很“不自然”。又例如,我们有时候能看到上千只鸟集体飞翔,它们并不是乱飞一通,而是按照某种规律组成不断变形的群体。如果它们互相碰撞而掉下来,我们很可能会怀疑它们是否生病,做出这些“不自然”的行为。 阅读内容 ›

以体素建构三维游戏世界
体素除了能应用于像《我的世界(Minecraft)》形式的游戏,还可以有更细致的表现,成为下一代的三维游戏世界构成方式,本文从技术角度分析当中的原理及相关技术。 阅读内容 ›

《游戏引擎架构》译序
数千年以来,艺术家们通过文学、绘画、雕塑、建筑、音乐、舞蹈、戏剧等传统艺术形式充实人类的精神层面。自20世纪中叶,计算机的普及派生出另一种艺术形式──电子游戏。游戏结合了上述传统艺术以及近代科技派生的其他艺术(如摄影、电影、动画),并且完全脱离了艺术欣赏这种单向传递的方式──游戏必然是互动的,“玩家”并不是“读者”、“观众”或“听众”,而是进入游戏世界、感知并对世界做出反应的参与者。 阅读内容 ›

检测点是否在扇形之内
前几天,同事在报告中提及检测角色是否在扇形攻击范围的方法。我觉得该方法的性能不是太好,提出另一个颇为直接的方法。此问题在游戏中十分常见,只涉及简单的数学,却又可以看出实现者是否细心,所以我觉得可当作一道简单的面试题。问题在微博发表后得到不少回应,故撰文提供一些解答。 阅读内容 ›

爱丽丝的发丝──《爱丽丝惊魂记:疯狂再临》制作点滴
今天(2011年6月14日)是《爱丽丝惊魂记:疯狂再临 (Alice: Madness Returns) Xbox360/PlayStation3/PC》(下简称《爱》)正式发售日,身为其开发程序员之一,特撰此文以作纪念。 阅读内容 ›

我的游戏人生
我是在香港土生土长、现于上海工作的游戏程序员。有曰人生如戏,当代若说人生如游戏或更有共鸣。然而,我们是这游戏的玩家而不是设计师,世事往往并非各遂其愿,却又带来无尽惊喜。游戏中与其以赚取货币提升等级为目标,不如享受过程,尽兴而归。适逢其会,有缘和大家分享我的成长点滴。 阅读内容 ›

手机分配短讯id的面试题目(下篇:分析解答)
看过《上篇:厘清需求》,读者想到多少个解呢?本篇首先谈及一些基本分析,之后会按两种 API 设计(纯函数 API 和含状态的 API),分别描述多个解。虽然面试时或许不能进行实际测试,但本文还是给出 PC 上的效能测试结果。最后分析比较各解之优劣作为总结。 阅读内容 ›

手机分配短讯id的面试题目(上篇:厘清需求)
前阵子,笔者在 TopLanguage 论坛里参与讨论了一个不错的面试题目,在此和大家分享,也当作个人的讨论总结。本文列出该问题,并模拟应试者向面试官的对话,以厘清问题需求。 阅读内容 ›

C++强大背后
在31年前(1979年),一名刚获得博士学位的研究员,为了开发一个软件项目发明了一门新编程语言,该研究员名为Bjarne Stroustrup,该门语言则命名为——C with classes,四年后改称为C++。 阅读内容 ›

12年前的作品──《美绿中国象棋》制作过程及算法简介
这个游戏是大学本科二年级时(1998年)修人工智能课程的功课 。这个游戏的「棋力」并不高,主要是因为没有花时间在调整的工作上。比较满意的部分是使用 OpenGL 做的使用者介面。本文将简单介绍制作本游戏的过程及当中用到的算法。 阅读内容 ›