自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(186)
  • 问答 (2)
  • 收藏
  • 关注

原创 技术篇(二)Demo示例——Bundle打包和加载

介绍Unity游戏开发中的资源管理——Bundle打包和加载,通过Demo示例演示代码开发。

2022-03-31 22:56:15 3811

原创 渲染篇:法线贴图

今天接着讲渲染基础:就是下面的法线贴图了。什么是法线贴图?法线贴图这个东西,只要搞渲染算法的肯定会遇到。简单来讲,法线就是指模型表面的凹凸感,而凹凸感的产生是因为模型表面像素的光照条件不一样产生的。比如下面这个图,边缘光照压暗了,所以给人有一种凹凸3D感觉。但凹凸感跟法线贴图有什么关系?在逐像素计算光照时,每一个像素都会根据该点的法向量来计算最终该点的光照结果,那么,我们如果能够改变这个法线的方向,就可以改变这个点的光照结果,进而影响模型表面凹凸感。比如,高模在计算光照时,每个面

2021-09-12 20:06:54 876

原创 unity渲染篇:烘焙模型贴图

今天要来做一件有趣的事情,那就是把一个模型数据烘焙到贴图上!什么意思?就是下面酱紫,把这只小喵从第一张图拍扁,变成第二张图的样子(似乎有点残忍~)可能你经常会从美术那边听到“烘焙光照贴图”、“烘焙法线贴图”、“烘焙高光贴图”等等词语,好奇的小伙伴不禁会有疑问:烘焙贴图是个啥玩意???一言以蔽之(丰富的成语储备),烘焙贴图其实就是把像素级别的信息存储到贴图上,以方便后续作进一步使用。OK,然后我们就可以来看看怎么把模型数据(其实就是顶点信息)存储到贴图上,就是你了~...

2021-03-27 00:07:44 2134

原创 unity渲染篇:画面亮度、饱和度、对比度调整

先看一眼最终的实现效果。这是原图,我们可以跟抖音一样,对它进行各种处理,比如美白、滤镜、各种特效。这里我们先来加几种最简单的画面效果:(1)亮度值,从0到1:(2)饱和度,从0到1:(我觉得这个饱和度为1时还挺好看的~)(3)对比度,从0到1:可能有部分小伙伴们,对于亮度、饱和度、对比度这些概念还不是很清楚,这里先大致做下解释。我们知道,在计算机中描述一个物体颜色的常见方式是“RGB颜色模型”,这种方式虽然很方便计算机的计算,但却不方便人们的理解,所以人们想.

2021-03-18 00:00:36 8094

转载 C++编译与链接(0)-.h与.cpp中的定义与声明

转自 http://www.cnblogs.com/magicsoar/p/3702365.htmlC++中有的东西需要放在可以在.h文件中定义,有的东西则必须放在.cpp文件中定义,有的东西在不同的cpp文件中的名字可以一样,而有的则不能一样那么究竟哪些东西可在头文件中定义,声明,哪些东西又必须在.cpp中定义,声明呢? *以下所有的讨论都是在全局命名空间中(即不

2016-06-06 14:50:25 1710 1

转载 C/C++编译器错误代码大全

来自:  http://www.iamlicky.cn/post/109.html编译器错误 C2001  错误消息                           常数中有换行符                          字符串常数不能继续到第二行,除非进行下列操作:                          •用反斜杠结束第一行。

2016-06-06 11:00:00 13738

原创 VS2013的一些配置、调试、使用

1.VS2013的基本使用和调试http://jingyan.baidu.com/article/f3ad7d0fe7ca0d09c3345b84.html2.VS2013的配置修改,使得每次编译不用整个工程重新编译一次浪费时间http://blog.163.com/soda_water05/blog/static/212832235201381521147398/

2016-05-17 10:25:50 14322

转载 C++的回调机制

什么是回调开发中经常遇到等待其他模块事件通知的情况,例如:用户点击UI上button的事件,通知给相关函数处理逻辑Model中数据改变的事件,通知给相关View模块刷新界面异步IO完成的事件,通知给处理函数确认成功还是失败客户端向服务器发N种不同请求,服务器为每种请求准备好处理函数这些等待通知的函数被执行的过程就是回调的过程,所以回调是一个很常见很简单的事情。回调可能大

2016-05-16 11:34:10 10581 3

转载 进程与线程的区别

线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别:(1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间;(2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源(3)线程是处理器调度的基本单位,但进程不是.4)二者均可并发执行.进程和线程都是由操作系统所体会的程序运行的基本单元,系

2015-10-17 07:18:57 24521

原创 #ifndef

#ifndef XXX#define XXX...(需要编译的程序)#endif

2015-10-16 23:54:23 274

原创 C++虚基类的作用

参考自:http://blog.csdn.net/caomiao2006/article/details/4463664虚基类的作用     当一个基类被声明为虚基类后,即使它成为了多继承链路上的公共基类,最后的派生类中也只有它的一个备份。例如:class CBase { };class CDerive1:virtual public CBase{ };class CD

2015-10-16 22:49:52 4907

原创 279.Perfect Squares

思路:动态规划。class Solution {public:    int numSquares(int n) {        //判错        if(n                int *dp=new int[n];        //初始化        for(int i=0;i            dp[i]=n;       

2015-10-16 13:15:13 489

原创 链表分段翻转

问题: 将一个单链表每K个一组进行翻转1->2->3->4->5假如k=2,则变成2->1->4->3->5k=3,则变成3->2->1->4->5接口函数:ListNode*res(ListNode*head,intk)代码:ListNode*res(ListNode*head,intk){}#includeusin

2015-10-11 15:43:40 1074

原创 读取ip比如“192.168.1.2”并且提取出里面各个字段的数字

问题:读取ip比如“192.168.1.2”,提取出里面各个字段的数字。解决:循环中,首先cin>>a (a是一个int),然后cin>>s (s是一个char)。这样可以避免先读取string然后再转换为int的麻烦。#include#includeusing namespace std;int main(){        int a;        char s=

2015-10-04 17:40:29 2426

原创 “一个数组有正负0,求和为0的最长连续子数组”的失败解法

问题:一个数组有正负0,求和为0的最长连续子数组失败思路:想半天没有想到什么优化巧妙的方法。最后思路是:对a[0]...a[i]进行累加求和,将原来的a[i]转换为sum_a[i]。初始化时i=-1,从后往前找出第一个sum_a[j]==0的j。正式处理时,从前往后i=0~len,从后往前j=len~i,然后找出第一个sum_a[j]==sum_a[i],判断此时的j-i是否大于原来的j-i,

2015-09-25 22:36:25 887

原创 C++读取多行数字然后读取该行各个数字

问题:比如让循环读取一行数字“1 2 3;4 5 6;7 8 9;”并且取出各个数字1,2,3,4,5,6,7,8,9说明:输入只有一行,以‘;’为分隔符,其实是三行数字,但是注意最后结尾有一个‘;’(如果没有这个分号,代码将发生很大变化)。每行数字以空格分割。解决:使用C++里面的getline和sstream。代码如下。#include#includ

2015-09-25 22:22:42 14010 1

原创 96.Unique Binary Search Trees

问题:给出n,请问这1,2...n个数,能构成多少种二叉排序树思路:动态规划。遍历1...n,i作为根节点,则根节点左边有f(i-1)种可能,右边有f(n-i)种可能,所以以i为根节点时有f(i-1)*f(n-i)种可能,循环即可。class Solution {public:    int numTrees(int n) {        if(n       

2015-08-23 23:36:34 309

原创 24.Swap Nodes in Pairs

问题:给一个链表,每2个节点交换一次,比如,Given 1->2->3->4, you should return the list as2->1->4->3.思路:只考察链表操作,太简单。/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListN

2015-08-23 22:28:28 336

原创 shelll编程-项目笔记

24.awk -F ':' 'BEGIN{printf("hello\n")}{if(NR>=2)printf("%s,%s,%s---NF:%s,NR:%s\n",$1,$2,$3,NF,NR);}END{printf("goodbye\n")}' ./file

2015-08-10 18:50:15 578

原创 64.Minimum Path Sum

问题:给一个矩阵,求一条从左上角到右下角的路径的和,该路径上的数的和最小。思路:很典型的动态规划问题。类似于数学归纳法。划分状态:dp[i][j]表示从坐标(i,j)到右下角的最小和。递推式:dp[i][j]=grid[i][j]+min(dp[i+1][j],dp[i][j+1])。注意边界条件即可。class Solution {public:    int minPathSu

2015-08-08 22:55:40 305

原创 70.Climbing Stairs

问题:斐波那契数列问题思路:用递归的话有很多重复计算,时间、空间不行,有可能栈溢出。用动态规划很好的解决这些问题。class Solution {public:    int climbStairs(int n) {        int* dp=new int[n+1];        dp[1]=1;        dp[2]=2;        for(int

2015-08-08 22:24:21 299

原创 76.Minimum Window Substring

问题:给出两个字符串,求第一个字符串中包含第二个字符串的最大子串。思路:建立两个hash表。第一个hash表存储第二个字符串中各个字符出现的次数。第二个hash表初始化跟第一个hash相同,只不过各个字符的value都等于0。然后遍历第一个字符串,只要当前字符出现在第一个hash表中,就将第二个hash的对应字符的value加1,直到第二个hash表中所有字符的value都大于等于第一个has

2015-08-08 21:16:35 447

原创 136.Single Number

问题:给一个int数组,所有元素均出现2次除了其中一个只出现1次,找出该数。思路:建立hash表:遍历数组元素,如果发现hash中没有出现当前元素,就将当前元素插入hash表;如果hash表已经存在该元素,就将该元素删除。最后hash剩下的那个数就是只出现一次的数。class Solution {public:    int singleNumber(vector& nums) {

2015-08-08 16:29:45 404

原创 242.Valid Anagram

问题:两个字符串,判断是不是通过改变字符位置得到对方。思路:建立hash表查找。一开始用unordered_multimap,key-value分别是“字符-字符是否出现”,但是超时了;后来变成用unordered_map,key-value分别是“字符-字符出现次数”,遍历完了如果hash表刚好被删除,就说明trueclass Solution {public:    boo

2015-08-08 16:10:59 365

原创 207.Course Schedule

问题:课程之间具有依赖性,比如必须先修某门课,然后才可以修另外的课程。给你一些课程,以及课程的依赖关系,求是否能够完成所有课程思路:这种题属于任务队列,先根据依赖关系建立邻接表数组,然后选出所有入度为0的课程入队,修完这些课,相应的依赖课程的入度减1,然后再继续将入度为0的课程入队,直到队列为空。此时判断:如果入队的课程数等于总的课程数,说明每一门课程都入队了,也就是说每门课的入度都降为0,所

2015-08-02 20:52:22 362

原创 107.Binary Tree Level Order Traversal II

问题:跟上道102题基本一样,只不过是要求从最下层开始遍历。思路:多用了一个栈,作为临时结果,最后再把栈的内容搬移到最终结果里即可。class Solution {public:    vector> levelOrderBottom(TreeNode* root) {        vector> res;        if(root==NULL) return res

2015-08-02 16:00:46 332

原创 102.Binary Tree Level Order Traversal

问题:层次遍历二叉树,注意多了个要求:按层输出。思路:广度优先搜索BFS,用队列存储节点。另外为了满足按层输出的要求,需要用到两个辅助变量:cur_layer_num=0,next_layer_num=0;//当前层有多少个节点,下一层有多少个节点。每次出一个节点,当前层就减1,直到0,说明一层结束。每次进一个节点,下一层就加1,直到当前层减为0,下一层计算完毕。/** * Defin

2015-08-02 15:51:52 358

原创 112.Path Sum

问题:搜索二叉树,判断是否存在某个从根节点到叶节点的路径,该路径所有节点值之和为sum。思路:思路很简单:深度优先搜索(其实就是回溯法),当搜索到叶节点时做一次判断;如果某次判断为真,结束程序,返回真;除非搜索完了都没有为真,返回假。/** * Definition for a binary tree node. * struct TreeNode { *     int va

2015-08-02 14:09:48 312

原创 101.Symmetric Tree

判断是否是对称树,镜像树的。思路:先判断根节点,将其拆分成左右孩子节点两棵树。然后用深度优先搜索(其实跟回溯法没啥区别)判断这两棵树的对称位置是否一致即可。/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     Tree

2015-08-02 11:49:21 398

原创 100.Same Tree

思路:分治法,化简即可。/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NUL

2015-08-01 21:07:42 240

原创 111.Minimum Depth of Binary Tree

思路:一开始以为这个题和104题的“Maximum Depth of Binary Tree”是一样,后来发现不是那么回事,存在理解上的错误。只有左右孩子都为空的节点才算是叶节点,所以当根节点只有左孩子而没有右孩子的时候,它的最小深度应该是2,而不是1。class Solution {public:    int minDepth(TreeNode* root) {     

2015-07-05 21:59:07 307

原创 104.Maximum Depth of Binary Tree

思路:求二叉树的深度,很简单。class Solution {public:    int maxDepth(TreeNode* root) {        if(root==NULL) return 0;        return max(maxDepth(root->left),maxDepth(root->right))+1;    }};

2015-07-05 21:42:47 236

原创 209.Minimum Size Subarray Sum

方法1:用双指针滑动窗口。这是一种双指针应用类型题。复杂度O(n)。class Solution {public:        int minSubArrayLen(int s, vector& nums) {                int len=nums.size();                if(len==0) return 0;         

2015-07-03 18:00:59 280

原创 154.Find Minimum in Rotated Sorted Array II

思路:循环排序,二分法。注意存在相等值的情况。class Solution {public:    int findMin(vector& nums) {        int len=nums.size();        //判错        if(len        if(len==1) return nums[0];        int left=0,

2015-07-03 15:28:57 276

原创 35.Search Insert Position

思路:典型的二分法。这里用的是递归写法。有空可以试下非递归的。class Solution {public:    int solve(vector& nums,int low,int high,int target){        if(low>=high){            if(target>nums[low])                 return

2015-07-02 19:58:07 282

转载 valgrind 详细说明

原文地址:http://www.cnblogs.com/napoleon_liu/articles/2001802.html调不尽的内存泄漏,用不完的ValgrindValgrind 安装1. 到www.valgrind.org下载最新版valgrind-3.2.3.tar.bz22. 解压安装包:tar –jxvf valgrind-3.2.3.tar.b

2015-07-02 15:55:04 1077

原创 STL中的堆的使用方法

STL里面的堆操作一般用到的只有4个:make_heap();、pop_heap();、push_heap();、sort_heap();他们的头文件函数是#include (1)make_heap();函数原型是:void make_heap(first_pointer,end_pointer,compare_function);一个参数是数组或向量的头指针,第二个是数组或向

2015-07-01 16:32:26 4686 1

原创 23.Merge K Sorted Lists

第一种方法:分治法。思路:有点类似于MergeSort的思路,就是分治法,不了解MergeSort的朋友,请参见归并排序-维基百科,是一个比较经典的O(nlogn)的排序算法,还是比较重要的。思路是先分成两个子任务,然后递归求子任务,最后回溯回来。这个题目也是这样,先把k个list分成两半,然后继续划分,直到剩下两个list就合并起来,合并时会用到Merge Two Sorted List

2015-06-29 20:48:23 377

转载 linux core文件GDB调试方法

一、如何使用core文件1. 使用core文件在core文件所在目录下键入:gdb -c coreXXX它会启动GNU的调试器,来调试core文件,并且会显示生成此core文件的程序名,中止此程序的信号等等。如果你已经知道是由什么程序生成此core文件的,比如MyServer崩溃了生成core.12345,那么用此指令调试:gdb -c co

2015-06-29 16:30:57 5885 1

原创 53.Maximum Subarray

思路:三种方法:1.暴力遍历:两层循环,不必多说2.分治法:3.动态规划:现在对线性时间解法做一下解释,属于一种DP问题。已知了前k个元素的最大子序列和为maxSub(已经被记录下来了),以及一个临时和sum,如果添加了第k+1这个元素,由于是连续子序列这个限制,所以如果k+1这个元素之前的和是小于0的,那么对于增大k+1这个元素从而去组成最大子序列是没有贡献的,所以可以把sum

2015-06-28 23:54:01 232

空空如也

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

TA关注的人

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