摘要:约在20世纪70年代以前,编译器编译源代码产生目标文件时,符号名与相应的变量和函数的名字是一样的。比如一个汇编源代码里面包含了一个函数foo,那么汇编器将它编译成目标文件以后,foo在目标文件中的相对应的符号名也是foo。当后来UNIX平台和C语言发明时,已经存在了相当多的使用汇编编写的库和目标文件。这样就产生了一个问题,那就是如果一个C程序要使用这些库的话,C语言中不可以使用这些库中定义的函数和变量的名字作为符号名,否则将会跟现有的目标文件冲突。比如有个用汇编编写的库中定义了一个函数叫做main,那么我们在C语言里面就不可以再定义一个main函数或变量了。同样的道理,如果一个C语言的目标文件
阅读全文
摘要:“C”或者“C++”函数在内部(编译和链接)通过修饰名识别。修饰名是编译器在编译函数定义或者原型时生成的字 符串。有些情况下使用函数的修饰名是必要的,如在模块定义文件里头指定输出“C++”重载函数、构造函数、析构函数,又如在汇编代码里调用“C””或“C ++”函数等。修饰名由函数名、类名、调用约定、返回类型、参数等共同决定。调用约定调用约定(Calling convention)决定以下内容:函数参数的压栈顺序,由调用者还是被调用者把参数弹出栈,以及产生函数修饰名的方法。MFC支持以下调用约定:_cdecl按从右至左的顺序压参数入栈,由调用者(#add 即函数外部的另一个函数)把参数弹出栈。对
阅读全文
摘要:0,完整实例#include "wx/wx.h"// 定义应用程序类class MyApp : public wxApp{public: // 这个函数将会在程序启动的时候被调用 virtual bool OnInit();};// 定义主窗口类class MyFrame : public wxFrame{public: // 主窗口类的构造函数 MyFrame(const wxString& title); // 事件处理函数 void OnQuit(wxCommandEvent& event);void OnAbout(wxCommandEvent&am
阅读全文
摘要:第二十六章:基于给定的文档生成倒排索引的编码与实践作者:July、yansha。出处:结构之法算法之道引言 本周实现倒排索引。实现过程中,寻找资料,结果发现找份资料诸多不易:1、网上搜倒排索引实现,结果千篇一律,例子都是那几个同样的单词;2、到谷歌学术上想找点稍微有价值水平的资料,结果下篇论文还收费或者要求注册之类;3、大部分技术书籍只有理论,没有实践。于是,朋友戏言:网上一般有价值的东西不多。希望,本blog的出现能稍稍改变此现状。 在第二十四章、倒排索引关键词不重复Hash编码中,我们针对一个给定的倒排索引文件,提取出其中的关键词,然后针对这些关键词进行Hash不重复编码。本章,咱们再..
阅读全文
摘要:以下文章翻译自Ian Joyner所著的《C++?? A Critique of C++ and Programming and Language Trends of the 1990s》 3/E【Ian Joyner 1996】该篇文章已经包含在Ian Joyner所写的《Objects Unencapsulated 》一书中(目前已经有了日文的翻译版本),该书的介绍可参见于:http://www.prenhall.com/allbooks/ptr_0130142697.htmlhttp://efsa.sourceforge.net/cgi-bin/view/Main/ObjectsUnen
阅读全文
摘要:下面是一个基于glut的OpenGL程序框架,用的是正投影,可以方便的通过参数设置Frustum的大小。通常可以用来做二维的demo,比如二维填充算法演示等等。 //迈克老狼整理,参考3D Graphics书
#include <stdlib.h>
#include <stdio.h>
#include <GL/glew.h> // muse be placed before glut. gkd
#include <GL/glut.h> // OpenGL Graphics Utility Library // These variables c
阅读全文
摘要:Ogre采用树桩管理场景中的各种"元素"(摄像机、灯光、物体等),所有的东西都挂在"树"上,不在"树"上的东西不会被渲染。Ogre::SceneManager就是"树"的管理者,Ogre::SceneNode是从SceneManager中创建的(当然BSP和8*树的管理也和这两个类有关,这暂时不讨论)。AABB(轴对齐包围盒)这个东西是碰撞检测的基础,和它类似的还有OBB(有向包围盒),由于OBB创建复杂,所以Ogre采用了AABB。最简单的碰撞检测:通过Ogre::SceneNode::_getWorldAABB
阅读全文
摘要:当我们双击一个txt文件的图标时,系统就会用记事本打开该文件,这就是程序的关联。那我们自己编写的程序如何建立关联文件呢?第一步:设置自己程序关联的文件类型打开资源下的String Table,找到其中的IDR_MAINFRAME,双击该项,修改它的值,设它原来的值是:TextEditor\n\nTextEd\n\n\nTextEditor.Document\nTextEd Document若你关联的文件类型为.txt,则把它改为:TextEditor\n\nTextEd\n\n.txt\nTextEditor.Document\nTextEd Document第二步:在操作系统中注册自己的程序
阅读全文
摘要:如果一个变量你需要几种可能存在的值,那么就可以被定义成为枚举类型。之所以叫枚举就是说将变量或者叫对象可能存在的情况也可以说是可能的值一一例举出来。举个例子来说明一吧,为了让大家更明白一点,比如一个铅笔盒中有一支笔,但在没有打开之前你并不知道它是什么笔,可能是铅笔也可能是钢笔,这里有两种可能,那么你就可以定义一个枚举类型来表示它!enumbox{pencil,pen};//这里你就定义了一个枚举类型的变量叫box,这个枚举变量内含有两个元素也称枚举元素在这里是pencil和pen,分别表示铅笔和钢笔。 这里要说一下,如果你想定义两个具有同样特性枚举类型的变量那么你可以用如下的两种方式进行定义!.
阅读全文
摘要:自从计算机游戏出现以来,程序员就不断地想办法来更精确地模拟现实世界。就拿乒乓游戏为例子(译者:Pong—被誉为电子游戏的祖先,有幸见过一次:),能见到祖先做的游戏感觉真是爽啊,想看的可以到FTP上下载“地球故事”就可以看到了:),游戏中有一个象征性的小方块(球)和两支拍子,游戏者需要在恰当的时间将拍子移动到恰当的地点,将小球反弹回去。这个基本操作的背后(以现在的标准来看)就是最原初的碰撞检测了。今天的游戏比“乒乓”要高级得多,并且基本上是基于3D的。3D游戏中的碰撞检测比“乒乓”游戏里的要更加难实现。玩一些早期模拟飞行游戏的体验向我们展现出糟糕的碰撞检测是如何毁灭一个游戏的。当穿过一座大山的尖
阅读全文
摘要:几乎所有的3D游戏都离不开碰撞检测——无论是各物体之间的碰撞检测,还是物体与场景之间的碰撞检测。在真实世界中,你是很自然地不能穿墙而过的,所以很多人在玩各种3D游戏的时候自然而然的忽视了碰撞检测这一过程的存在。然而,碰撞检测的过程是重要的。如果没有它,你在CS中就会毫无遮拦的飞来飞去——如果考虑重力的话,则会一直不停地往下掉,直到符点数溢出(或你受不了这一漫长的过程而离开游戏)为止。碰撞检测是在编程时实现的。不要以为碰撞检测是在显示3D图像的同时由显卡完成的——这是幼稚的看法——现在没有什么硬件能支持碰撞检测。 看了这些后你可能对碰撞检测产生了兴趣,或者你作为一个3D编程爱好者正在寻找碰撞检.
阅读全文
摘要:反向动力学,Inverse Kinematics,简称IK。简单地说,由父骨骼的方位和子骨骼的相对变换得到子骨骼的方位,称为正向动力学(Forward Kinematics,FK);而IK则是先确定子骨骼的方位,反向推导出其继承链上n级父骨骼方位的方法。IK在游戏里最常见的应用是foot placement,就是当角色站在一个不平的表面上(台阶,斜坡)时,自动调整两脚的高低(当然,同时会影响小腿和大腿的姿态)以便看上去脚是真正“踩”在地面上的,而不是浮在空气中或者陷入地面以下。如果不用IK的话,要解决这个问题就只能为所有可能的地形起伏情况制作不同的角色动作,其工作量是不可想象的。另外的应用就是
阅读全文
摘要:参见http://www.opengpu.org/forum.php?mod=forumdisplay&fid=8【题外话:这里只是记录我学习该书的体会,既不是直译,也不是意译,而是顺着作者的思路,把自己理解的东西再讲述出来,对于可能出现的误解会用原文说明。】第一章介绍关于渲染,有很多方式。大致有三类:基于物理学的渲染(Physically based):着力于模拟现实。就是说,用物理学的原理搭建关于光和物质交互的模型,追求真实感是该类方法的首要任务。交互式渲染(Interactive):为了高性能和低延迟而牺牲真实感的渲染。 非真实感的渲染(Nonphotorealistc)。这是为
阅读全文
摘要:摘要:随着人们对应用程序的要求越来越高,单进程应用在许多场合已不能满足人们的要求。编写多进程/多线程程序成为现代程序设计的一个重要特点,在多进程程序设计中,进程间的通信是不可避免的。MicrosoftWin32API提供了多种进程间通信的方法,全面地阐述了这些方法的特点,并加以比较和分析,希望能给读者选择通信方法提供参考。关键词进程进程通信IPCWin32API1进程与进程通信 进程是装入内存并准备执行的程序,每个进程都有私有的虚拟地址空间,由代码、数据以及它可利用的系统资源(如文件、管道等)组成。多进程/多线程是Windows操作系统的一个基本特征。MicrosoftWin32应用编程接口.
阅读全文
摘要:导读:国产网游正在漫漫成长起来,这其中,有很多具有代表性的国产网游特色的设定,虽然表面上看是方便玩家,但深究起来,这些设定也有可能是毁掉国产网游毒瘤。 一、自动寻路说到最具代表性的中国特色的网游设定,自动寻路当仁不让。这一设定美其名曰是简化玩家操作、完善游戏体验,实则对游戏是种很大的伤害。一般来说,网游多是MMORPG,这种游戏旨在构建一个架空世界,玩家从中获取一种异样人生的体验。对这个世界的探索,照理来说应是游戏乐趣的一大来源,但赶路和找人确实件烦人的事情。国外的设计师们为了解决这一问题,就把游戏地图探索变得更有趣,把游戏中的移动变得更多样化,以此来弥补玩家的枯燥旅途。但中国设计师明显要..
阅读全文
摘要:以下为winsock。1. socket网络编程分为客户端和服务器端,客户端发送请求,服务器端进行应答; 建立连接时,服务器端绑定端口监听(bind&listen),客户端发送连接请求(connect),然后服务器端接受请求accept,至此客户端和服务器端可以收发消息。 需要注意: 1)创建socket前需要调用WSAStartup,对socket进行初始化。 2)服务器端的accept函数,第三个参数addrlen既是输出,也是输入参数,所以需要有初值sizeof(sockaddr); accept(SOCKET s, struct sockaddr FAR * addr,int
阅读全文
摘要:一. 种类:标准STL序列容器:vector、string、deque和list。标准STL关联容器:set、multiset、map和multimap。非标准序列容器slist和rope。slist是一个单向链表,rope本质上是一个重型字符串非标准关联容器hash_set、hash_multiset、hash_map和hash_multimap。几种标准非STL容器,包括数组、bitset、valarray、stack、queue和priority_queue值得注意的是,数组可以和STL算法配合,因为指针可以当作数组的迭代器使用。二.删除元素如果想删除东西,记住remove算法后,要加上
阅读全文
摘要:一、什么是GNOME、 GNOME的意思是“GNU Network Object Model Environment”(GNU网络对象模型环境),是Linux世界令人激动的软件开发成果。虽然它的名字比较长,但这个软件项目的目的却很简单,那就是实现一个永恒友好的、功能强大的用户和开发桌面环境,而这一环境又完全是以免费的开源代码软件为基础的。正像它名字的那样,GNOME既是一个桌面,也是一个完整的程序设计环境。GNOME是底层X窗口系统和高层管理器软件中间的一个程序设计界面,它向GUI程序员提供了丰富的功能和强大的开发工具,这些工具是传统意义上的Linux所缺乏的。二、什么是GIMP、GTK+GN
阅读全文
摘要:记得以前面试的时候被问到一个问题:“你平时业余时间有没有读过什么开源的代码,谈谈是如何读的?以及有什么收获”。问题很好,当时却答得不怎么样,可能那时经历有限,也一直记着这个问题,常常在思考,现在写一些简单体会。我觉得读代码有几个步骤,刚开始就说去看架构文档,我觉得那是扯蛋,如果你基本没有看过里边的几行代码,架构是看不出来的,文档看过之后,似乎也没太大作用,过后即忘。唯有多花些时间,在代码里来回查找各种引用、调用关系,以及诸多函数的实现细节后,才会慢慢有所感觉,才能接近于理解其架构。所以我的观点是先看代码,再看文档,而不是相反。我觉得有这么几个层次:1,框架的主要类,这些类是读代码的入口,从文档
阅读全文
摘要:因本人英文阅读速度实在太慢,只好看中文,最近在看一些译文,看得真是费力,可又不愿总是翻原文,于是和原文对着读,把里边认为不合适的译法一一校正。觉得有些原则还是要遵守:1,统一:英文原文用一个词,则中文不应该时而译为A,时而译为B,即使是近义词。2,不要删改添加修饰:尽一切可能忠实原文,原文如果备受青赖,一定有他的很多优点,甚至是几乎没有缺点,有些人译着译着,时而少一段,时而漏一句,比如一章总结就故意不译,这是不负责任的行为。3,不要打错字:这对于用拼音的人来说错的相当多,翻译完却不花一点时间来校验,费那么大劲翻译一本书,应该鼓励,可是如果几个月的时间都花了,再花一两天时间来校验下拼写错误,岂不
阅读全文
摘要:宏观,即系统设计与架构;微观,即算法精确实现,两条路,选一条坚定地走下去,可有所成。夹在中间的则是添砖加瓦的码农,如果不脱离这个层次,则只能面临淘汰。我,似乎适合宏观,天赋所致。框架先这么定,具体以后再详述。
阅读全文
摘要:第二十五章:二分查找实现(Jon Bentley:90%程序员无法正确实现)作者:July出处:结构之法算法之道引言 Jon Bentley:90%以上的程序员无法正确无误的写出二分查找代码。也许很多人都早已听说过这句话,但我还是想引用《编程珠玑》上的如下几段文字: “二分查找可以解决(预排序数组的查找)问题:只要数组中包含T(即要查找的值),那么通过不断缩小包含T的范围,最终就可以找到它。一开始,范围覆盖整个数组。将数组的中间项与T进行比较,可以排除一半元素,范围缩小一半。就这样反复比较,反复缩小范围,最终就会在数组中找到T,或者确定原以为T所在的范围实际为空。对于包含N个元素的表,整个查找
阅读全文
摘要:第二十三、四章:杨氏矩阵查找,倒排索引关键词Hash不重复编码实践作者:July、yansha。编程艺术室出品。出处:结构之法算法之道。前言 本文阐述两个问题,第二十三章是杨氏矩阵查找问题,第二十四章是有关倒排索引中关键词Hash编码的问题,主要要解决不重复以及追加的功能,同时也是经典算法研究系列十一、从头到尾彻底解析Hash表算法之续。 OK,有任何问题,也欢迎随时交流或批评指正。谢谢。第二十三章、杨氏矩阵查找杨氏矩阵查找 先看一个来自算法导论习题里6-3与剑指offer的一道编程题(也被经常用作面试题,本人此前去搜狗二面时便遇到了): 在一个二维数组中,每一行都按照从左到右递增的...
阅读全文
摘要:本文来源于我在InfoQ中文站翻译的文章,原文地址是:http://www.infoq.com/cn/news/2011/12/scala-ejb2近日,Joda Time库的开发者与JSR 310 Java语言日期时间改进的规范领导Stephen Colebourne就Scala语言的适用性发表了一篇令人深思的文章。他比较了Scala与EJB 2,并认为EJB 2是Java EE规范的低谷。...大量的样板代码、XML和复杂性已经渗透到了Java产业中。规范已被广泛采纳,但与这种采纳相伴的却是批评。开发者发现虽然EJB 2试图通过抽象的更高层的API来降低构建企业应用的复杂性,但事实上,它却
阅读全文
摘要:六之再续:KMP算法之总结篇(必懂KMP)作者:July。出处:http://blog.csdn.net/v_JULY_v/。引记 此前一天,一位MS的朋友邀我一起去与他讨论快速排序,红黑树,字典树,B树、后缀树,包括KMP算法,唯独在讲解KMP算法的时候,言语磕磕碰碰,我想,原因有二:1、博客内的东西不常回顾,忘了不少;2、便是我对KMP算法的理解还不够彻底,自不用说讲解自如,运用自如了。所以,特再写本篇文章。由于此前,个人已经写过关于KMP算法的两篇文章,所以,本文名为:KMP算法之总结篇。 本文分为如下六个部分:第一部分、再次回顾普通的BF算法与KMP算法各自的时间复杂度,并两相对照各自
阅读全文
摘要:Nginx源码剖析之内存池,与内存管理作者:July、dreamice、阿波、yixiao。出处:http://blog.csdn.net/v_JULY_v/。引言 Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,最初供俄国大型的入口网站及搜寻引擎Rambler(俄文:Рамблер)使用。 其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,目前中国大陆使用nginx网站用户有...
阅读全文