自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

不忘初心 方得始终

the lyf so short

  • 博客(82)
  • 收藏
  • 关注

原创 博文收藏

UnityStandardShader剖析

2020-01-03 18:02:08 654

原创 法线的空间变换的原理

一、法线空间变换原理(源于Shader入门精要中介绍:)由此得到两个重要公式:1、如果要对向量做空间转换,需要左乘矩阵的逆转置矩阵。2、如果是正交矩阵,则直接左乘转换矩阵。二、关于利用切线空间TBN进行法线转换:假设已知切线空间TBN,切线空间的法线Nt,计算世界空间下的法线Nw?由于TBN是正交矩阵,所以Nw * TBN = Nt;两边左乘TBN-1,Nw=TBN-1Nt=Nt...

2019-12-26 10:48:07 1748

原创 ShaderLab和CG/HLSL的一些数据类型归纳

1、ShaderLab和CG变量的匹配关系ShaderLab属性类型CG变量类型Color, Vectorfloat4, half4, fixed4Range, Floatfloat, half, fixed2Dsampler2DCubesamplerCube3Dsampler3D

2017-06-14 16:48:43 3275

原创 基于Unity5.x版本资源内存管理方案

1、Unity对资源的管理API汇总:Resources:Load、LoadAll、LoadAsync、UnloadAsset、UnloadUnusedAssets。AssetBundle:LoadFromFile、LoadFromFileAsync、LoadFromMemory、LoadFromMemoryAsync、LoadAllAssets、LoadAllAssetsAsync、Lo

2017-06-12 19:11:04 1682

原创 常用的命令

1、查看静态库平台信息windows:dumpbin /headers lib.a linux:lipo -info lib.a2、查看静态库平台信息windows:dumpbin /LINKERMEMBER lib.a linux:nm -g --defined-only lib.a

2017-02-28 12:12:08 390

原创 sqlite3在android 操作返回readonly错误

近期使用sqlite3源代码编译了一个sqlite3的库跑在安卓平台上,但发现部分安卓机器会操作失败,返回readonly。经过核查所有需要设定的权限全部都有,经过长时间的排查,终于发现只有在anroid5.0的系统上才会出现。所以定位为系统兼容问题,又经过大量调试发现原因所在:在sqlite3源代码中引用到了一种系统库的数据类型 ino_t ,该数据类型在android5.0上的定义有问题,它在

2016-10-21 17:49:23 2448 2

原创 struct/union内存对齐

(一)成员对齐。对于结构体内部成员有这样的规定:各成员变量存放 的起始地址相对于结构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数。各成员变量在存放的时候根据在结构中出现的顺序依次申请空间,同时按照上面的对齐方式调整位置,空缺的字节编译器会自动填充也就是padding。(二)然后,还要考虑整个结构体的对齐需求。ANSI C标准规定结构体类型要求结构体至少是其中的那个最大的基本类型元素

2016-01-27 14:52:33 1350

转载 C++模板

模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。  1.模板是一种对类型进行参数化的工具;  2.通常有两种形式:函数模板和类模板;  3.函数模板针对仅参数类型不同的函数;  4.类模板针对仅数据成员和成员函数类型不同的类。  使用模板的目的就是能够让程序员编写与类型无关的代码。比

2015-10-26 18:13:10 430

转载 关于VisualStudio性能分析数据中的独占样本数和非独占样本数的意义

VisualStudio中自带有Profile工具进行性能性能分析,其中用得比较多的数据是函数调用时间,它主要有独占样本数和非独占样本数两个指标,关于这两个指标代表的意义,MSDN的解释比较文艺:非独占样本数: 为函数收集的性能数据的总数,其中包括该函数调用的其他函数的性能数据。非独占转换次数: 在此函数(包括此函数调用的函数)的所有实例中发生操作系统(转换)事件的次数。当然,

2015-09-25 17:18:04 1878

原创 两种重载运算符

1.  操作符重载实现为类成员函数重载的操作符在类体中被声明,声明方式如同普通成员函数一样,只不过他的名字包含关键字operator,以及紧跟其后的一个c++预定义的操作符。可以用如下的方式来声明一个预定义的==操作符:class person{private: int age;public: person(int a){ this->age=a

2015-09-16 18:08:21 507

转载 debug命令参考

debug命令用于调试汇编语言程序,能使用户接触到计算机内部,允许用户直接观察和修改CPU的寄存器;能观察、修改内存单元;允许直接输入机器指令并单步执行;能反汇编程序。概述讲,debug是观察和了解计算机内部运行情况的有利助手。1 输入debug命令在win7的命令行中输入debug,就进入到虚拟8086的执行环境了。也可以输入debug + 程序名字,这就是对某个程序进行调试。2 r

2015-08-21 11:52:29 2123

转载 Sublime Text 配置参考

打开方式Preferences> Settings-Default// While you can edit this file, it's best to put your changes in// "User/Preferences.sublime-settings", which overrides the settings in here.//// Settings m

2015-08-12 14:53:43 805

原创 struct和typedef

struct Test  {int i;} ;解析:此处声明一个Test的结构体。使用:在C语言中:struct Test t(此处的struct不可省略),在C++中:Test t(可以省略struct)struct Test {int i;} test;解析:在C语言中:此处声明一个Test结构体,命名为test,即test = struct Test。在C++

2015-07-13 11:45:58 849

转载 cmake使用

一、 基本使用安装:下载二进制包后可直接解压使用从源码安装则执行命令:./bootstrap; make; make install——尝试执行bootstrap失败使用:cmake dir_path,生成工程文件或makefile文件二、 概念out-of-source build,与in-source build相对,即将编译输出文件与源文件放到不同目录中;

2015-06-24 13:25:27 670

原创 在MacOS上homebrew的安装和使用

1.前言Mac OS X系统下面之前有老牌的Macports,Fink包管理系统,包括apple的官方Mac App Store。所以我们也向在苹果下找到一款比较新的,方便的包管理系统-homebrew2.安装homebrew官网:http://brew.sh/homebrew的git:https://github.com/Homebrew/homebrew按照官网方式在普通用

2015-04-10 18:01:26 1077

原创 防火墙规则设定

1.防火墙规则配置文件:/etc/sysconfig/iptables2.查看系统服务状态:chkconfig(查看所有系统服务) 或者service iptables status(查看防火墙状态)或者iptables -L (查看具体规则配置)3.防火墙规则:INPUT、OUTPUT、FORWARD4.新增防火墙规则:iptables -A INPUT -p tcp --dport

2015-03-30 12:28:07 1726

原创 Lua面向对象

metatable的介绍:Lua的table可以模拟面向对象,都得益于metatable的强大之处。在一个table中,如果索引一个元素未能找到,解释器会去该table下的metatable中的__index元素中去寻找,即table.metatable.__index.xxx中寻找。但是如果要修改table中的元素或赋值操作,但是该元素不存在,那么会在table中创建该元素,而不会去me

2015-03-01 17:19:06 4139

转载 tolua++入门

tolua++使用SCons进行编译,我们也可以使用自己喜欢的IDE新建一个控制台(Console)工程,然后将源码下bin目录中所有文件加入到工程中,直接编译即可;同样地,新建一个静态库(Static Library)工程,将源码下lib目录中所有文件加入进入,编译即可。当然了,这些工程是需要lua库支持的,目前tolua++最新版本是1.0.93,支持lua 5.1.x。经过上面的步骤,在

2015-02-25 14:15:38 975

原创 Linux下gcc经验总结

1.gcc的常用参数:I(大写i)参数:添加头文件目录到索引目录;例如:-I /usr/local/include/L参数:添加链接库目录到索引目录;例如:-L /usr/local/lib/l(小写L):表示编译时添加链接库文件;例如:-ltest(参数与内容中间没空格)代表着连接(库名为test)链接库文件,库名和实际文件名是不同的,库名是文件名去掉开头的lib和结尾的.a或.so

2015-02-12 11:43:49 1770

原创 两种封装模块方式的比较

一般情况下,我们用c++去写一个模块封装类,首要考虑的一个问题就是如何获取该模块的操作指针,在模块外部尽量减少限制和操作。多数情况我们去提供一个模块的静态方法,也可以理解为一个端口去得到本模块的指针,从而可以调用模块的的所有功能方法,包括初始化。下面总结两种封装方式的优劣:第一种封装:#include class test{public: ~test(){} void show()

2015-02-11 15:49:08 2333

转载 匿名空间的使用

当定义一个命名空间时,可以忽略这个命名空间的名称:namespce {char c;int i;double d;}编译器在内部会为这个命名空间生成一个唯一的名字,而且还会为这个匿名的命名空间生成一条using指令。所以上面的代码在效果上等同于:namespace __UNIQUE_NAME_ {char c;int i;double d;}us

2015-02-10 17:19:51 1937

原创 三大编码的由来总结

开发的过程中,最好使用统一的编码格式,推荐使用utf-8。如果涉及到开发环境,显示界面和数据库之间的编解码问题,可以使用下面的方法进行编码转换,下面的方法是python中的编解码的方法1.utf-8转成unicode:str.decode('utf-8')2.unicode编码成utf-8:unicode(str).encode('utf-8')一直对字符的各种编码

2015-02-10 14:35:29 966

原创 对于vs在x86平台和x64平台上的冲突问题

对于32位和64位平台编译经常会出现问题,如下总结的是vs平台编译相关的知识1.对于x86平台上编译的项目是无法在x64平台上调用的,同理对于x64平台上编译的项目也是无法在x86上调用的。2.在64位系统上,如果安装了x64的vc编译器的vs,则编译项目的时候可以配置两种编译平台。3.编译平台和目标调用平台必须保持一致,才能顺利编译。以下以配置x86平台为例:首先如果没有wi

2015-02-08 19:39:25 17053 1

原创 Lua语法和使用基础

1.语法注释单行注释中,连续两个减号"--"表示注释的开始,一直延续到行末为止。多行注释中,由"--[["表示注释开始,并且一直延续到"]]"为止。在Lua中,语句之间可以用分号";"隔开,也可以用空白隔开。一般来说,如果多个语句写在同一行的话,建议总是用分号隔开。2.语句块在Lua中,它是用do 和 end 括起来的。比如:doprint("Hell

2015-01-13 11:42:14 861

转载 Lua和C语言的交互详解

1.前言Lua语言是一种嵌入式语言,它本身的威力有限;当Lua遇见了C,那它就展示了它的强大威力。C和Lua是可以相互调用的。第一种情况是,C语言拥有控制权,Lua是一个库,这种形式中的C代码称为“应用程序代码”;第二种情况是,Lua拥有控制权,C语言是一个库,这个时候C代码就是“库代码”。“应用程序代码”和“库代码”都使用同样的API来与Lua通信,这些API就称为C API。C API

2015-01-13 09:35:41 3656

原创 文件权限和目录权限

1.文件权限r:读权限,指文件的具体内容,比如说文本文件里面写了些什么。这里“读”的内容不包括文件的属性,比如大小、修改日期、权限等。因为那不属于文件内容。w:写权限,编辑,修改或者新增文件的内容,但是不含删除该文件。(由父目录的w权限决定)x:执行权限。但拥有了文件的执行权限并不意味着一定可以执行文件,还得看是否拥有父目录的x权限总之,对于文件的r、w、x来说,主要都

2015-01-11 10:17:18 780

原创 linux系统目录架构

一. 根目录 (/) 的意义与内容:FHS标准建议:根目录(/)所在分区应该越小越好, 且应用程序所安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好。 如此不但效能较佳,根目录所在的文件系统也较不容易发生问题。说白了,就是根目录和Windows的C盘一个样。根据以上原因,FHS认为根目录(/)下应该包含如下子目录:目录放置档案内容/bi

2015-01-09 17:56:23 779

原创 linux系统启动脚本执行顺序

1.linux的整个系统启动顺序如下1. 加载内核2. 执行init程序3. /etc/rc.d/rc.sysinit  # 由init执行的第一个脚本4. /etc/rc.d/rc${RUNLEVEL}d/* # $RUNLEVEL为缺省的运行模式5. /etc/rc.d/rc.local  #相应级别服务启动之后、在执行该文件(其实也可以把需要执行的命令写到该文件中)6

2015-01-09 11:16:48 4832

转载 版本分支控制介

1.创建分支的意义 创 建分支的意义,比如我们在一个基础平台上进行开发,每个技术小组负责一个子项目,而基础平台也是有可能会继续更改的,这个时候,如果不创建分支,子项目之间会相互影响,影响最大的就是后期的测试和版本发布,子项目A已经结束,但测试却受到正在进行的子项目B的影响,测试通不过,就别说版本发布了。所以,我 们需要从目前的项目(主干trunk)中创建分支(branch),隔离子项目间的相互

2015-01-09 10:26:42 565

原创 Linux下搭建SVN服务器

Subversion(SVN) 是一个开源的版本控制系統, 也就是说 Subversion 管理着随时间改变的数据。 这些数据放置在一个中央资料档案库 (repository) 中。 这个档案库很像一个普通的文件服务器, 不过它会记住每一次文件的变动。 这样你就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。1.Subversion的安装安装:yum install subversio

2015-01-09 09:45:38 635

原创 自配简单实用的vim编程环境

网上大牛vim使用者发布的vimrc的配置都非常复杂,虽然功能强大多样,但是出现个别问题后对于使用vim不熟练的的程序员是很头疼的事情,下面是我参照网上资料自己整理配置出来的一份vimrc,这份配置既满足了简单编程环境的常用功能,配置上又简单明了,出现问题易修改。" 去掉讨厌的有关vi一致性模式,避免以前版本的一些bug和局限set nocompatible" 使用ron配色模式colo

2014-12-31 16:52:16 716

转载 Linux man 手册章节分类

Linux的man很强大,该手册分成很多section,使用man时可以指定不同的section来浏览,各个section意义如下: 1 - commands2 - system calls3 - library calls4 - special files5 - file formats and convertions6 - games for linux7 - ma

2014-12-30 15:00:12 1100

原创 c和c++的指针变量输出与原理的实例

案例程序:void main() { int a = 100; int *ap = &a; printf("%p\n",&a);//输出:002AF744 printf("%p\n",ap);//输出:002AF744 printf("%d\n",*ap);//输出:100 printf("%p\n",&ap);//输出:002AF

2014-12-26 15:50:44 1251

原创 GDB调试时缺少glibc

Gdb调试时候弹出Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.107.el6.i686首先该提示意思是gdb缺少glibc-debuginfo的c调试库解决方案就是上诉提示中的use: debuginfo-install glibc-2.12-1.107.el6.i686这条命令安装,debuginfo-

2014-12-26 15:16:12 1947

原创 GDB调试命令总结

本文介绍Linux下GDB调试器常用的基本命令,方便平时查询,目前可能不完善,日后发现新命令再添加。1.源代码编译gcc -g target.c -o target这里面一个必要的步骤是:GCC的-g选项:让编译器将符号表(对应于程序的变量和代码行的内存地址列表)保存在生成的可执行文件中。这样才能在调试会话过程中引用源代码中的变量名和行号。2.基本GDB命令启动GDB:gd

2014-12-26 11:30:25 2298 1

原创 ar基本用法

当我们的程序中有经常使用的模块,而且这种模块在其他程序中也会用到,这时按照软件重用的思想,我们应该将它们生成库,使得以后编程可以减少开发代码量。这里介绍命令ar,用来对库操作。   ar命令可以用来创建、修改库,也可以从库中提出单个模块。库是一单独的文件,里面包含了按照特定的结构组织起来的其它的一些文件(称做此库文件的member)。原始文件的内容、模式、时间戳、属主、组等属性都保留在库文件中

2014-12-24 11:04:51 2576

原创 Linux下github配置方法

1.下载安装github:yum install git2.注册好账号后我们需要建立一个仓库.(注:选把私有仓库是会提示付费的,价格详见网站内说明)3.配置本的SSH KEY 才可以使远程跟本地连接(1,检查本地SSH KEY生成情况;(如果出现““No such file or directory”或类似的语句,说明缺少ssh的key)生成KEY的命令如下:$ cd

2014-12-22 11:39:47 1439

翻译 fork函数的详细解释

头文件#include/*#包含*/#include/*#包含*/函数原型pid_t fork( void);(pid_t 是一个宏定义,其实质是int 被定义在#includesys/types.h>中)返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID;否则,出错返回-1函数说明一个现有进程可以调用fork函数创建一个

2014-12-08 14:45:20 1611

转载 Linux C 书籍推荐

建议学习路径:   首先先学学编辑器,vim, emacs什么的都行。 然后学make file文件,只要知道一点就行,这样就可以准备编程序了。   然后看看《C程序设计语言》K&R,这样呢,基本上就可以进行一般的编程了,顺便找本数据结构的书来看。   如果想学习UNIX/LINUX的编程,《Advanced Programing in Unix Envirement》绝对经典

2014-12-02 17:57:51 2064

原创 碰撞检测函数的区别

1.Collider.OnCollisionEnter(Collision)当collider/

2014-10-09 16:37:43 4201

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除