
c++
kandyer
程序员.
展开
-
BMFont中文字体图集制作的方法~(for unity ngui)
转http://momowing.diandian.com/post/2013-01-24/40046239211BMFont中文字体图集制作的方法~(for unity ngui)好吧~似乎这个问题困扰了很多人,游戏开始中文化是个不错的事儿啊,这里我就做下说明,如何制作中文字体图集~这里的字库图集的制作更多的是为了服务于unity的UI插件NGUI吧,当然EZ活着其他转载 2013-11-18 10:19:59 · 834 阅读 · 0 评论 -
opengl 坐标变换
本系列教程是自己学习OpenGL时的一些笔记,分享出来希望对大家有所帮助。因为本人是学数学出身,内容侧重于理论推导。 1. 坐标变换序列对于OpenGL来说,从物体的世界坐标系到显示器的屏幕坐标,需要经过四个变换阶段,如下图所示。首先通过Model-View Matrix将Obect Coordinates变换为Eye Coordinates(以观察者为原转载 2013-10-07 23:01:51 · 606 阅读 · 0 评论 -
OpenGL中的矩阵相乘的顺序
1,在OpenGL中所有的视图变换,模型变换 都是4×4矩阵,每个后续的glMultiMatrix*(N),或者变换函数,glTranslate*(),glRotate*(),等都是把一个新的4×4矩阵与当前的矩阵M相乘,不同的是:变换函数glTranslate*(),glRotate*()等会根据函数参数构造一个4×4矩阵,也设为N,两种情况产生相同的结果:M×N。注意这里的顺序,后续的矩阵是右转载 2013-10-07 13:24:10 · 1379 阅读 · 0 评论 -
opengl顶点数组
当我们人为的绘制形状时,首先想到是是坐标点,而不是api,如要绘制一条直线,首先将两个点的坐标存在一起,则更加容易理解,OpenGL的顶点数组就是这样的作用.首先来回顾下之前画直线的函数示例1void drawOneLine(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2){ glBegin(GL_LINES); glVer转载 2013-10-07 12:54:25 · 502 阅读 · 0 评论 -
理解OpenGL中的模型视图矩阵变换
对于学习OpenGL,或者其他的API,基础的矩阵变换是最重要的。矩阵变换是重中之重。下面就拿红皮书上的最简单的demo:cube.c来说。调用函数 glMatrixMode (GL_MODELVIEW);指定修改模型视图矩阵,以后调用glLoadIdentity (); 将当前的矩阵置为单位矩阵,有利于后面的运算。下面我们假设将对创建的模型glutWireCube (1转载 2013-10-07 13:15:50 · 742 阅读 · 0 评论 -
3D Engine 的设计架构
转自:http://blog.youkuaiyun.com/weiqubo/article/details/6995510Introduction (简介)让咱们谈谈你如何撰写一份提供优雅性能的3D引擎。你的引擎需要提供的包括:曲面(curved surfaces)、动态光线(dynamic lighting)、体雾(volumetric fog)、镜面(mirrors)、入口(portals)、转载 2013-10-04 20:15:12 · 496 阅读 · 0 评论 -
tolua++实现分析
项目正在使用cocos2dx的lua绑定,绑定的方式是tolua++。对大规模使用lua代码信心不是很足,花了一些时间阅读tolua++的代码,希望对绑定实现的了解,有助于项目对lua代码的把控。从阅读结果上来看,起码在内存管理上,帮助还是很大的。1.tolua++如何将c++对象导入到lua里tolua++为每一个传入lua的对象建立一个userdata,userda转载 2013-10-05 14:35:00 · 1062 阅读 · 0 评论 -
cocos2dx的lua绑定
一、cocos2dx对tolua++绑定的修正A.c对lua回调函数的引用在使用cocos2dx编写游戏时,我们经常会设置一些回调函数(时钟、菜单选择等)。如果采用脚本方式编写游戏的话,这些回调函数也是需要写在脚本里的。实现这个功能,就需要lua将自己的函数传递给c++,c++保持对这个函数的引用,不要让这个lua函数被垃圾回收,并在适当的时候回调这个lua函数。转载 2013-10-05 14:33:18 · 1210 阅读 · 0 评论 -
tolua++中暴露对象给lua时,一定要把析构函数暴露给lua
题目不知道怎么取才好,但是意思很简单:如果你暴露一个复杂对象给Lua,实现类似于OO编程的话,那么也要把析构函数暴露给Lua.否则的话,lua gc的时候,回收垃圾对象,没有找到回收函数,就直接free掉了,这在C++中,是相当致命的. tolua++中的tolua_cclass函数,用来注册lua对象,?TOLUA_转载 2013-10-05 13:59:14 · 1867 阅读 · 0 评论 -
lua常用函数
lua_getallocflua_Alloc lua_getallocf (lua_State *L, void **ud);返回给定状态机的内存分配器函数。如果 ud 不是 NULL ,Lua 把调用lua_newstate 时传入的那个指针放入*ud 。lua_getfenvvoid lua_getfenv (lua_State *L, int index);转载 2013-10-04 20:17:57 · 828 阅读 · 0 评论 -
LUA教程 - 本地程序接口
这个部分描述了 Lua 的 C API ,也就是宿主程序跟 Lua 通讯用的一组 C 函数。所有的 API 函数按相关的类型以及常量都声明在头文件 lua.h 中。 虽然我们说的是“函数”,但一部分简单的 API 是以宏的形式提供的。所有的这些宏都只使用它们的参数一次(除了第一个参数,也就是 lua 状态机),因此你不需担心这些宏的展开会引起一些副作用。 在所有的 C 库中,Lua转载 2013-10-04 11:37:50 · 1024 阅读 · 0 评论 -
lua与C交互中的堆栈详解
当在Lua和C之间交换数据时我们面临着两个问题:动态与静态类型系统的不匹配和自动与手动内存管理的不一致。在Lua中,我们写下a[k]=v时,k和v可以有几种不同的类型(由于metatables的存在,a也可能有不同的类型)。如果我们想在C中提供类似的操作,无论怎样,操作表的函数(settable)必定有一个固定的类型。我们将需要几十个不同的函数来完成这一个的操作(三个参数的类型的每一种组合都需转载 2013-10-04 11:38:56 · 698 阅读 · 0 评论 -
从UIImage的矩阵变换看矩阵运算的原理
1.矩阵的基本知识:struct CGAffineTransform{ CGFloat a, b, c, d; CGFloat tx, ty;};CGAffineTransform CGAffineTransformMake (CGFloat a,CGFloat b,CGFloat c,CGFloat d,CGFloat tx,CGFloat ty);转载 2013-10-01 13:32:37 · 431 阅读 · 0 评论 -
lua与c++的相互调用
一. lua调用C++ 在lua中是以函数指针的形式调用函数, 并且所有的函数指针都必须满足如下此种类型:typedef int (*lua_CFunction) (lua_State *L); 也就是说, 偶们在C++中定义函数时必须以lua_State为参数, 以int为返回值才能被Lua所调用. 但是不要忘记了, 偶们的lua_State是支持栈的, 所以通过转载 2013-09-15 21:13:59 · 584 阅读 · 0 评论 -
[置顶] Cocos2d-x使用过程中遇到的错误(VS下开发,移植到Android发布)(更新ing)
http://blog.youkuaiyun.com/grimraider/article/details/7762415环境:windows7, VS2010, cocos2d-1.0.1-x-0.12.0, cygwin, eclipse, android sdk4.0.3, ndk r7b在vs上开发,然后移植到android上.2012071转载 2013-09-03 13:50:28 · 641 阅读 · 0 评论 -
opengl基础
1.OpenGL概念: OpenGL可以说是一个图形软件开发包,一套函数库,或者一套API.它提供了100多个图形操作函数.2.OpenGL工作流程: OpenGL独立于硬件,以流水线的工作方式.输入OpenGL的可以是图像或者几何元,最终结果都是光栅化后的图像. 对于图像,OpenGL首先通过像素解包把其像素格式转换成OpenGL内部格式,然后通过像素操作直转载 2013-10-07 15:23:32 · 598 阅读 · 0 评论 -
glViewport和glOrtho.【转】
在OpenGL中有两个比较重要的投影变换函数,glViewport和glOrtho.glOrtho 是创建一个正交平行的视景体。一般用于物体不会因为离屏幕的远近而产生大小的变换的情况。比如,常用的工程中的制图等。需要比较精确的显示。 而作为它的对立情况, glFrustum则产生一个透视投影。这是一种模拟真是生活中,人们视野观测物体的真实情况。例如:观察两条平行的火车到,在过了很远之后,这两条转载 2013-10-07 15:08:43 · 567 阅读 · 0 评论 -
android gallery 自定义边框+幻灯片效果
最近在项目中用到图片轮播,试了Gallery,ViewFlipper,ViewPager,感觉Gallery最符合需求,但是Gallery的系统边框很难看,项目中要求用自己的背景图片。下面来看一下使用Gallery实现图片轮播运行效果:布局文件:[java] view plaincopy andr转载 2013-10-09 16:52:45 · 5450 阅读 · 1 评论 -
OpenGL变换
OpenGL变换是本篇的重点内容,它包括计算机图形学中最基本的三维变换,即几何变换、投影变换、裁剪变换、视口变换,以及针对OpenGL的特殊变换概念理解和用法,如相机模拟、矩阵堆栈等。学好了这章,才开始真正走进三维世界。1、从三维空间到二维平面 1.1 相机模拟 在真实世界里,所有的物体都是三维的。但是,这些三维物体在计算机世界中却必须以二维平面物体的形式表现出来。那么,这些物体是转载 2013-10-08 20:09:33 · 2597 阅读 · 0 评论 -
c++只能指针
智能指针(smart pointer)是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保自动正确的销毁动态分配的对象,防止内存泄露。它的一种通用实现技术是使用引用计数(reference count)。智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象共享同一指针。每次创建类的新对象时,初始化指针并将引用计数置为1;当对象作为另一对象的副本而创建时,拷贝构造函数拷转载 2013-10-08 20:05:33 · 542 阅读 · 0 评论 -
opengl 投影矩阵的构造
参考:http://www.songho.ca/opengl/gl_projectionmatrix.html3D空间中的对象,最终显示在屏幕上,需要进行一系列的矩阵变化,将其从世界空间,转化到屏幕上。坐标的具体转化过程是:世界坐标world---->视坐标eye-----》不同的投影方法(平行投影,透视投影)投影面上坐标--->正则坐标(将转载 2013-10-08 20:38:08 · 663 阅读 · 0 评论 -
OpenGL 的渲染流水线
一、渲染:计算机根据模型创建图象。模型(或物体)是由几何图元构成的,而几何图元是通过顶点来指定的。最终渲染的图象由屏幕像素组成。像素(pixel)是显示硬件能够放置到屏幕上的最小的可视元素。有关像素的信息(如颜色)在系统内存中被组织为位面(bitplane)。位面构成了帧缓存(包含图形显示设备为控制屏幕上所有像素的颜色和亮度所需的信息)。 1、使用几何图元建立模型,从而得到物体的数学描述。(O转载 2013-10-08 19:46:29 · 707 阅读 · 0 评论 -
求逆矩阵
#includeusing namespace std; int const M=3;int const N =2*M;int main(){ int i,j,k; double a[M][M]={1,2,3,2,2,1,3,4,3}; double result[M][M]; double转载 2013-10-08 18:07:37 · 593 阅读 · 0 评论 -
投影矩阵的推导 (OpenGL D3D)
OpenGL矩阵推导——模型视图变化在三维编程中,模型视图变换是从三维世界到二维屏幕中一个很重要的变换,但是这个变换往往很多人都不太理解,要么是事而非。而这方面的文章不是太少就是讲的太浅没有真正的理解模型视图变换,本人在这个过程中曾经走过很多歪路,不过好在最终在自己的不懈努力下终于降伏了这只猛虎。本人就以自己的理解,通过矩阵推导过程一步一步来了解模型视图变化,最后通过两个OpenGl的程序转载 2013-10-08 20:42:03 · 2731 阅读 · 0 评论 -
纹理坐标
当我们绘制一个三角形时,只需要指定三个顶点的颜色。三角形中其它各点的颜色不需要我们指定,这些点的颜色是OpenGL自己通过计算得到的。在我们学习OpneGL光照时,法线向量、材质的指定,都是只需要在顶点处指定一下就可以了,其它地方的法线向量和材质都是OpenGL自己通过计算去获得。纹理的使用方法也与此类似。只要指定每一个顶点在纹理图象中所对应的像素位置,OpenGL就会自动计算顶点以外的其它点在纹转载 2013-10-08 20:01:55 · 604 阅读 · 0 评论 -
opengl基本图元
任何复杂的三维模型都是由基本的几何图元:点、线段和多边形组成的,有了这些图元,就可以建立比较复杂的模型。因此这部分内容是学习OpenGL编程的基础。 一、基本图元的描述及定义 OpenGL图元是抽象的几何概念,不是真实世界中的物体,因此须用相关的数学模型来描述。所有的图元都是由一系列有顺序的顶点集合来描述的。OpenGL中绘制几何图元,必须使用glBegain()和glEnd()这一对转载 2013-10-08 19:53:04 · 618 阅读 · 0 评论 -
opengl 工作流程
OpenGL处理流水线(pipe line):1.几何顶点(vertexs)2.图元(primitives)3.片元(fragments)4.象素数据(pixels) 具体过程:1 几何顶点(vertexs) 1)输入数据OpenGL流水线必须提供如下的输入数据类型几何顶点(Vertices)——几何顶点描述了几何物体的形状。 指定几何顶点要用glV转载 2013-10-08 19:51:18 · 560 阅读 · 0 评论 -
OpenGL 渲染管线理论
学习着色器,并理解着色器的工作机制,就要对OpenGL的固定功能管线有深入的了解。首先要知道几个OpenGL的术语渲染(rendering):计算机根据模型(model)创建图像的过程。模型(model):根据几何图元创建的物体(object)。几何图元:包括点、直线和多边形等,它是通过顶点(vertex)指定的。最终完成了渲染的图像是由在屏幕上绘制的像素组成的。在内存中,转载 2013-10-08 19:47:15 · 655 阅读 · 0 评论 -
OpenGl 坐标转换
原文地址:http://blog.youkuaiyun.com/zhulinpptor/article/details/58971021. OpenGL 渲染管线OpenGL渲染管线分为两大部分,模型观测变换(ModelView Transformation)和投影变换(Projection Transformation)。做个比喻,计算机图形开发就像我们照相一样,目的就是把真实的场景在一张照转载 2013-10-08 19:44:48 · 1780 阅读 · 0 评论 -
opengl的转换矩阵
矩阵真的是一个很神奇的数学工具, 虽然单纯从数学上看, 它并没有什么特别的意义, 但一旦用到空间中的坐标变换,它就“一遇风云便成龙”, 大显神威了。简单的工具实现了复杂的功能,便预示着要理解它我们还是要花上点功夫的。下面就简单介绍一下OpenGL中的转换矩阵。1 转换矩阵的原理OpenGL中的转换矩阵是这样定义的: [Xx, Yx, Zx, Tx]转载 2013-10-07 23:35:18 · 419 阅读 · 0 评论 -
OpenGL中glVertex2f函数与gluOrtho2D的参数的对应关系,以及常见函数的对应坐标系
两个函数的函数原型如下:glVertex(GLfloat x, GLfloat y);gluOrtho2D(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top);简单的说前者的两个参数所代表的坐标点,必须落在后者参数所形成的坐标系内,不然该点就在viewport之外。举个例子:void d转载 2013-10-07 15:13:25 · 1216 阅读 · 0 评论 -
C++虚继承的概念
http://blog.youkuaiyun.com/crystal_avast/article/details/7678704C++中虚拟继承的概念为了解决从不同途径继承来的同名的数据成员在内存中有不同的拷贝造成数据不一致问题,将共同基类设置为虚基类。这时从不同的路径继承过来的同名数据成员在内存中就只有一个拷贝,同一个函数名也只有一个映射。这样不仅就解决了二义性问题,也节省了内存,避免了转载 2013-09-03 13:51:41 · 421 阅读 · 0 评论 -
OpenGL函数思考-glLoadIdentity
函数原型: void glLoadIdentity(void)函数说明: OpenGL为我们提供了一个非常简单的恢复初始坐标系的手段,那就是调用glLoadIdentity()命令。该命令是一个无参的无值函数,其功能是用一个4×4的单位矩阵来替换当前矩阵,实际上就是对当前矩阵进行初始化。也就是说,无论以前进行了多少次矩阵变换,在该命令执行后,当前矩阵均恢复转载 2013-08-31 22:57:57 · 450 阅读 · 0 评论 -
glViewport()函数和glOrtho()函数的理解(转)
http://blog.youkuaiyun.com/gangyanliang/article/details/7894716在OpenGL中有两个比较重要的投影变换函数,glViewport和glOrtho。glOrtho是创建一个正交平行的视景体。 一般用于物体不会因为离屏幕的远近而产生大小的变换的情况。比如,常用的工程中的制图等。需要比较精确的显示。 而作为它的对立情况, glFru转载 2013-08-31 23:14:27 · 479 阅读 · 0 评论 -
IO - 同步,异步,阻塞,非阻塞
同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non-blocking IO是一个东西。这其实是因为不同的人的知识背景不同,并且在讨论这个问题的时候上下文(context)也不转载 2013-04-08 16:23:08 · 473 阅读 · 0 评论 -
"undefined reference to" 问题解决方法
最近在Linux下编程发现一个诡异的现象,就是在链接一个静态库的时候总是报错,类似下面这样的错误:(.text+0x13): undefined reference to `func' 关于undefined reference这样的问题,大家其实经常会遇到,在此,我以详细地示例给出常见错误的各种原因以及解决方法,希望对初学者有所帮助。1. 链接时缺失了相关目标文件(转载 2013-04-07 00:57:24 · 426 阅读 · 0 评论 -
聚合‘sockaddr_in addr’ 类型不完全
缺省头文件:netinet/in.hsys/socket.hsys/types.h原创 2013-04-07 01:01:04 · 1825 阅读 · 0 评论 -
Linux中如何创建静态库和动态库
函数库分为静态库和动态库两种。 静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。 动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。 程序1: hello.h #ifndef HELLO_H #define HELLO_H void hello(const char *name);转载 2013-04-07 00:59:57 · 449 阅读 · 0 评论 -
reinterpret_cast <new_type> (expression)
reinterpret_cast运算符是用来处理无关类型之间的转换;它会产生一个新的值,这个值会有与原始参数(expressoin)有完全相同的比特位。什么是无关类型?我没有弄清楚,没有找到好的文档来说明类型之间到底都有些什么关系(除了类的继承以外)。后半句倒是看出了reinterpret_cast的字面意思:重新解释(类型的比特位)。我们真的可以随意将一个类型值的比特位交给另一个类型作为转载 2013-04-05 23:29:11 · 412 阅读 · 0 评论 -
Linux下automake软件编译与发布之多级目录结构的处理
在入门篇我们简单介绍了使用automake自动产生makefile的几个关键步骤,所有文件都在同一个目录下。但在比较大的项目中,很少将所有文件放在一个目录下的。本文针对这种情况做个简单介绍。 多级目录结构的软件,一般是单个程序、库文件或模块放在各自的目录中。automake要求每个目录都有自己的Makefile.am文件来编译各自目录下的代码。在顶级的目录中,有一个Makef转载 2013-04-04 13:35:02 · 412 阅读 · 0 评论