- 博客(31)
- 收藏
- 关注
原创 Unity PBR和BRDF (Shader篇)
这篇文章主要是说明什么是PBR,什么是BRDF,在Shader实现PBR框架时能更好的理解每一步计算的意义是什么。对于后续根据自己游戏进行魔改一些风格有基础。(新增了Shader代码的实现部分)
2025-12-04 20:49:11
718
原创 向量(Unity Shader篇)
向量在Unity中可以表示一个位置或者一个方向,通过一个Vector4的第四个分量控制。如[1,1,1,1]第四个分量为1,则说明这个是个位置向量Unity使用的是三维笛卡尔坐标系,X轴表示左右、Y轴是上下、Z轴是前后。
2025-10-31 10:53:44
125
原创 Unity Shader 从零开始
实例代码是为了基础的了解Shader框架,核心是顶点函数和片段函数、标签的使用,都是在告诉gpu也如何渲染模型。
2025-09-22 21:28:01
1154
1
原创 从零开始 - 制作一款游戏(程序员视角)
一个从事游戏行业2年快3年的新人客户端开发,从小就喜欢玩各个平台的游戏,想从零开始制作一款游戏,此文章来分享和督促自己的整个过程。因为我也是一个新手,不懂一个正确的流程,很多基础知识也不是很熟,也不过是边巩固基础边制作,也会记录下一些问题,希望如果有大佬们看到可以给一些解答。(因为平时工作也很累的,所以坚持每天一更吧,有时候下班太晚的话,实在更不了)
2023-07-09 22:47:57
348
原创 每日学习记录
2022-03-01四元数欧拉角(x,y,z,w),w是什么参数四元数始终遵循一个定义:w²+x²+y²+z²=1,所以真正可控的数据只有:x, y, zlerp和slerp线性插值的定义:已知数据 (x0, y0) 与 (x1, y1),要计算 [x0, x1] 区间内某一位置 x 在直线上的y值Unity为啥使用lerp能使物体的移动显得更加流畅,因为线性插值会根据公式:from + (to - from) * t,这样会更加细化每个移动点的位置,计算的每个点的位置越详细,动作就
2022-03-01 22:36:19
2796
原创 Unity OpenWorld
前言:unity最新的教程学习,使用2019的unity版本来完成一个开放世界的创建。准备工作熟悉外包资源的加载与使用可以在Mixamo上下载需要的角色模型摄像机第三人称摄像机的设置1.鼠标移动,视角的移动。获取的是鼠标Asia中Mosue X和Mouse Y的值。上下移动使用Mouse Y。左右移动使用Mouse X摄像头的转动使用localRotation来完成要使用camera容器来装Main Camera,脚本放在容器中实现视角围绕着角色移动的效果在改
2020-09-26 17:11:20
507
原创 面试的坎坷之路(9-2 - 现在)
前言:一个普通本科的应届毕业生,经历了几家公司的面试与笔试都没有通过,现在来记录下来每次笔试与面试的经验,用来下次面试更好的提高自己三七互娱笔试(9-2)面试题目类型:选择题:35道图形找规律题,而且时间比较紧凑,每题都没有太多的时间思考。4道基础题目,跟java、操作系统、计算机网络有关,问的题目不是很深,但很细4道简单题,1道算法题,2道unity题,1道操作系统题不足:1.最大的问题,操作系统与计算机网络的不足,连一些基础的问题都不懂2.unity的基础问题
2020-09-02 15:28:12
625
1
原创 Leetcode周赛专题
204场周赛5500. 乘积为正数的最长子数组长度解题思路:我们使用两个数组来进行动态规划,分别为p_dp[i]:以 i 结尾乘积为正数得最长子数组长度n_dp[i]:以 i 结尾乘积为负数得最长子数组长度。当nums[i]为不同情况时,每个数组得不同操作如下:nums[i] > 0时,p_dp[i] = p_dp[i - 1] + 1即可。n_dp[i] 要根据n_dp[i - 1] 是否存在负数得最长子数组,若存在则乘上一个正数还是负数所以n_dp[i] = n_dp[i - 1.
2020-08-31 17:56:58
346
原创 Leetcode树专题
二叉树的层序遍历解题思路:这是对二叉树进行层级遍历考研,不同的是存储的方式,使用2维数组进行存储,所以我们先记录该层的数量,进行该层的vector存储,然后进行下一层的遍历,以此类推。代码:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : v
2020-08-20 09:53:50
123
原创 Leetcode每日一题专题
通配符匹配字符串、动态规划思路:动态规划法:1.定义数组dp[i][j]:s的前i个字符串匹配p的前j个字符串2.数组之间的关系:假设p[j] = '*' 那么如果使用星号就等于dp[i - 1][j],如果不使用就等于dp[i][j - 1],假设为问号或者s和p匹配,那么就等于dp[i - 1][j - 1]3.初始化数组:dp[0][0] = true,并且当p = '*'且s为空时,dp[0][i] = true字符串匹配法:设定两个标识位,分别标识当存在星号时,i
2020-07-22 15:59:48
199
原创 LeetCode回溯法专题
基本思路前序:在搞清楚基本思路之前,我们先根据每个回溯题目的大概思路,思考一下回溯法的难点在哪里。难点1:回溯函数的参数的决定回溯函数能如何进行下一步最关键的就是参数要怎么变化,找到每一步有哪些参数进行改变了,进行下一步要改变的参数又是拿些。这就可以确定了回溯函数的参数难点2:每一步回溯函数的逻辑在一步的回溯法中,要找到这步的选择列表,然后思考要不要使用到后面回溯的结果,最后再决定每个数要进行操作难点3:回溯法的回溯操作回溯操作就是回归到上一步的状态。例如在数组中就删除最后进
2020-05-24 16:50:06
750
1
原创 leetcode位运算专题
或运算的最小翻转次数题目:给你三个正整数a、b 和 c。你可以对 a 和 b的二进制表示进行位翻转操作,返回能够使按位或运算a OR b == c成立的最小翻转次数。「位翻转操作」是指将一个数的二进制表示任何单个位上的 1 变成 0 或者 0 变成 1 。思路:对比每个二进制中得位数,不用管a,b,c变成多少,只要翻转得最小次数即可。代码:class Solution {public: int minFlips(int a, int b, int c...
2020-05-18 21:17:18
401
原创 算法随手笔记
1.c++比较与java,可以把main函数写在前面,自定义函数写在后面嘛?2.关于map的遍历方法C++:使用iterator迭代器完成遍历#include<iostream> #include<map> using namespace std; int main() { map<int,int> mi; map<int,int>::iterator it; //mi.insert(1,2);.
2020-05-18 17:18:19
184
原创 Mysql高性能
事务:理解事务最简单的实例就是银行转账特征:1.原子性:一个事务被视为一个不可分割的最小工作单元,要么全部成功,要么全部失败回滚2.一致性:在语句执行以外的原因失败(系统奔溃)事务也不会提交3.隔离性:通常来说,一个事务所做的修改还没最终提交时,其他的事务都是不可见的4.持久性:一旦事务提交,所做的修改将会永久保存在数据库中...
2020-03-18 18:10:34
151
原创 计算机操作系统
重要公式:a:系统某个部分初始耗时比例,k:加速比例,S:获取的加速比重要计算:二进制和十六进制之间的计算:普通方法:特殊情况方法:十进制和十六进制计算:使用x除于16取余数,余数转化为16进制数,然后倒序书写数据类型的取值范围...
2020-03-10 17:30:37
709
3
原创 计算机网络学习汇总
具体构成端系统通过通信链路 (communication link)和分组交换机 (packet switch) 连接到一起。通信链路:它们由不同类型的物理媒体组成,俗称网线分组交换机:从它的一条人通信链路接收到达的分组,并从它的一条出通信链路转发该分组,俗称路由器专业用语:因特网服务提供商:简称ISP通过由N条速率均为R的链路组成的路径,端到端时延是:,P=L/...
2020-03-03 16:32:12
966
原创 牛客网练习题
222.音乐研究:解题思路:首先,必须要使用到第一段得全部数据而且还是连续,这样我们就只要找到第二段中得第一个数,后面就是循环相减找到最小即可代码:#include<iostream> #include<string> #include<algorithm> #include<math.h> #include<cmat...
2020-02-07 17:39:50
636
原创 Leetcode 刷题记录
写给自己的:算法是一个很关键的技能,关于思路和编译能力的提升都有很大的帮助,一个题不要只是想怎么解决出来,而是想怎么最快的解决,虽然这样很慢,但是现在的目标不是什么速成,慢下来可能也是件好事吧。去真正的搞懂每一题。三数之和这题使用双向法,使用k,i,j的索引来标记三个数,使用while循环,判断哪三个数符合要求。代码:class Solution {publi...
2019-11-21 22:43:23
394
原创 牛客竞赛小白赛17题解
1.小sun的假期题目:求出数组中的最长连接数思路:我的思路:先把全部的输入数从大到小整合起来(全部重复的忽略,部分重复的就合成一个时间段),然后遍历数组找出最长连接数网络的思路:直接按照每组的第一个数来排序,(nowl,nowr分别初始化为第一个数的l,r值),从第二个数开始,只要r大于nowr就改nowr值,只要l小于nowr就跳过。(还没搞懂)代码:我的代码:...
2019-10-19 00:23:27
650
原创 广度优先搜索(BFS)
//这章必备的知识点:散列表,队列。概念:BFS是盲目型的搜索,展开所有的节点,直到找到目标节点为止。使用队列来保存已经遍历过的节点。和深度优先搜索的区别:概念上的区别:BFS是盲目的展开节点,就像是层次遍历方法一样,而DFS是从一个根节点走到一个叶节点,然后通过回溯没有走过的路径从而达到全部的遍历。 实现原理的区别:BFS是使用队列来完成存储,DFS是使用栈来完成存储,其实没有...
2019-03-17 21:42:19
225
原创 散列表(哈希表)
概念散列表和map函数的原理差不多,是根据键值对(key,value)就能直接访问的数据结构,key和value之间存在着一种映射的关系,这个映射函数就叫散列函数,而储存的数组才是散列表,value可以是一个值,也可以是一个链表,如果要处理散列表的冲突问题就要使用到链表。映射之间转化原理通过散列函数公式转化为整型类型,然后再用数组长度来对这个整型进行求余,求余的结果就是数组下标,用这个...
2019-03-13 22:48:04
158
原创 map函数和set函数
概念map函数:map函数用键值对的方式来存储数据,提供的是一种一对一的关系,这样在某些情况下提供了很好的便利。map函数的头文件是#include<map>,实例化一个map对象:map<int ,string>,而且在修改操作中,只能改变string的值,不能更改int索引值。map函数并不是数组,所以如果要遍历的时候,就要使用迭代(iterator)才能实...
2019-03-12 20:16:56
664
原创 cf平台刷题日常
706B - Interesting drink直接使用vector<int>来存放数据,再每个判断多少个数据少于num即可;但是这里有个很大的陷阱,那就是时间限制,直接使用for循环给vec是错误的,必须使用二分法查找才能通过,这也给我提供了一个新的思路,如果使用循环超时的话,可以考虑一下二分法查找;代码:#include<iostream>#incl...
2019-03-10 23:30:16
2667
原创 深度优先搜索(DFS)学习
概念的理解:对于一个复杂的问题,以一个子问题作为根节点,把全部的可能都求出来,这其中的一个过程就叫做深度优先搜索,而这种方法叫做穷举法。二叉搜索树:二叉搜索树的概念:每个节点都大于它的左节点和小于它的右节点。从DFS概念的角度说,5->1;5->4->3,5->4->6,这就是这个图全部的解(可能)。然后就是对于二叉树的操作问题:构造二叉...
2019-03-09 19:17:02
561
原创 删除排序数组中的重复数字
给定一个有序数组,你需要原地删除其中的重复内容,使每个元素只出现一次,并返回新的长度。不要另外定义一个数组,您必须通过用 O(1) 额外内存原地修改输入的数组来做到这一点。示例:给定数组: nums = [1,1,2],你的函数应该返回新长度 2, 并且原数组nums的前两个元素必须是1和2不需要理会新的数组长度后面的元素解题思路:设定两个不同的标记点i 和 k ,k 标记的是不重读的元素...
2018-04-08 14:55:38
182
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅