- 博客(515)
- 资源 (21)
- 收藏
- 关注
原创 Lua内置库的实现(一)_string模块
Lua的string库相较其它许多动态语言的string库来说,可谓短小精悍。不到千行C代码就实现了一个简单使用的字符串模式匹配模块。虽然功能上比正则表达式有所欠缺,但考虑到代码体积和功能比,这应该是一个相当漂亮的平衡(C 语言社区中常用的正则表达式库PCRE的个头整体比lua的实现还要大好几倍)。若需要更强大的字符串处理功能,Lua的作者之一Roberto给出了一个比正则表达式更强大的选择LPEG 6。有这一轻一重两大利器,在Lua社区中,很少有人再用正则表达式了。string模块实现在lstrlib.c
2017-04-22 18:02:57 2052
转载 C#常用函数表
1、DateTime 数字型 System.DateTime currentTime=new System.DateTime(); 1.1 取当前年月日时分秒 currentTime=System.DateTime.Now; 1.2 取当前年 int 年=currentTime.Year; 1.3 取当前月 int 月=currentTime.Month; 1.4 取当前日 int 日=currentTime.Day; 1.5 取当前时 int 时=currentTime.Hour;
2017-04-21 17:01:32 638
原创 OpenGL函数_ glColor函数颜色
在OpenGl中设置颜色,一般可以使用glColor3f()。从函数名字就可以看出,它的参数应该有三个,类型是float型的。另外一点是它的参数值的范围是[0.0,1.0]一般的,可以将这三个参数值视为颜色的成分。0.0 -- > 不使用颜色成分;1.0 -- > 使用颜色的最大值
2017-04-13 19:17:10 9060 1
原创 Lua内置库的实现(一)_math模块(二)_math模块API实现
math模块内的各个数学函数的实现中规中矩,就是使用的Lua手册里给出的API来实现的。 Lua的扩展方式是编写一个原型为int lua_CFunction (lua_State *L)的函数。L对于使用者来说,不必关心其内部结构。实际上,公开API定义所在的lua. h中也没有lua_State的结构定义。对于一个用C编写的系统,模块化设计的重点在于接口的简洁和稳定。数据结构的细节和内存布局最好能藏在实现层面,Lua的API设计在这方面做了一个很好的示范。这个函数通常不会也不建议被C程序的其它部分直接调用
2017-04-12 19:25:10 1802
转载 OpenGL单缓冲与双缓冲的区别
单缓冲,实际上就是将所有的绘图指令在窗口上执行,就是直接在窗口上绘图,这样的绘图效率是比较慢的,如果使用单缓冲,而电脑比较慢,你回到屏幕的闪烁。 双缓冲,实际上的绘图指令是在一个缓冲区完成,这里的绘图非常的快,在绘图指令完成之后,再通过交换指令把完成的图形立即显示在屏幕上,这就避免了出现绘图的不完整,同时效率很高。一般用OpenGL绘图都是用双缓冲,单缓冲一般只用于显示单独的一副非动态的图像
2017-04-07 10:50:55 4264
转载 OpenGL函数_ gl.glenable()详细介绍
glEnable 用于启用各种功能。功能由参数决定。与glDisable相对应。glDisable是用来关闭的。两个函数参数取值是一至的。参数说明:void glEnable(GLenum cap)GLenum 是unsigned int 类型cap 是一个取值。由值决定启用的功能键。各种功能请看参数cap的取值表
2017-04-07 10:42:06 15452 1
原创 OpenGL---GLUT教程(二) GLUT初始化
Void glutInit(int*argc,char**argv);//初始化Void glutInitWindowPositon(int x,int y);//窗口位置(它默认的是屏幕左上角),X: 距离屏幕左边的像素数。Y:距离屏幕上边的像素数,默认值都是-1。Void glutInitWindowSize(int width,int height); //设置窗口大小Void glutInitDisplayMode(unsighed int mode); // 定义显示方式Int glutC
2017-04-06 18:57:49 1476
原创 OpenGL_GLUT(一)_vs2013中配置gult库
GLUT 代表OpenGL Utility Tookit。Mark J.Kilgard 为了使OpenGL应用程序结构能够真正独立于窗口系统构思了GLUT库。感谢GLUT,使我们可以写程序而不必去学关于X windows或者微软自己的窗口系统。Kilgard在X windows上应用这个库,后来Nate Robins把它扩展到微软的窗口系统。
2017-04-06 18:20:25 1132
转载 opengl库中gl glu glut glaux的区别
OpenGL中的gl库是核心库,glu是实用库,glut是实用工具库。gl是核心,glu是对gl的部分封装,glut是OpenGL的跨平台工具库。gl中包含了最基本的3D函数,而glu似乎对gl的辅助,如果算数好,不用glu的情况下,也是可以做出同样的效果。glut是基本的窗口界面,如果不喜欢用glut可以用MFC和Win32窗口等代替,但是glut是跨平台的,这就保证了我们编出的程序是跨平台的,如果用MFC或者Win32只能在windows操作系统上使用。选择OpenGL的一个很大原因就是因为它的跨
2017-04-06 16:26:59 1410
原创 Lua内置库的实现(一)_math模块(一)_从math模块看Lua的模块注册机制
Lua5.2自带了几个库,实现了一般应用最基本的需求。这些库的实现仅仅使用了Lua官方手册中提到的API,对Lua核心部分的代码几乎没有依赖,所以最易于阅读。阅读这些库的实现,也可以加深对Lua API的印象,方便我们自己扩展Lua。 注意:在看这个之前要先了解Lua和C之间的交换数据的机制,因为Lua和C之间交互有2个问题:1.动态和静态类型系统的不匹配,2.自动和手动内存管理的不一致。(Lua 与C调用点击连接) 数学库是最简单的一个。它导入了若干数学函数,和两个常量pi与huge。下
2017-04-05 20:38:51 1691
原创 Lua内嵌库概念
作为嵌入式语言,其实完全可以不提供任何库及函数。全部由宿主系统注入到State中即可。也的确有许多系统是这么用的。但Lua的官方版本还是提供了不少必要的库。尤其是一些基础函数如pairs,error,setmetatable,type等等,完成了语言的一些基本特性,几乎很难不使用。 而coroutine,string,table,math等等库,也很常用。Lua提供了一套简洁的方案,允许你自由加载你需要的部分,以控制最终执行文件的体积和内存的占用量。主动加载这些内建库进入lua_State
2017-04-05 16:12:31 934
原创 Lua代码翻译及预编译字节码
Lua在早期几乎都是被用来嵌入到其它系统中使用,所以源代码通常被编译成动态库或静态库被宿主系统加载或链接。但随着Lua的第三方库越来越丰富,人们开始倾向于把Lua作为一门独立语言来使用。Lua的官方版本里也提供了一个简单的独立解析器,便是lua.c所实现的这个。并有luac.c实现了一个简单的字节码编译器,可以预编译文本的Lua源程序。
2017-04-04 17:37:16 5453
原创 Lua代码风格
Lua使用Clean C[5](Clean C是标准C/C++的一个子集。它只包含了C语言中一些必要特性。这样方便把Lua发布到更多的可能对C语言支持不完整的平台上。比如,对于没有 ctype.h 的C语言编译环境,Lua提供了 lctype.c 实现了一些兼容函数。)编写的源代码模块划分清晰,大部分模块被分解在不同的 .c 文件中实现,以同名的.h文件描述模块导出的接口。比如,lstring.c实现了Lua虚拟机中字符串池的相关功能,而这部分的内部接口则在lstring.h中描述。
2017-04-01 11:47:13 891
原创 Lua 源文件划分
从官网下载到Lua 的源代码后,展开压缩包,会发现源代码文件全部放在src子目录下。这些文件根据实现功能的不同,可以分为四部分。1.虚拟机运转的核心功能2.源代码解析以及预编译字节码3.内嵌库4.可执行的解析器,字节码编译器
2017-03-31 18:21:56 716
转载 C/C++ typedef用法
typedef 声明,简称 typedef,为现有类型创建一个新的名字。比如人们常常使用 typedef 来编写更美观和可读的代码。所谓美观,意指 typedef 能隐藏笨拙的语法构造以及平台相关的数据类型,从而增强可移植性和以及未来的可维护性。在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。
2017-03-31 17:39:05 578
原创 计算机图形学(四)几何变换_4_二维复合变换_2_矩阵合并特性
因此,依靠变换的描述次序,既可以使用从左到右(前乘),也可以使用从右到左(后乘)的结合分组来求矩阵乘积。有些图形软件包要求变换按应用的次序描述。 在这种情况下,先引入变换M1,然后M2,最后M3。在每一个连续的变换子程序被调用时,其矩阵从左边与前面的矩阵乘积合并。而另一些图形系统是后乘矩阵,因此该变换序列按相反次序引入;最后引入的变换(本例中是M1)是最先应用的,而第一个被调用的变换(此时是M3)是最后应用的。
2017-03-31 16:52:46 2180
转载 模板与泛型的区别
泛型和模板都提供支持参数化类型的语言功能。但是,它们是不同的,有不同的用途。本主题提供了一个概述的许多差异。泛型是通用的,直到它们在运行时类型取代。模板是专门在编译的时候,所以他们不仍然在运行时的参数化类型。特别是公共语言运行库支持仿制药在MSIL。由于运行时知道仿制药,具体类型可以被取代时,泛型类型的引用程序集包含一个泛型类型。相比之下,模板,解决成普通类型在编译时产生的类型可能不会专门在其他组件中。 专门在两个不同的组件与同类型参数的泛型是相同的类型。专门在两个不同的组件与同类型参数的模板被认为是由运行
2017-03-31 11:43:42 3716 2
转载 c++关键字之:volatile
volatile 是“易变的”、“不稳定”的意思。volatile是 c++ 的一个关键字,用来解决在“共享”环境下容易出现的读取错误的问题。在单任务的环境中,一个函数体内部,如果在两次读取变量的值之间的语句没有对变量的值进行修改,那么编译器就会设法对可执行代码进行优化。由于访问寄存器的速度要快过RAM(从RAM中读取变量的值到寄存器),以后只要变量的值没有改变,就一直从寄存器中读取变量的值,而不对RAM进行访问。
2017-03-30 19:19:09 786
转载 C++ STL 详细总结
从逻辑层次来看,在STL中体现了泛型化程序设计的思想(generic programming),引入了诸多新的名词,比如像需求(requirements),概念(concept),模型(model),容器(container),算法(algorithmn),迭代子(iterator)等。与OOP(object-oriented programming)中的多态(polymorphism)一样,泛型也是一种软件的复用技术;从实现层次看,整个STL是以一种类型参数化(type parameterized)的方式
2017-03-30 17:01:30 769
转载 用1 x 2的多米诺骨牌填满M x N的矩形有多少种方案,M<=5,N<2^31,输出答案mod p的结果
我们以M=3为例进行讲解。假设我们把这个矩形横着放在电脑屏幕上,从右往左一列一列地进行填充。其中前n-2列已经填满了,第n-1列参差不齐。现在我们要做的事情是把第n-1列也填满,将状态转移到第n列上去。由于第n-1列的状态不一样(有8种不同的状态),因此我们需要分情况进行讨论。
2017-03-29 18:40:47 8019 2
原创 计算机图形学(四)几何变换_4_二维复合变换(上)
利用矩阵表达式,可以通过计算单个变换的矩阵乘积,将任意的变换序列组成复合变换矩阵(compsite transformation matrix)。形成变换矩阵的乘积经常称为矩阵的合并(concatenation)或复合(compsistion)。由于一个坐标位置用齐次列矩阵表示,我们必须用表达任一变换次序的矩阵前乘该列矩阵。由于场景中许多位置用相同的顺序变换,先将所有变换矩阵相乘形成一个复合矩阵将是高效率的方法。因此,如果我们要对点位置P经行两次变换,变换后的位置将用下式计算。只有相对于坐标原点缩放的缩放
2017-03-29 18:06:39 5989 2
原创 计算机图形学(四)几何变换_3_矩阵逆变换
旋转角的负值生成顺时针方向的旋转,因而当任何旋转矩阵和其逆旋转矩阵相乘时生成单位矩阵。由于旋转角符号的变化仅影响sin函数,因此该逆矩阵可以通过交换行和列来获得。即我们可以做任何旋转矩阵R的转置矩阵来得到它的逆矩阵(R-1= RT)。 将缩放系数用其倒数取代就得到了缩放变换的逆矩阵。对以坐标系原点为中心,缩放参数为Sx和Sy的二维缩放,其逆变换矩阵为
2017-03-28 18:14:33 6311
原创 计算机图形学(四)几何变换_2_矩阵表示_2_二维矩阵
图形软件中的一种替代方法是在旋转子程序中为基准坐标提供另外的参数。然后,包含基准点参数的旋转子程序建立一个不需要引入一系列变换函数的通用旋转矩阵。 缩放操作S(sx,sy)是方程中以sx和sy参数为3*3矩阵。多数情况下,我们可以缩放矩阵表示成S。有些软件包尽可能有些软件包仅提供如方程所示的以坐标系原点为中心的缩放函数。在这种情况下,以另一参考点为中心的缩放变换通过一系列变换操作来处理。然而,有些系统也包括通用的缩放子程序,可以指定点为中心的缩放构造齐次函数。
2017-03-27 20:43:57 3954
原创 计算机图形学(四)几何变换_2_矩阵表示_1_矩阵表示和齐次坐标
如果将2x2矩阵表达式扩充为3x3矩阵,就可以把二维几何变换的乘法和平移项组合成单一矩阵表示。这时将变换矩阵的第三列用于平移项,而所有的变换公式可表达为矩阵乘法。但为了这样操作,必须解释二维坐标位置到三元向量的矩阵表示。标准的实现技术是将二维坐标位置表示(x,y)扩充到三维表示(xh,yh, h),称为齐次坐标(homogeneous coordinate),这里的齐次参数(homogeneous parameter)h是一个非零值
2017-03-14 19:19:10 5123
原创 C#中关于String类型的常用方法
Equals(string value)返回一个BOOL型,比较是否相等,和"=="类似Compareto(string value)判断大小,大返回1 小返回-1 相等返回0IndexOf(string value)在当前字符串里找到这个字符,从第一个开始找,找到就返回第一次找到所在的索引,如果找不到返回-1例: 1123 如果找1的话 返回0
2017-03-13 19:19:16 3035
原创 计算机图形学(四)_几何变换_1_基本的二维几何变换(三)_缩放
改变一个对象的大小,可使用缩放(scaling)变换。一个简单的二维缩放操作可通过将缩放系数(scaling factor)Sx 和 Sy与对象坐标位置(x, y)相乘而得: 在缩放公式中包含固定点的坐标,类似于在旋转公式中包含基准点的坐标。我们可以建立一个其元素为方程(5.14)中常数项的列向量,然后将这个列向量加到等式(5.12)中的乘积S*P上。下一节将讨论仅包含矩阵乘法的变换方程的矩阵形式。 多边形的缩放可以通过将变换方程(5.14)应用于每个顶点,然后利用变换后的顶点重
2017-03-09 18:34:41 9421
原创 计算机图形学(四)_几何变换_1_基本的二维几何变换(二)_旋转
类似于平移,旋转是一种不变形地移动对象的刚体变换,对象上的所有点旋转相同的角度。线段的旋转可以通过将旋转方程5用于每个线段端点,并重新绘制新端点间的线段而得到。多边形的旋转则是将每个顶点旋转指定的旋转角,并使用新的顶点来生成多边形而实现旋转。曲线的旋转通过定位定义的点并重新绘制曲线而完成。例如圆或椭圆,可以通过将中心位置沿指定旋转角对着的弧移动而绕非中心轴旋转。椭圆可通过旋转其长轴和短轴来实现绕其中心位置的旋转。
2017-03-03 16:46:41 8438
原创 计算机图形学(四)_几何变换_1_基本的二维几何变换(一)
几何变换有时也称为建模变换(modeling transformation ),但有些图形系统将两者区分开来。建模变换一般用于构造场景或给出由多个部分组合而成的复杂对象的层次式描述等。例如,一架飞机由机翼、机尾、机身、发动机和其他部分组成,每一部分又可描述成第二级组合体,如此等等,在层次结构中逐层往下描述。因此,该飞机可用那些部件及附属于每个部件的“建模”变换来描述,这些变换指出那些部件如何适用于整个飞机的设计。另一方面,几何变换能用来描述动画序列中对象在场景中可以怎样移动或简单地从另一角度来观察它们。因此
2017-03-02 19:26:50 3449
原创 计算机图形学(三)_图元的属性_章节总结(下)
glutInitDisplayMode 选择颜色模式,GLUT_RGB或GLUT_INDEXglColor* 指定一个RGB或RGBA颜色glIndex* 用颜色表索引指定一个颜色glutSetColor(index, r, g, b); 将一个颜色装入一个颜色表位置glEnable(GL_BLEND); 激活颜色调和glBlendFunc(sFact, dFact); 指定颜色调和因子glEnableClientState 激活OpenGL颜色数组设施(GL_COLOR_ARRAY); g
2017-03-01 16:00:10 915 1
原创 计算机图形学(三)_图元的属性_章节总结(上)
由于扫描转换是光栅系统的一个数字化过程,因此显示图元有阶梯效应。这是由于将坐标值取整到像素位置造成的信息低取样所形成的。我们可通过应用调整像素强度的反走样过程来改善光栅图元的外貌。过取样是一种实现反走样的方法。即将每一像素看作为子像素的组合并计算每一子像素的强度及所有子像素的平均值。我们还可按子像素的位置来确定其贡献权值,给中心以最高权值。另一种选择是,进行区域取样并确定一个屏幕像素的区域覆盖百分比,然后设定与该百分比成比例的像素亮度。另一种反走样方法是构造能移动像素位置的硬件配置。
2017-02-28 19:27:08 1762
原创 固定渲染管线与可编程渲染管线
1.固定渲染管线与可编程渲染管线的区别: 1)、固定渲染管线 ——这是标准的几何&光照(T&L)管线,功能是固定的,它控制着世界、视、投影变换及固定光照控制和纹理混合。T&L管线可以被渲染状态控制,矩阵,光照和采制参数。 2)、顶点着色器——图形开发人员可以对渲染管线中的顶点运算和像素运算分别进行编程处理了,而无须象以前那样套用一些固定函数,取代设置参数来控制管线,最早出现与DX8,包括PS和VS两部分。
2017-02-15 16:43:14 619
转载 引擎开发_ 碰撞检测_GJK 算法详细介绍
和SAT(分离轴定理)算法一样,GJK算法也只对凸体有效。 GJK算法的优势是:通过support函数(后面会详细讲述),从而支持任何凸体形状之间的碰撞检测;相比SAT算法,你不需要一些额外的操作,比如增加特殊的代码和算法处理曲面形状。 GJK是一个迭代算法,但是如果事先给出穿透/分离向量,则它的收敛会很快,可以在常量时间内完成。在3D环境中,GJK可以取代SAT算法。GJK算法的最初目的是计算两个凸体之间的距离,在两个物体穿透深度比较小的情况下,可用它判定物体之间的碰撞。它也可以和别的算法相结合,用
2017-02-15 15:18:53 12221
原创 C++ Null 指针
在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯。赋为 NULL 值的指针被称为空指针。NULL 指针是一个定义在标准库中的值为零的常量。
2017-02-14 11:53:18 646
原创 计算机图形学(三)_图元的属性_17_ OpenGL属性组
属性和其他状态参数按属性组(attribute group)进行组织。每一组包括相关的状态参数集合。例如,点属性组(point-attribute group)包括了大小和点的平滑(反走样)参数,而线属性组(line-attribute group)包括了宽度、模板状态、模板图案、模板重复计数及线段光滑状态等。类似地,多边形属性组(polygon-attribute group)包括了11种多边形参数,如填充模式、前向面标志及多边形平滑状态。因为颜色是所有图元所共有的一个属性,所以它有单独的属性组。而有些参
2017-02-14 11:38:20 804
原创 计算机图形学(三)_图元的属性_16_ 反走样_8_OpenGL反走样函数
使用下列函数可激活OpenGL的反走样子程序:glEnable (primitiveType); 其中参数primitiveType被赋以符号常量GL_POINT_SMOOTH, GL_LINE_SMOOTH或GL POLYGON SMOOTH。假定我们用RGBA模式指定颜色,则同样需要激活OpenGL颜色调和操作。glEnable (GL_BLEND);接下来,通过下列函数使用颜
2017-02-14 11:19:22 778
转载 #ifndef/#define/#endif使用详解
“头文件中的 #ifndef/#define/#endif 防止该头文件被重复引用”。但是是否能理解“被重复引用”是什么意思?是不能在不同的两个文件中使用include来包含这个头文件吗?如果头文件被重复引用了,会产生什么后果?是不是所有的头文件中都要加入#ifndef/#define/#endif 这些代码?
2017-01-19 10:55:50 342
原创 C++引用作为函数参数
引用很容易与指针混淆,它们之间有三个主要的不同:1.不存在空引用。引用必须连接到一块合法的内存。2.一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。3.引用必须在创建时被初始化。指针可以在任何时间被初始化。
2017-01-17 19:14:32 4393
原创 计算机图形学(三)_图元的属性_16_ 反走样_7_区域边界的反走样
区域边界的反走样 直线的反走样概念也可以用于区域的边界,从而消除其锯齿形的外貌。我们可以将这种程序加加入到扫描线算法中,在生成区域时来平滑区域轮廓。假如系统具有允许像素重定位的功能,那么就可以将边界像素位置调整到更靠近区域边界来实现对区域边界的平滑处理。其他方法则是根据边界内像素区域的百分比来调整每个边界位置上的像素亮度。在图4.53中,位置(x,y)上的像素有大约一半的区域在多边形边界内。因此,
2017-01-11 15:09:15 1230
原创 计算机图形学(三)_图元的属性_16_ 反走样_6_直线亮度差的校正
为了减轻阶梯状效应,对直线进行反走样也为如图4.52所示的另一种光栅效果提供了校正。使用相同数目像素所绘制的两条线,对角线还是比水平线长√2倍。例如,当水平线的长度为10 cm时,对角线的长度超过14cm。这导致的视觉效果是对角线显得比水平线要暗,因为对角线以更低的单位长度亮度进行显示。画线算法通过按照每条线的斜率来调整其亮度,就可以对这种效果进行校正。水平和垂直线将以最低的亮度显示,而45度线则以最高亮度显示。一旦将反走样将技术应用于显示,就可以自动校正亮度。当考虑直线段的有限宽度时,可以把整体线段显示亮
2016-12-06 11:14:37 822
原创 计算机图形学(三)_图元的属性_16_ 反走样_5_过滤技术和像素移相
对直线进行反走样的更精确的方法是采用过滤技术(filtering technique )。这种方法类似于应用加权的像素掩模,只是假设一个连续的加权表面(或过滤函数)覆盖像素。图4.50给出了矩形、圆锥和高斯过滤函数的例子。应用过滤函数的方法类似于应用加权掩模,但过滤函数是集成像素曲面来得到加权的平均亮度。为了减少计算量,经常使用查表法来得到整数值。
2016-11-18 17:37:16 832
第一人称射击游戏(Unity)
2015-09-17
Unity_模仿击打铝罐代码
2015-09-17
图片控件ImageView
2014-12-08
羽哥Time And DatePicker
2014-12-08
RadioButtonAndCheckboxDemo
2014-12-08
universal-image-loader-1.8.6-with-sources.jar
2014-12-05
android-support-v4.jar
2014-12-05
羽哥位移的血轮眼
2014-12-05
羽哥android动画-旋转+透明的血轮眼
2014-12-05
羽哥TabHostDemo
2014-12-02
羽哥RatingBarDemo
2014-12-01
羽哥SeekBarDemo
2014-12-01
羽哥SpinnerDemo
2014-12-01
微信飞机大战
2014-07-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人