- 博客(42)
- 资源 (13)
- 收藏
- 关注
翻译 现代OpenGL教程 04 - 相机,向量,输入
http://huangwei.pro/2015-09/modern-opengl4/本篇教程中,我们会巩固上一篇所提到的矩阵和相机知识,并使用tdogl::Camera类来实现第一人称射击类型的相机。然后,我们会将相机与键盘和鼠标挂钩,使得我们可以移动和浏览3D场景。这里会学一些向量数学,还有上一篇没提到的逆矩阵。获取代码所有例子代码的zip打包可以从这里获取:https://github.com
2015-09-01 18:15:18 887
翻译 现代OpenGL教程 03 - 矩阵,深度缓冲,动画
http://huangwei.pro/2015-08/modern-opengl3/本文中,我会将不会动的2D三角形替换为旋转的3D立方体。你会看到这样的效果:现在我们终于能在屏幕上搞点有趣的东西了,我放了更多的动图在这里:http://imgur.com/a/x8q7R为了生成旋转立方体,我们需要学些关于矩阵的数学,用于创建透视投影,旋转,平移和“相机”概念。我们还有必要学习些深度缓冲,和典型的
2015-08-14 16:59:35 863
原创 游戏中的随机概率
http://huangwei.pro/2015-07/game-random/这段时间公司开发的游戏上线测试,许多玩家在抽卡时抱怨脸黑,很难抽到所需要的卡牌,而又有一部分玩家反应运气好能连着抽到紫卡,检查了下随机相关逻辑代码,并没有找出问题所在,玩家运气好与坏只是觉得真有可能是概率原因。测试开服了几天之后,需要开放某个限时抽卡活动,在内部测试时,我们发现玩家反应的问题在限时抽卡中格外明显,尤其是其
2015-08-10 15:20:22 1237
翻译 现代OpenGL教程 02 - 贴图
http://huangwei.pro/2015-08/modern-opengl2/在本文中,我们将给三角形加一个贴图,这需要在顶点和片段着色器中加入一些新变量,创建和使用贴图对象,并且学习一点贴图单元和贴图坐标的知识。本文会使用两个新的类到tdogl命名空间中:tdogl:Bitmap和tdogl:Texture。这些类允许我们将jpg,png或bmp图片上传到显存并用于着色器。tdogl:Pr
2015-08-10 15:18:17 763
翻译 现代OpenGL教程 01 - 入门指南
http://huangwei.pro/2015-05/modern-opengl1/ 译序早前学OpenGL的时候还是1.x版本,用的都是glVertex,glNormal等固定管线API。后来工作需要接触DirectX9,shader也只是可选项而已,跟固定管线一起混用着。现在工作内容是手机游戏,又转到OpenGL ES,发现OpenGL的世界已经完全不同了,OpenGL ES 2.0
2015-08-10 15:16:55 809
原创 代码阅读辅助工具
<br /><br />http://blog.huang-wei.com/2011/04/27/read-source-tool/<br /><br /> <br />做程序员的,每天要对着显示器上的行行代码<br />尤其是一份你从未写过、未读过的代码放在你的面前时,尼会感到似那样滴心力憔悴<br />这些还都算了,尼玛连个注释都没!!!文档呢!有木有啊!!<br />哥幼小的心灵在一大堆代码中接受着无数次的摧残~<br />其实大家在阅读代码时,尤其是C/C++代码<br />类结构、继承、函数调用等
2011-04-27 15:25:00 1716
原创 Windows Socket IO 模型
应用程序使用Winsock与传输协议驱动沟通时AFD.SYS负责缓冲区的管理。这就意味着当一个程序调用send或者WSASend发送数据时,数据将被复制到AFD.SYS它自己的内部缓冲区中(依赖SO_SNDBUF的设置)WSASend调用立即返回。然后AFD.SYS在程序后台将数据发送出去。当然,如果程序想要处理一个比SO_SNDBUF设置的缓冲区需求更大的发送请求,WSASend的调用就会阻塞直到所有的数据都被发送出去。
2010-11-21 12:07:00 949
原创 Bloom Filter 原理与应用
<br />http://blog.huang-wei.com/2010/11/02/bloom-filter/<br /> Bloom Filter 原理与应用介绍<br />Bloom Filter是一种简单的节省空间的随机化的数据结构,支持用户查询的集合。一般我们使用STL的std::set, stdext::hash_set,std::set是用红黑树实现的,stdext::hash_set是用桶式哈希表。上述两种数据结构,都会需要保存原始数据信息,当数据量较大时,内存就会是个问题。如果应用场景中允
2010-11-17 11:13:00 768
转载 C++中实现委托(Delegate)
<br />http://blog.huang-wei.com/2010/08/09/c%E4%B8%AD%E5%AE%9E%E7%8E%B0%E5%A7%94%E6%89%98%EF%BC%88delegate%EF%BC%89/<br /> C++中实现委托(Delegate)<br />公司的项目里有用到Don Clugston的FastDelegate,当时只知道是类似boost::function的东西,UI上当watcher用的比较多,所以也没去关注。今天想写个事件触发器时,突然想起这茬子,看来
2010-11-17 11:10:00 1603
原创 重载全局new/delete实现内存计数
http://www.huang-wei.com/blog/?p=419有时为了统计内存使用,或检测内存泄漏,重载全局的 new/delete 是一种比较简易的实现方法。让我们先来回顾下 new/delete 重载的相关内容吧。技术篇[::] new [placement] new-type-name [new-initializer][::] new [placement] ( type-name ) [new-initializer][::] delete cast-expression[::] del
2010-07-22 23:04:00 996
原创 双数组字典树的内存占用测试
http://www.huang-wei.com/blog/?p=437上一篇文章介绍了双数组字典树 DATrie,现在让我们来简单的测试下内存占用情况。测试用例,我选了The Holy Bible,数据文件大小为4.2MB。只记录英文单词,全部转为小写。words : 822,529u-words : 12,591nodes : 34,266trie-mem : 1,247,308datrie-mem : 483,376Trie的实现我已经做了一些优化,初始每个节点的指针数组 size 为0,当有节点插入
2010-07-22 23:01:00 1005
原创 Double-Array Trie(双数组字典树)
http://www.huang-wei.com/blog/?p=386Trie在ACM中已经十分普及,也是一种非常有效的索引结构,好处就不多说了。它的本质就是一个确定的有限状态自动机(DFA),关于它的实现也是有好几种,ACM中用的最多也是最容易实现的就是多路查找树。但是Trie最大的缺点就是占用空间过大,很容易爆内存,当然在ACM里对Trie树也有相应的优化,如限定高度,对分支较少的节点使用非随机访问的结构(减少宽度),但这些都是牺牲部分查找效率换取的。这里介绍一种实现,Double-Array Tri
2010-07-22 22:45:00 1461
原创 FZU 1538 神奇的数列
Problem 1538 神奇的数列 Time Limit:3sMemory limit:32M Accepted Submit:6Total Submit:19 光棍节那天,上帝可怜你依旧个光棍,决定赐予你爱情~~当然,天下
2007-11-21 14:41:00 1105
原创 最小树形图
吴文虎的图论算法上写的比较清楚还有wywcqs博客上也有很详细的解说了http://hi.baidu.com/wywcgs/blog/item/a1ce10f4a8fa366fdcc47462.html写了下O(VE)版本的,uva 11183 Ranking Submission
2007-09-15 19:43:00 2356 2
原创 Farey序列构造和查找
今天的Farey竟然挂掉了,实在咽不下这口气,晚上又整理了一下资料。以供大家一起学习。 Farey序列 Fn = {a/b | gcd(a,b)=1 && 0 即由小于或等于n的整数所组成的不可再约分数的递增序列,并满足分子分母互质。 如: F1 = {0/1, 1/1} F2 = {0/1, 1/2
2007-09-10 03:38:00 3669 4
原创 关于中国邮递员问题和欧拉图应用
关于中国邮递员问题和欧拉图应用 中国邮递员问题: 1962年有管梅谷先生提出中国邮递员问题(简称CPP)。一个邮递员从邮局出发,要走完他所管辖的每一条街道,可重复走一条街道,然后返回邮局。任何选择一条尽可能短的路线。这个问题可以转化为:给定一个具有非负权的赋权图G,(1)用添加重复边的方法求G的一个Euler赋权母图G*,使得尽可能小。(2)求G*的Euler 环游。人
2007-09-08 00:28:00 18102 2
转载 很好的RMQ,LCA文章
Range Minimum Query and Lowest Common Ancestor By danielp Introduction Notations Range Minimum Query (RMQ) Trivial algorithms for RMQ A solution Sparse Table (ST) algorithm Segment Tr
2007-09-05 20:46:00 2725 4
原创 关于数论中的互质数的最大不能组合数
最近看数论,转头重新思考了这题,参考了下论文和lrj的黑书,重新证明一遍,做个笔记。例题:HDOJ 1792 A New Change Problem题意:给定A和B,A和B互质,求最大不能组合数,和不能组合数的个数。基础知识:Gcd(A, B) = 1 → Lcm(A, B) = AB剩余类,把所有整数划分成m个等价类,每个等价类由相互同余的整数组成任何数分成m个剩余类,分别为 mk,mk+1,
2007-08-30 19:59:00 2553 1
原创 Number Theory 4.5 Relative Primality
当 gcd(m, n) = 1时,我们称 m和n互素。约定用 m⊥n来表示两者互素。m / gcd(m, n) ⊥ n / gcd(m, n)由 gcd和素数序列的关系我们可以得出k ⊥ m and k ⊥ n ←→ k ⊥ mn书上看到一种很好玩的一种构造算法。用来构造所有具有 m⊥n的非负分数 m/n集合,称为Stem-Brocot tree。建树思想是:从两个分
2007-08-21 22:23:00 800
原创 Number Theory 4.4 Factorial Factors
这个公式说明阶乘是以指数律增长。对于大的n,我们能用Stirling公式来精确近似n!。 误差是 1/(12*n)。从该表中,我们能得出对 n!求m的幂的迭代算法。特殊的,对于2的幂次来说,n!的2幂次等于n减去它本身二进制中1的个数。
2007-08-21 21:40:00 790
原创 Number Theory 4.3 Prime Examples
存在无限多个素数,欧几里德递归证明:Pn = P1P2...Pn-1 + 1,当 n≥1 前 n-1个素数中没有能除尽 Pn的,因为都每个能除尽 Pn-1。形如:2P-1 (P是素数)的数称为Mersenne numbers,中文名为梅森数如果该梅森数也是素数的话,就叫梅森素数。如果 n是合数,则数 2n-1不可能是素数。证明为:2km - 1 = (2m -1)(2m(k
2007-08-21 20:12:00 980
原创 线段树小结
这段时间是线段树专题。做了好些题目,发现线段树实在是太灵活了,可以根据题目所需添加一些信息或者调整一些构造或查询方法。 小结一下。 线段树用途:RMQ,线段求长,矩形交,矩形并等…… 线段树基本操作:建树,插入,删除,查询,更新,删树因为它是一棵二叉树,所以它的操作一般除了建树,删树是O(N),其余的都是O(LogN)的。这个复杂度基本能顺利解决卡时的问题。
2007-08-21 17:25:00 7160 5
原创 Number Theory 4.2 Primes
任何正整数 n都能记为素数乘积。n = p1p2...pm = ∏pk (1≤k≤m, p1≤...≤pm) 而且这个展开序列是唯一的。假定一个数 m可以用素数序列 表示k = mn ←→ kp = mp + np ,对所有的p而 m/n ←→ mp ≤ np ,对所有的p那就可知k = gcd(m, n) ←→ kp = min(mp, np) ,对所有的p k
2007-08-21 16:04:00 621
原创 Number Theory 4.1 Divisibility
Number Theory 4.1 Divisibility哈哈,第一篇,试写....最熟悉的一个概念,最大公约数gcd,k/m 表示k能除尽m注意“k能除尽m”和“m是k的倍数”并不完全一样,如k=0gcd(m, n) = max{k| k/m and k/n}; ①欧几里德算法的递归形式:gcd(0, n) = n; gcd(m, n) = gcd(n%m, m); m > 0 ②
2007-08-18 00:35:00 708
原创 关于网络流
昨天,确切的说应该是今天早上,搞到5点多,调试破了头还是没找出错误原因,早上醒来突发灵感,发现单位费用的边未反向,改后终于AC了,哈哈,开心啊,上阶段的练习算告一段落了。 网络问题基本都是找增广路,再更新,直到某个条件不再满足即停止。最大流(maxflow),每次找增广路P(augmented path),再找出增广路P中前向弧的最小剩余容量c(通俗点说就是瓶颈),更新各边,剩余网络
2007-08-16 20:59:00 1444 4
转载 Linux的kernel学习.1-启动
启动 目 录 启动 启动步骤 bootsect.S setup.S head.S compressed/misc.c 内核解压
2007-02-21 16:09:00 4743 2
原创 Bochs搭建GeekOS平台
一、前言最近接触的OS比较多,外加自己想多学点OS的知识,就在网上狂搜教学用的OS。除了Minix用VMware搭建外,看到还有个叫GeekOS的学习用OS,就拿来试试。 What is it?GeekOS is a tiny operating system kernel for x86 PCs. Its main purpose is to serve as a simple
2007-02-21 01:35:00 3710
原创 初试Cygwin
启动Cygwin以后,会在Windows下得到一个Bash Shell,由于Cygwin是以Windows下的服务运行的,所以很多情况下和在Linux下有很大的不同。先试试PS,这个命令相当于Windows下的任务管理器,呵呵,直接Ps的话那么得到的会是Cygwin下的Shell的进程如下:H.William.Sticker@huangwei-6848b9 ~$ ps PID
2007-02-20 21:25:00 1185
原创 使用Cygwin在windows搭建linux开发平台
What Is Cygwin?Cygwin is a Linux-like environment for Windows. It consists of two parts: A DLL (cygwin1.dll) which acts as a Linux API emulation layer providing substantial Linux API functiona
2007-02-20 20:58:00 2806
转载 Cygwin指南
1 引言cygwin是一个在windows平台上运行的unix模拟环境,是cygnus solutions公司开发的自由软件(该公司开发了很多好东西,著名的还有eCos,不过现已被Redhat收购)。它对于学习unix/linux操作环境,或者从unix到windows的应用程序移植,或者进行某些特殊的开发工作,尤其是使用gnu工具集在windows上进行嵌入式系统开发,非常有用。随着嵌入式系
2007-02-20 20:33:00 1224
转载 Linux简史
Linux简史原著:Ragib Hasan Department of Computer ScienceUniversity of Illinois at Urbana-Champaign 翻译:王晓林v2.2.0作于:2002年7月译于:2006年1月目录 混沌初开 呱呱坠地 谁与争锋 风雨十年
2007-02-20 19:28:00 973
转载 关于学习操作系统编程的一些建议
要想学深入学习操作系统,推荐从这本书开始: Operatiing Systmes, Design and Implementation (by Tanenbaum, Woodhull),里面有个用于教学的操作系统Minix。Linux的某些方面,现在还可以找到Minix的影子。现在书最新版是第三版。国内ms只有影印版的。Minix 3.0,也已经有点难度了, X Window System都有
2007-02-20 19:22:00 1798
转载 在Vmware上运行Minix3及中文说明
那么大家可以看看 http://www.minix3.org ,这个项目除了保持Minix的特点,比如微内核(内核4000行都不到,驱动都是用户态的),Minix3更加朝着实用性的方向发展,期望在一些嵌入式设备里面能有一席之地。 运行:大家在http://www.minix3.org/download/ 下载光盘映像,刻盘或者直接放在VMWARE里面开虚拟机运行就可以从光盘启动。
2007-02-17 14:23:00 2511
转载 存储器
2.2 存储器的管理模式Intel公司的80X86系列的CPU基本上采用内存分段的管理模式。它把内存和程序分成若干个段,每个段的起点用一个段寄存器来记忆,所以,学习微机汇编语言,必须要清楚地理解存储器的分段含义、存储单元的逻辑地址和其物理地址之间的转换关系。2.2.1 16位微机的内存管理模式1、存储器的分段我们知道:计算机的内存单元是以“字节”为最小单位进行线性编址的。为了标识每
2007-01-29 00:45:00 1117
转载 寄存器组
2.1 寄存器组寄存器是CPU内部重要的数据存储资源,是汇编程序员能直接使用的硬件资源之一。由于寄存器的存取速度比内存快,所以,在用汇编语言编写程序时,要尽可能充分利用寄存器的存储功能。寄存器一般用来保存程序的中间结果,为随后的指令快速提供操作数,从而避免把中间结果存入内存,再读取内存的操作。在高级语言(如:C/C++语言)中,也有定义变量为寄存器类型的,这就是提高寄存器利用率的一种可行的
2007-01-29 00:27:00 3564 2
转载 调试工具-CodeView
CodeViewCodeView是一个简单、直观的全屏幕调试工具,它可调试多种语言的源程序所生成的执行代码。其常用的调试功能如下所列。画面2.1 CodeView调试器的显示画面画面的左上窗口是调试器的主窗口,其显示被调试的源程序或执行代码,左下窗口是命令窗口,用户可输入各种DEBUG命令,右窗口是显示寄存器窗口,它可显示16位和32位寄存器的内容。当然还有其它窗口,如:内存窗口、
2007-01-29 00:01:00 4557
转载 调试工具-DEBUG
DEBUG启动DEBUG的一般命令如下:DEBUG 文件名 [参数表]其中:文件名指定被调试的文件,其包括名和后缀,参数表是被调试文件运行时所需要的参数。被调试的文件可以是系统中的任何文件,但通常它们的后缀为EXE或COM。当DEBUG启动成功后,将显示连接符“-”,这时,可输入各种命令。表1 DEBUG中标志位的符号表示
2007-01-28 23:57:00 1642
转载 宏汇编MASM系统
1.1、宏汇编MASM系统在宏汇编MASM系统中,程序员可用二种方法来处理源程序:命令行和集成环境。1.1.1 命令行命令1、编写源程序可用计算机系统中各种能编辑文本文件的编辑器来编辑汇编源程序。常用的编辑器有:EDIT、Q、Word、记事本和写字板等。源文件的后缀为:ASM。2、汇编程序当源程序编写好后,可用MASM命令来汇编该源程序。如果源程序没有语法错误,那么,将生成
2007-01-28 23:44:00 2573
搜索引擎的历史,现状和未来
2010-05-21
互联网海量数据存储及处理调研综述
2010-05-21
sqlite文件格式分析
2010-05-21
python301帮助文档
2009-08-20
Kleinberg《Algorithm Design》part3
2009-06-24
Kleinberg《Algorithm Design》part2
2009-06-24
Kleinberg《Algorithm Design》part1
2009-06-24
OfflineJudge
2007-11-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人