<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[不忘初心 方得始终]]></title><description><![CDATA[the lyf so short]]></description><link>https://blog.youkuaiyun.com/u012689623</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; u012689623]]></copyright><item><title><![CDATA[博文收藏]]></title><link>https://blog.youkuaiyun.com/u012689623/article/details/103824764</link><guid>https://blog.youkuaiyun.com/u012689623/article/details/103824764</guid><author>u012689623</author><pubDate>Fri, 03 Jan 2020 18:02:08 +0800</pubDate><description><![CDATA[UnityStandardShader剖析


]]></description><category></category></item><item><title><![CDATA[法线的空间变换的原理]]></title><link>https://blog.youkuaiyun.com/u012689623/article/details/103711095</link><guid>https://blog.youkuaiyun.com/u012689623/article/details/103711095</guid><author>u012689623</author><pubDate>Thu, 26 Dec 2019 10:48:07 +0800</pubDate><description><![CDATA[一、法线空间变换原理（源于Shader入门精要中介绍：）


由此得到两个重要公式：
1、如果要对向量做空间转换，需要左乘矩阵的逆转置矩阵。
2、如果是正交矩阵，则直接左乘转换矩阵。
二、关于利用切线空间TBN进行法线转换：
假设已知切线空间TBN，切线空间的法线Nt，计算世界空间下的法线Nw?
由于TBN是正交矩阵，所以Nw * TBN = Nt;
两边左乘TBN-1,Nw=TBN-1Nt=Nt...]]></description><category></category></item><item><title><![CDATA[ShaderLab和CG/HLSL的一些数据类型归纳]]></title><link>https://blog.youkuaiyun.com/u012689623/article/details/73249904</link><guid>https://blog.youkuaiyun.com/u012689623/article/details/73249904</guid><author>u012689623</author><pubDate>Wed, 14 Jun 2017 16:48:43 +0800</pubDate><description><![CDATA[1、ShaderLab和CG变量的匹配关系




ShaderLab属性类型
CG变量类型


Color, Vector
float4, half4, fixed4


Range, Float
float, half, fixed


2D
sampler2D


Cube
samplerCube


3D
sampler3D]]></description><category></category></item><item><title><![CDATA[基于Unity5.x版本资源内存管理方案]]></title><link>https://blog.youkuaiyun.com/u012689623/article/details/73133605</link><guid>https://blog.youkuaiyun.com/u012689623/article/details/73133605</guid><author>u012689623</author><pubDate>Mon, 12 Jun 2017 19:11:04 +0800</pubDate><description><![CDATA[1、Unity对资源的管理API汇总：
Resources：Load、LoadAll、LoadAsync、UnloadAsset、UnloadUnusedAssets。
AssetBundle：LoadFromFile、LoadFromFileAsync、LoadFromMemory、LoadFromMemoryAsync、LoadAllAssets、LoadAllAssetsAsync、Lo]]></description><category></category></item><item><title><![CDATA[常用的命令]]></title><link>https://blog.youkuaiyun.com/u012689623/article/details/58589707</link><guid>https://blog.youkuaiyun.com/u012689623/article/details/58589707</guid><author>u012689623</author><pubDate>Tue, 28 Feb 2017 12:12:08 +0800</pubDate><description><![CDATA[1、查看静态库平台信息
windows：dumpbin /headers lib.a linux：lipo -info lib.a
2、查看静态库平台信息
windows：dumpbin /LINKERMEMBER lib.a linux：nm -g --defined-only lib.a]]></description><category></category></item><item><title><![CDATA[sqlite3在android 操作返回readonly错误]]></title><link>https://blog.youkuaiyun.com/u012689623/article/details/52885684</link><guid>https://blog.youkuaiyun.com/u012689623/article/details/52885684</guid><author>u012689623</author><pubDate>Fri, 21 Oct 2016 17:49:23 +0800</pubDate><description><![CDATA[近期使用sqlite3源代码编译了一个sqlite3的库跑在安卓平台上，但发现部分安卓机器会操作失败，返回readonly。经过核查所有需要设定的权限全部都有，经过长时间的排查，终于发现只有在anroid5.0的系统上才会出现。所以定位为系统兼容问题，又经过大量调试发现原因所在：在sqlite3源代码中引用到了一种系统库的数据类型 ino_t ，该数据类型在android5.0上的定义有问题，它在]]></description><category></category></item><item><title><![CDATA[struct/union内存对齐]]></title><link>https://blog.youkuaiyun.com/u012689623/article/details/50594264</link><guid>https://blog.youkuaiyun.com/u012689623/article/details/50594264</guid><author>u012689623</author><pubDate>Wed, 27 Jan 2016 14:52:33 +0800</pubDate><description><![CDATA[(一)成员对齐。对于结构体内部成员有这样的规定：各成员变量存放 的起始地址相对于结构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数。各成员变量在存放的时候根据在结构中出现的顺序依次申请空间，同时按照上面的对齐方式调整位置，空缺的字节编译器会自动填充也就是padding。
(二)然后，还要考虑整个结构体的对齐需求。ANSI C标准规定结构体类型要求结构体至少是其中的那个最大的基本类型元素]]></description><category></category></item><item><title><![CDATA[C++模板]]></title><link>https://blog.youkuaiyun.com/u012689623/article/details/49427729</link><guid>https://blog.youkuaiyun.com/u012689623/article/details/49427729</guid><author>u012689623</author><pubDate>Mon, 26 Oct 2015 18:13:10 +0800</pubDate><description><![CDATA[模板是C++支持参数化多态的工具，使用模板可以使用户为类或者函数声明一种一般模式，使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。
　　1.模板是一种对类型进行参数化的工具；
　　2.通常有两种形式：函数模板和类模板；
　　3.函数模板针对仅参数类型不同的函数；
　　4.类模板针对仅数据成员和成员函数类型不同的类。
　　使用模板的目的就是能够让程序员编写与类型无关的代码。比]]></description><category></category></item><item><title><![CDATA[关于VisualStudio性能分析数据中的独占样本数和非独占样本数的意义]]></title><link>https://blog.youkuaiyun.com/u012689623/article/details/48735017</link><guid>https://blog.youkuaiyun.com/u012689623/article/details/48735017</guid><author>u012689623</author><pubDate>Fri, 25 Sep 2015 17:18:04 +0800</pubDate><description><![CDATA[VisualStudio中自带有Profile工具进行性能性能分析，其中用得比较多的数据是函数调用时间，它主要有独占样本数和非独占样本数两个指标，关于这两个指标代表的意义，MSDN的解释比较文艺：
非独占样本数: 为函数收集的性能数据的总数，其中包括该函数调用的其他函数的性能数据。

非独占转换次数: 在此函数（包括此函数调用的函数）的所有实例中发生操作系统（转换）事件的次数。

当然，]]></description><category></category></item><item><title><![CDATA[两种重载运算符]]></title><link>https://blog.youkuaiyun.com/u012689623/article/details/48497873</link><guid>https://blog.youkuaiyun.com/u012689623/article/details/48497873</guid><author>u012689623</author><pubDate>Wed, 16 Sep 2015 18:08:21 +0800</pubDate><description><![CDATA[1.  操作符重载实现为类成员函数
重载的操作符在类体中被声明，声明方式如同普通成员函数一样，只不过他的名字包含关键字operator，以及紧跟其后的一个c++预定义的操作符。
可以用如下的方式来声明一个预定义的==操作符:

class person{
private:
    int age;
public:
    person(int a){
        this->age=a]]></description><category></category></item><item><title><![CDATA[debug命令参考]]></title><link>https://blog.youkuaiyun.com/u012689623/article/details/47832149</link><guid>https://blog.youkuaiyun.com/u012689623/article/details/47832149</guid><author>u012689623</author><pubDate>Fri, 21 Aug 2015 11:52:29 +0800</pubDate><description><![CDATA[debug命令用于调试汇编语言程序，能使用户接触到计算机内部，允许用户直接观察和修改CPU的寄存器;能观察、修改内存单元;允许直接输入机器指令并单步执行;能反汇编程序。概述讲，debug是观察和了解计算机内部运行情况的有利助手。
1 输入debug命令
在win7的命令行中输入debug，就进入到虚拟8086的执行环境了。也可以输入debug + 程序名字，这就是对某个程序进行调试。
2 r]]></description><category></category></item><item><title><![CDATA[Sublime Text 配置参考]]></title><link>https://blog.youkuaiyun.com/u012689623/article/details/47444609</link><guid>https://blog.youkuaiyun.com/u012689623/article/details/47444609</guid><author>u012689623</author><pubDate>Wed, 12 Aug 2015 14:53:43 +0800</pubDate><description><![CDATA[打开方式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]]></description><category></category></item><item><title><![CDATA[struct和typedef]]></title><link>https://blog.youkuaiyun.com/u012689623/article/details/46859847</link><guid>https://blog.youkuaiyun.com/u012689623/article/details/46859847</guid><author>u012689623</author><pubDate>Mon, 13 Jul 2015 11:45:58 +0800</pubDate><description><![CDATA[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++]]></description><category></category></item><item><title><![CDATA[cmake使用]]></title><link>https://blog.youkuaiyun.com/u012689623/article/details/46620825</link><guid>https://blog.youkuaiyun.com/u012689623/article/details/46620825</guid><author>u012689623</author><pubDate>Wed, 24 Jun 2015 13:25:27 +0800</pubDate><description><![CDATA[一、 基本使用
安装：下载二进制包后可直接解压使用

从源码安装则执行命令：./bootstrap; make; make install——尝试执行bootstrap失败

使用：cmake dir_path，生成工程文件或makefile文件

二、 概念
out-of-source build，与in-source build相对，即将编译输出文件与源文件放到不同目录中；
]]></description><category></category></item><item><title><![CDATA[在MacOS上homebrew的安装和使用]]></title><link>https://blog.youkuaiyun.com/u012689623/article/details/44982699</link><guid>https://blog.youkuaiyun.com/u012689623/article/details/44982699</guid><author>u012689623</author><pubDate>Fri, 10 Apr 2015 18:01:26 +0800</pubDate><description><![CDATA[1.前言
Mac OS X系统下面之前有老牌的Macports，Fink包管理系统，包括apple的官方Mac App Store。所以我们也向在苹果下找到一款比较新的，方便的包管理系统-homebrew
2.安装
homebrew官网：http://brew.sh/
homebrew的git：https://github.com/Homebrew/homebrew
按照官网方式在普通用]]></description><category></category></item><item><title><![CDATA[防火墙规则设定]]></title><link>https://blog.youkuaiyun.com/u012689623/article/details/44748857</link><guid>https://blog.youkuaiyun.com/u012689623/article/details/44748857</guid><author>u012689623</author><pubDate>Mon, 30 Mar 2015 12:28:07 +0800</pubDate><description><![CDATA[1.防火墙规则配置文件：/etc/sysconfig/iptables
2.查看系统服务状态：chkconfig(查看所有系统服务) 或者service iptables status(查看防火墙状态)或者iptables -L (查看具体规则配置)
3.防火墙规则：INPUT、OUTPUT、FORWARD
4.新增防火墙规则：iptables -A INPUT -p tcp --dport]]></description><category></category></item><item><title><![CDATA[Lua面向对象]]></title><link>https://blog.youkuaiyun.com/u012689623/article/details/44002841</link><guid>https://blog.youkuaiyun.com/u012689623/article/details/44002841</guid><author>u012689623</author><pubDate>Sun, 01 Mar 2015 17:19:06 +0800</pubDate><description><![CDATA[metatable的介绍：
Lua的table可以模拟面向对象，都得益于metatable的强大之处。在一个table中，如果索引一个元素未能找到，解释器会去该table下的metatable中的__index元素中去寻找，即table.metatable.__index.xxx中寻找。
但是如果要修改table中的元素或赋值操作，但是该元素不存在，那么会在table中创建该元素，而不会去me]]></description><category></category></item><item><title><![CDATA[tolua++入门]]></title><link>https://blog.youkuaiyun.com/u012689623/article/details/43937157</link><guid>https://blog.youkuaiyun.com/u012689623/article/details/43937157</guid><author>u012689623</author><pubDate>Wed, 25 Feb 2015 14:15:38 +0800</pubDate><description><![CDATA[tolua++使用SCons进行编译，我们也可以使用自己喜欢的IDE新建一个控制台（Console）工程，然后将源码下bin目录中所有文件加入到工程中，直接编译即可；同样地，新建一个静态库（Static Library）工程，将源码下lib目录中所有文件加入进入，编译即可。当然了，这些工程是需要lua库支持的，目前tolua++最新版本是1.0.93，支持lua 5.1.x。
经过上面的步骤，在]]></description><category></category></item><item><title><![CDATA[Linux下gcc经验总结]]></title><link>https://blog.youkuaiyun.com/u012689623/article/details/43760493</link><guid>https://blog.youkuaiyun.com/u012689623/article/details/43760493</guid><author>u012689623</author><pubDate>Thu, 12 Feb 2015 11:43:49 +0800</pubDate><description><![CDATA[1.gcc的常用参数：
I(大写i)参数：添加头文件目录到索引目录；例如：-I /usr/local/include/
L参数：添加链接库目录到索引目录；例如：-L /usr/local/lib/
l(小写L)：表示编译时添加链接库文件；例如：-ltest(参数与内容中间没空格)代表着连接（库名为test）链接库文件，库名和实际文件名是不同的，库名是文件名去掉开头的lib和结尾的.a或.so]]></description><category></category></item><item><title><![CDATA[两种封装模块方式的比较]]></title><link>https://blog.youkuaiyun.com/u012689623/article/details/43734581</link><guid>https://blog.youkuaiyun.com/u012689623/article/details/43734581</guid><author>u012689623</author><pubDate>Wed, 11 Feb 2015 15:49:08 +0800</pubDate><description><![CDATA[一般情况下，我们用c++去写一个模块封装类，首要考虑的一个问题就是如何获取该模块的操作指针，在模块外部尽量减少限制和操作。多数情况我们去提供一个模块的静态方法，也可以理解为一个端口去得到本模块的指针，从而可以调用模块的的所有功能方法，包括初始化。下面总结两种封装方式的优劣：
第一种封装：
#include 
class test{
public:
	~test(){}
	void show()]]></description><category></category></item></channel></rss>