自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Magic_Conch

菠萝屋会有的~

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

原创 xlua热更新简单demo

1.参考资料参考视频教学环境下载2.实现的内容点击鼠标生成一个立方体,然后用xlua热更新,使得其点击鼠标能生成一个球体3.环境安装从github下载xlua的开发框架,然后把框架Assets里面的内容复制到自己新建的工程的Assets目录下,然后复制Tools里面的内容到根目录。设置Player Setting里面的Scripting Define Symbols的值为HOTFIX...

2020-04-08 11:47:21 499

原创 unity协程

协程概述不用急着给它去下个定义,我们只需要知道协程能做什么,我们在什么时候需要使用它就可以了。在我们需要控制函数的执行顺序的时候,我们就需要使用它了,下面我简单的列举几个书上看到的以及我日常中碰到的问题。1.如何让一个物体渐变我们通过写一个for循环循环它的透明度显然是不可行的,因为一帧以内会执行完整个for循环,我们只能看得到开头和结尾的部分。2.如何截取屏幕的图片当然,这不是一般...

2019-11-20 18:23:53 284

原创 几何检测

概述几何检测主要相交性检测,这里的内容大体上是根据《3D数学基础-图形与游戏开发》这本书来的,对于这本书来说,这一部分看完了后面内容就不看了,因为后面讲的太空泛了,有点像一本绝世武功的目录一样,看似很强,其实没什么卵用。1.2D隐式直线上的最近点问题描述:直线p * n = d,对于任意点q,找出直线上距离q最短的点q’同高中解析几何简单粗暴的公式不同,这里面的算法都是基于向量来计算的...

2019-11-03 09:05:39 755

原创 四元数的差、对数、指数、幂以及差值

概要对于四元数的学习基本上都是参照《3D数学基础-图形与游戏开发这本书的内容的》对于这本书前面的部分还是很好理解的,但是从四元数的差这里开始,就过于抽象了,不配合实例很难去理解。因此,这一段被我单独提取出来,在实践中进一步去理解。差,对数,指数等是定义式,不要试图在四元数的这些操作中找到这些数学符号的本身含义,它只是被定义成这样子的,没有为什么。。四元数的差四元数的差表示四元数的两个四元...

2019-11-01 10:25:14 6702

原创 欧拉角、四元数、旋转矩阵的互相转换

概述方法来自于《3D数学基础,图形与游戏开发》这本书。学习这些转换可以加深自己对这些知识点的理解~两两转换一共有六种情况,下面就依次列举一下这六种情况。1.从欧拉角转换到矩阵这种情况的转换不难,还记得我们的旋转矩阵长啥样吗,欧拉角的三个值就是坐标系绕着特定轴旋转的值,注意是坐标系旋转哦,点的旋转值是和坐标系的旋转值相反的,需要把旋转矩阵的角度取反。比如下面就是绕y轴的旋转矩阵,角度h取反...

2019-10-31 21:19:08 628

原创 万向锁的理解

万向锁万向锁这个概念其实还是不大好理解的,看了很多的博客,虽然看起来他们讲的很有道理,可还是想不通。希望我这篇文章能讲清楚。。。万向锁产生的根本原因是绕三个轴的旋转不是同时进行的,想象一下我们旋转矩阵的推导是不是绕三个轴的旋转矩阵乘起来得到的,这三个旋转矩阵的摆放顺序不同,最后得到的旋转矩阵也是不相同的,因此,一般的系统都会有一个规定,比如unity来说,先绕y轴旋转,然后绕x轴旋转,最后是...

2019-10-31 19:19:04 3999 5

原创 向任意平面的投影矩阵的推导

概述方法来自于《3D数学基础,图形与游戏开发》这本书。基本原理这个方法其实有点思维跳跃,原理是首先推导出一个任意方向n缩放比例为k的缩放矩阵,然后将k变成0,这就变成了向垂直于n的投影平面的投影矩阵缩放矩阵的推导对于坐标轴上的缩放,我们很容易就能获得缩放矩阵:[kx000ky000kz] \begin{bmatrix}kx&0&0\\0&ky&0\\...

2019-10-30 22:01:31 1164

原创 绕坐标轴以及任意轴的旋转矩阵的推导

概述本文主要是针对《3D数学基础-图形与游戏开发》这本书的读书笔记,这本书前面部分还是讲得挺好的,有时间还是建议读一下。旋转矩阵的推导旋转矩阵怎么来的我倒一直都没有概念,这本书里面对旋转矩阵的来历倒是给了我一些启发。首先从二维的旋转矩阵开始[cosθsinθ−sinθcosθ] \begin{bmatrix}cos\theta & sin\theta \\ -sin\theta...

2019-10-30 19:54:19 8341 3

原创 unity屏幕特效综述6 景深效果

从这一部分开始,我的工作从学习别人的代码要逐渐转到自己敲代码了,中间跨越还是挺大的,景深效果的原理看似简单,也写了快一天时间了。下面我简单说明两种景深效果的写法,一种是我自己探索着写的,另一种是参考别人的博客写的(https://blog.csdn.net/puppet_master/article/details/52819874),不得不承认,别人的方法还是要成熟一点。景深效果给我的直观理...

2019-09-22 21:48:38 798

原创 unity billboard效果

这种效果是让一个平面能跟着视角进行旋转,从而使得该平面一直朝向着摄像机,形成一种立体的感觉.billboard主要有两种,第一种是固定向上方向的billboard,比如说草地,一个草地贴图向上的方向一定是(0,1,0),unity自带的草地就是用的这种方法的,这种固定向上方向的billboard最后形成的结果就是图片绕着y轴进行旋转,毕竟俯视的时候如果看到草地法线朝着视角肯定会露馅的。第二种b...

2019-09-19 23:10:23 4364 1

原创 unity 卡通风格渲染

unity 卡通风格的渲染主要分成两个步骤,第一个步骤是给模型描边,第二个步骤是实现卡通着色的高光效果。这两个步骤同时也是对应的两个不同的pass。第一个步骤首先要剔除正面,然后对背面的轮廓线进行描边,为什么要对背面进行描边呢。当然是因为对正面进行描边的效果很鬼畜啦,删除代码中的Cull Front,会看到下图的效果,所以这时候应该能理解为什么要对背面进行描边了,描边的方法是把顶点往法线的方向扩...

2019-09-19 22:20:27 5661

原创 unity 水波效果

这个水波效果并非真实的让顶点去运动而产生的的效果,而是通过法线扰动而产生的模拟效果,产生效果主要分为三个步骤,第一个步骤是计算折射,第二个步骤是计算反射,最后一个步骤是混合反射和折射的值。首先是计算折射值,这个也是这三个中最复杂的一个部分,首先折射所采样的纹理是通过grabpass来实现的,grabpass可以在渲染完毕所有的不透明物体之后把渲染完毕的图形存储到一个纹理中,然后在下一个pass...

2019-09-19 21:37:36 1502

原创 unity 消融效果

如上图所示,本shader的功能就是让箱子一点一点的消融,然后逐渐消失。这个shader功能主要分为两个部分,第一个部分是消失,第二个部分是边缘着色,第三个部分是自定义阴影投射的Pass。消失的实现是比较简单的,只需要一行代码即可,clip(burn.r - _BurnAmount);直接裁减掉不满足要求的片元,burn是一个噪声图,这样可以形成随机消失的效果。边缘着色部分的代码还是有一定...

2019-09-19 20:36:06 974

原创 unity屏幕特效综述5 全局雾效

雾的计算原理其实很简单float3 finalColor = f * fogColor + (1-f)originColor也就是按照某种比例把雾的纹理和原始的纹理相融合,其中比较关键的点就是f的选取f的选取有多种方式,比如说f=dmax-d/dmax-dmin 这种的就是线性的雾,直观的感觉就是高度越接近dmin,雾的浓度越大,越接近dmax,雾的浓度就越小,此外,还有指数形式的计算方法,...

2019-09-19 19:23:10 1515

原创 unity屏幕特效综述4 边缘检测

这个屏幕特效我挺喜欢的,可以用来描边,也可以用来提取边缘,获得很多很棒的效果。什么样的点可能是边缘部分所在的点呢,如果该点附近的法线值相差的很多,那么这个点就可以被认为是一条边,具体的值可以用参数来控制。法线的差值我们通过卷积来获取,使用2x2的矩阵(-1,0,0,1)检测x方向以及2x2矩阵(0,-1,1,0)检测y方向,这个卷积核叫做Roberts算子。这个屏幕特效的脚本部分没什么好说的,...

2019-09-18 21:58:31 337

原创 unity屏幕特效综述3 运动模糊

1.原理这里运动模糊特效值得是摄像机在运动的时候,场景会产生模糊的效应,而摄像机不动物体运动这种情况则不会产生。原理很容易,我们有很多方法实现,比如说直接获取相邻帧的图像,然后和这一帧图像进行混合,在这里我们采取另外一种方式,我们获取每个像素的运动速度,然后根据速度来偏移uv来获得多个采样,再把多个采样的结果进行混合即可。那么问题来了,要怎么才能获得速度呢,想要获取速度,我们可以通过相邻两帧...

2019-09-18 20:40:45 550

原创 unity 深度纹理和法线纹理

原理在实现某些屏幕后处理的时候,仅仅只有图像的rgb信息是很难实现的,同简单的图像处理不同的是,我们能在shader中获得图像每个像素的深度信息和法线信息。想要理解深度纹理的原理就必须要对渲染流水线有个比较深入的了解,深度纹理和法线纹理通过unity底层使用的一个单独的pass来把整个场景再次渲染一遍,保存在_CameraDepthTexture里面,其中RG通道存储法线信息,BA通道存储深度...

2019-09-18 18:58:24 745

原创 unity shader 入门精要阅读笔记-----渲染流水线

1渲染流水线这一部分的重点就是渲染流水线,理解渲染流水线对于后面的学习来说至关重要,这也是图形学的一个重要的基础知识环节。我们探讨空间中的模型是怎样一步一步转换到我们的屏幕坐标,然后显示在我们的面前的。我们把步骤分成四个步骤,顶点处理阶段–光栅化阶段–片元处理阶段–输出合并阶段1.1顶点处理阶段这一阶段的任务就是把我们的顶点坐标从模型空间转换到裁剪空间。1.1.1 矩阵变换虽然大学...

2019-09-17 16:25:20 238

原创 unity屏幕特效综述2 bloom

bloom效果就是把图片的亮的部分往外面扩散,下图就分别是原图和使用了bloom效果的图片。其实现原理其实也就分成了两个部分,第一个部分是如何找到亮的部分,第二个是如何扩散。首先是如何提取练了高度部分,对于颜色的亮度我们有一个公式0.2125 * color.r + 0.7154 * color.g + 0.0721 * color.b;这个公式的返回值就是该颜色的亮度,我...

2019-09-16 10:38:08 504

原创 unity屏幕特效综述1 高斯模糊

1.高斯模糊高斯模糊是后面很多屏幕特效的基础部分,其原理也很容易。在学习之前,必须要学会卷积的操作,如图所示,卷积操作指的是使用一个卷积核(左图的3x3矩阵)对待处理图像的每一个像素进行卷积操作,具体的做法是把3x3矩阵的中心点放到待卷积的像素上,然后对卷积核覆盖到的像素的值乘以卷积核的值,然后求和,就是该像素的最终结果。例如,我们使用卷积核为3x3的矩阵,矩阵每一个值都是1...

2019-09-15 23:13:06 508 1

原创 计算机图形学常用算法实现11 扫描线z-buffer算法

图形学作业要到deadline了,赶紧写一个这个算法比之前的算法的工作量都要大,但是只要思路清晰,也不是很难。1.创建各种需要的数据结构类//点的类class Point{public: float x; float y; float z; Point(); ~Point();};//y表class YTable{public: int m_IndexOfPoly...

2019-01-10 10:36:04 4766 1

原创 计算机图形学常用算法实现10 多边形裁剪Sutherland-Hodgman算法

算法原理比较简单,用裁剪区域的四条边分别去分割多边形。假设边p1,p2,用区域某条边进行裁剪。方向为p1->p21.p1在边外,p2在边外无操作2.p1外,p2内保存交点p和p23.p1内,p2内保存p24.p1内,p2外保存交点分割完之后更新多边形的点集代码裁剪区域为(200,200)到(400,400) private void SutherlandHodgm...

2018-11-30 12:24:49 4738 14

原创 计算机图形学常用算法实现9 梁友栋-Barskey裁剪算法

这个算法的效率比前面提到的Cohen-Sutherland要高思路是把直线表示为参数方程形式,x= x1+udxy = y1+udy由xmin<x<xmaxymin<y<ymax可以得到四个不等式,简化成同一个形式up<q 当p不等于0的时候,可以算出来u与边界的交点,p等于0的时候,左边等于0,只需简单的判断q的正负。然后求直线和边界以及边界延长线的四...

2018-11-30 10:42:04 3188 1

原创 计算机图形学常用算法实现8 中点分割裁剪算法

这种方法使用了二分法查找边界,优化了Cohen-Sutherland方法,减小了讨论的数量。代码如下:int encode(Point p){ int code = 0; if (p.Y > 400) code += 8; if (p.Y < 200) code += 4; if (p.X > 400) ...

2018-11-28 17:58:48 2234

原创 计算机图形学常用算法实现7 Cohen-Sutherland裁剪算法

在winform下运行算法本身的实现不算很难,但是这个算法的思路很秀,反正我是想不出来。代码中的区域为(200,200)~(400,400)的区域int encode(Point p){ int code = 0; if (p.Y > 400) code += 8; if (p.Y < 200) code += 4; ...

2018-11-28 15:42:24 2335

原创 计算机图形学常用算法实现6 区域填充算法-非递归形式(扫描线优化)

运行环境winform这个算法基本上是书上的思路,没有很大的变动,感觉代码写的很秀,很有水平。不断把所有待填充的区间添加到stack,然后一个个填充,效率比之前写的都要高一些。主要代码如下(多边形的构建,map函数的初始化等需要自行添加):void ScanLineFill4(int x,int y){ int xl, xr, i; bool spanNeedFill;...

2018-11-28 13:47:57 1141

原创 计算机图形学常用算法实现5 区域填充算法-递归形式

递归形式的区域填充算法的效率实在是太低了(就是裸的dfs),导致图形大一点就会爆栈,没有很大的实用性。但可以通过扫描线进行优化,具体的优化代码可以参考下一节。如果有时间,之后我也会在后面补上优化后的算法。代码如下:void floodFill4(int x,int y,int i){ if (map[x, y] == false) { g.Fill...

2018-11-27 23:34:22 1120

原创 计算机图形学常用算法实现4 多边形扫描转换算法-边界标志算法

代码是在winform中运行的。看书上这个算法写起来轻描淡写的,实际上实现起来还是有很多难点的,难点如下:1.无法判断经过某个点的时候是不是应该变号。2.扫描算法画直线的时候,可能同一行有多个点相邻的情况,如果遇到这样的点就变号结果会出现错误。3.两条相邻边的路径可能经过同一个点,尤其是dy>>dx的时候,不加以判断还是会出错。解决方法如下:1.借用扫描线算法的思路,如果经...

2018-11-27 21:14:29 1443

原创 计算机图形学常用算法实现3 多边形扫描转换算法-扫描线算法

这个算法其实很复杂的,实现起来需要有耐心,一步一步按照算法思路来写代码。在算法中,我使用的是静态链表(c#没有指针-_-||)下面的AET为活性边表,NET存储新边表1.定义数组,变量 class AET//定义AET表,不论是AET还是NET表用的都是这个AET类,因为里面的内容都是一样的 { public float x; public floa...

2018-11-27 13:19:17 6668 3

原创 计算机图形学常用算法实现2 中点画圆法

在winform下实现,如果在其他环境,思路完全一样,只需替换画图的函数即可。中点画圆法算是中点画线法思路的一种实际应用,本质是一样的。1.对称画图,只需要画1/8部分的圆(我们的函数里面取45~90度部分),其他部分对称画过去即可,对称画图的代码如下: void drawCirclePoints(Point p1,Point p2) { ...

2018-11-27 12:44:05 1547

原创 计算机图形学常用算法实现1 DDA,中点画线法,bresenham算法

打算手动实现图形学中的绝大部分算法。运行环境winform+c#我们的函数默认是按x坐标顺序递增传入的,因此在调用下面函数之前,需要保证p1.x<p2.x(可以减少讨论数量) Point pp = new Point(); if (p1.X > p2.X) { ...

2018-11-27 12:09:25 5138 1

空空如也

空空如也

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

TA关注的人

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