自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

原创 GMAT Sentence Correction(3): 时态

Sentence Correction(句子改错)是GMAT考试中的一个项目,用于考察考生正式英语的书写能力。通过研究GMAT的句子改错可以进一步提高英语语法水平,尤其是对一些细节问题的探讨,可以使遣词造句更加严谨整洁。tense(时态)问题属于GMAT Sentence Correction考察的八大语法问题类别中的Rhetorical Construction(修辞结构)。相对于中文等无时态语言,英文等有时态语言可以通过时态的正确使用使它的逻辑更加严密和精确。

2022-11-24 12:45:00 1206 1

原创 用Unity的GetSpectrumData方法识别钢琴曲中的钢琴琴键

简单介绍音律相关的知识,写代码实现分析琴键的功能并对一个简单爬音音频进行测试,最后探讨一下该方法的局限性。

2022-05-22 23:47:30 1881 4

原创 简单研究Unity中的万向锁和欧拉角以及四元数

欧拉角是欧拉在17世纪发明引进的一个数学工具,在三维欧几里得空间内,欧拉角可以确定一个物体的朝向。在解决静态问题上,欧拉角是一个比较完美的解决方案,但在动态问题上,欧拉角有一个万向锁的瑕疵,数学界在后来发明了四元数也叫欧拉参数已经解决了这一问题。Unity也已经很好的规避解决了万向锁的问题,但是在手动旋转物体时还是有可能会遇上这一现象。

2021-11-21 20:01:06 5081

原创 巴塞尔问题欧拉解法逐步推导与分析

巴塞尔问题:所有平方数的倒数的和是多少?112+122+132+142+...+1n2=?\frac{1}{1^2}+\frac{1}{2^2}+\frac{1}{3^2}+\frac{1}{4^2}+...+\frac{1}{n^2}=?121​+221​+321​+421​+...+n21​=?(n趋近于正无穷)推导开始://分割线内先推导一个麦克劳林级数假如有一个函数:f(x)=A+Bx+Cx2+Dx3+Ex4+Fx5+Gx6+...f(x)=A+Bx+Cx^2+Dx^3+Ex^4+Fx

2020-11-17 18:04:01 8586

原创 时间复杂度-线性对数时间nlogn的一些研究

文章目录代码复杂度分析最坏情况时间复杂度Partitian()分区方法指令数量分析Quicksort方法的时间复杂度更加精确的复杂度分析最佳情况时间复杂度与最差情况的区别代码C#: Quicksort–Hoare partition scheme void Swap(ref int a,ref int b){ int temp = a; a = b;...

2019-02-01 23:03:09 2439

原创 Unity Shader: 理解Stencil buffer并将它用于一些实战案例(描边,多边形填充,反射区域限定,阴影体shadow volume阴影渲染)

本文示例项目Github连接:https://github.com/liu-if-else/UnityStencilBufferUses有两次被人问到stencil buffer的用法,由于对它的印象一直比较模糊回答的含糊其辞,这两天研究了下它并总结出此文。1,Stencil buffer在OpenGL渲染管线/Unity Shader中的角色为什么叫stencil 模板如果将屏幕上所有像...

2019-01-11 22:46:21 17057 2

原创 美,英,荷文元音及元音组合国际音标对照表

最近分析了一下自己口语不标准的问题,发现问题之一时有时会搞错单词中元音的正确发音,所以研究了一下元音发音的变化。发现英语的元音变化很多并且规则不严密,没法靠记规则解决这个问题,毕竟口语不像书写可以给你思考的时间和改错的机会,所以还是只能靠日积月累背单词积累语感。荷兰语倒是很简单,牢记后可以像念拼音一样读荷兰语了。但还是列出这个表,给自己也给有需要的人可以随时参考一下,有参考“英语发音规则(整理版)...

2019-01-10 00:20:13 1436

原创 在英语语法的基础上分析荷兰语的一些语法点

两种语言大的框架基本相同:主谓宾定状补句子成分,主/宾格,被动/主动语态,现在/过去/未来时态,陈述/祈使/虚拟语气——英语的大部分语法都适用于荷兰语。有些语法点是形式不同,例如进行时,英语是动词原型+ing,荷兰语是 aan het+动词不定式;有些是语法上性质不同叫法不同但使用方法相同;还有一些是规则有略微差异且并未增加语法的复杂度,例如第二三人称在一般现在时的动词变化一致(英语是一二人称...

2018-12-16 04:19:11 3275

原创 在Unity内利用混融公式剔除背景颜色导出透明PNG以及半透明遮挡相关问题的研究

最近听到了一个想法,是将Unity内的一些特效进行截图,导出带透明度的png用于视频制作,于是回顾了一下以前研究过的混融相关的问题,研究了一下如何实现,也学到了一些新的技巧和知识。混融公式(图1:OpenGL渲染管线)在OpenGL渲染管线中,对于透明相关的处理是在管线后期进行的。画面中的物体,三角形是按照一定顺序渲染的,当物体或三角形在位置发生重叠时可能会出现一个颜色覆盖另一个颜...

2018-04-30 13:35:59 7824

原创 Unity Shader:用几何着色器实现复联3灭霸的终极大招灰飞烟灭

(上图:效果图1。普通网格模型) (上图:效果图2。几何着色器粒子化特效进行中。) (上图:效果图3。几何着色器粒子化特效进行中。)1,用几何着色器进行图元转换在OpenGL渲染管线中,几何着色器(Geometry Shader)有一个独一无二的工功能,既是图元转换。这里不对理论进行过多的讨论,可简单理解为渲染点,线,面之间的转换。 实现很简单,只有注意语法即可,以本...

2018-02-11 22:17:13 3500 2

原创 CPU高速缓存SRAM命中问题的总结与实验

1,多级缓存结构由于内存传输信号至CPU的速度过慢(相对于CPU的计算速度),目前在CPU与内存之间都存在着多级缓存(intel core i5和i7是3级缓存,L1,L2,L3),内存,缓存,CPU的结构关系大致如下。 (图1)高速缓存中存储信息的主要单位是组(sets),每组里有行(associative),每行里存着固定大小的字节,数据块,(line size)。每级缓存大小既是sets*a

2017-11-23 18:08:09 3136

原创 用三元操作符替代if-else以降低CPU分支预测惩罚实现Unity内函数13倍提速

测试对象1,Unity脚本(C#) 2,C# DLL(mcs build 动态链接库导入Unity) 3,C Native Code(LLVM编译后导入Unity)被测试函数源码(C#):两个随机数数组进行大小比较,一个数组保存大数,另一个保存小数。 public void Minmax1_CSharp(double[] a,double[] b,int n){ int i

2017-11-09 20:20:52 2081

原创 Unity Shader:Waveform波形(3)-复合波

# 2D复合波![这里写图片描述](https://imgconvert.csdnimg.cn/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcwOTI1MTMxMjIyMzc4?x-oss-process=image/format,png)(图1:在xy平面有三个波,y1=sinx,y2=sin2x,y3=sin3x)根据叠加原理(superposition principle),可以将这三个波组合成一个复合波形,这个复合波既是三个波形相加后的结果:y=sinx+

2017-09-25 16:37:24 3307 5

原创 Unity Shader:Waveform波形(2)-基本波形:正弦,三角,锯齿,直角以及其变种的实现方式

在Shader中,波形可以作为一种模拟动态的手段,例如颜色的波动,形状的波动,可以基于此创作出各种效果。 下文介绍几种基本波形以及变种的Shader实现代码,并配以函数图像和简单动画效果图。在效果图中,Shader代码计算出y值,在顶点着色器中赋给顶点的y坐标,或在片段着色器中插值后乘以颜色。波形公式中参数的说明:base:基点。波形的起始点。振幅从此点开始计算。 amplitude:振幅。振幅

2017-08-30 17:10:28 7253 5

原创 Unity Shader: 优化GPU代码--用step()代替if else等条件语句。

普通的卡通着色Shader:先看一个Shader,卡通着色。Shader "Unlit/NewToonShading"{ Properties { _Shininess("Shininess",float)=1 _Edge("Edge Scale",range(0,1))=0.2 _FinalColor("Final Col

2017-08-21 20:00:37 44528 9

原创 Unity Shader: Shader粒子广告牌

广告牌效果既是不论物体与摄像机的角度,被渲染物体总是正对着摄像机。此技术广泛利用于粒子效果中,例如Unity内置的Particle System。下文将要介绍如何在Shader中实现广告牌效果。# 在视空间对顶点进行重定位

2017-08-14 17:29:11 3531

原创 Unity Shader:Waveform波形(1)-用正弦函数做闪烁效果并分析波形公式中的参数

(图1:利用三角函数实现的闪烁动画)由于GPU机制的特殊性,在写Shader做动画效果时,很多时候要用到三角函数。实现上图中闪烁效果的Shader代码:```cfloat brightness=pow(sin(_Time.y*_SparkleRate+phase),20)*800;o.color.rgb=v.color.rgb*brightness;o.color.a=1;```计算brightness的代码行实际上来自以下公式:$y=((\sin(\_Time.y*SparkRat

2017-08-14 11:16:29 3585

原创 Unity Shader:细分着色器(Tessellation Shader)在Unity顶点着色器中的写法以及各参数变量解释

(上图:将sphere与quad进行细分后)Unity官网关于细分着色器的资料比较少,只有在Surface Shader中使用的例子。我看了下Surface Shader的generated code,总结出如何在顶点与片段着色器中写hull shader和domain shader并实现基本的Tessellation细分功能。首先看一下Unity Shader的4个可编程着色器的执行顺序:

2017-07-12 20:36:16 10026

原创 编译分析:提memcmp.c+gcc四十米大刀到C#世界中屠龙

在stackoverflow上有关于在C#中如何进行最快的byte数组判断:[https://stackoverflow.com/questions/43289/comparing-two-byte-arrays-in-net](https://stackoverflow.com/questions/43289/comparing-two-byte-arrays-in-net)据讨论的网友统计,最快的方法是使用C语言的memcmp.c。下文会针对memcmp源码写一个C#版本进行比较测试,并进行编译分析。

2017-07-04 16:48:34 2588

原创 Unity Shader:三向贴图(Tri-planar mapping)---解决地形拉伸贴图变形以及贴图边缘的缝隙问题

效果图: 效果图1,地形:左边为三平面式贴图效果,右边为一般贴图效果。 效果图2,树干:右边为三平面式贴图效果,左边为一般贴图效果。 效果图3,球体:左边为三平面式贴图效果,右边为一般贴图效果。1,世界坐标贴图 World Space UV-mapping 在一般的贴图方法中,在片段着色器内使用tex2D(texture,uv);对2D材质进行采样时,片段着色器将会根据顶点着色器将会传入的顶

2017-06-28 15:18:52 17622 5

原创 Unity Shader:雾的数学运算以及在Unity中使用Fog

Forward,MSAA,Bloom,Global Fog/Exponential Squared/Density 0 Forward,MSAA,Bloom,Global Fog/Exponential Squared/Density 0.045 Forward,MSAA,Bloom,Global Fog/Exponential Squared/Density 0.085 Forw

2017-06-26 19:26:24 5846

原创 Unity Shader:向量在世界空间与切线空间中变换的相关数学原理与应用

1,将向量由世界空间变换至切线空间 2,将向量由切线空间变换至世界空间1,将向量由世界空间变换至切线空间假设在世界空间中有一个球体,还有一个光源,光源的方向接近于正对球体点p的法线。 图1在点p处存在着一个切线空间,在此空间中,p的法线作为z轴,p的tangent作为x轴,p的binormal由normal和tangent叉乘而得,作为y轴。tangent由点所在的三角形中的uv方向确定(三

2017-06-22 15:50:53 10261 2

原创 Unity Shader:实现菲涅尔+色散效果的环境映射以及相关原理解析

1,色散在光学中的原理 2,反射的原理以及环境映射的实现 3,折射的原理以及色散的实现 4,菲涅尔效果 5,将菲涅尔与色散效果增加到环境映射中1,色散在光学中的原理复色光 ——现实生活中的许多光都是复色光,例如阳光。 光谱 ——光学频谱,简称光谱,是复色光通过色散系统(如光栅、棱镜)进行分光后,依照光的波长(或频率)的大小顺次排列形成的图案。https://zh.wikipedia.o

2017-06-20 20:16:54 13066 2

原创 Unity Shader:Unity网格(1)---顶点,三角形朝向,法线,uv,以及双面渲染三角形

1,顶点顶点是网格最基础的组成部分,可通过mesh.vertices获取和赋值。mesh.vertices是一个Vector3的数组,每个Vector3代表了此顶点在世界空间中的位置。顶点的位置,数量没有任何限制。几个同样的顶点可以组合成若干不同形状,不同数量的三角形。mesh = new Mesh ();Vector3[] v3s=new Vector3[4];v3s [0] = new Ve

2017-06-15 17:33:04 17317 3

原创 汇编指令push,mov,call,pop,leave,ret建立与释放栈的过程

感觉这东西有点烧脑,花了一下午时间终于整个捋顺了整个流程。 想理解好此过程,理解每个指令的作用,必须结合指令行地址,栈地址和寄存器一起来分析,否则很容易被绕晕。 大图图片说明:内存地址,汇编指令都为简写,用的十进制,栈空间1个格子大小是4*8=32位(对应32位操作系统),指令行长度应为1-6字节,都简化为1字节。为了简化汇编指令行,函数都没有参数。实际执行顺序一列中,左边为寄存器或栈空间地址,

2017-05-28 18:41:45 23012 1

原创 Code Review:C#与JAVA的哈希表内部机制的一些区别

看C#与JAVA源码时发现C#与JAVA哈希表的实现略有不同,特此分享一下。---## 基本结构比较### JAVA的桶```java278 static class Node<K,V> implements Map.Entry<K,V> {279 final int hash;280 final K key;281 V value;282 Node<K,V> next;283 284 Node(

2017-05-06 19:49:28 2471 3

原创 Unity&网络:在局域网P2P网络中利用UDP广播实现保活/心跳

UDP在应用层实现保活/心跳在TCP网络中,已连接的两个端点互相知道对方端点的状态,例如连接时要三次握手,正常断开时要发FIN,异常断开时可以通过保活机制发现。UDP一个重要特征是无连接,因为无连接,使用它进行广播就特别方便,不必像TCP先连接才能通讯,因为无连接,它没有保活机制,一个节点不知道其他节点的状态。在一个在局域网场景中,可以应用UDP灵活的广播能力设计一个保活机制,各个P2P节点保存一个邻居节点列表,根据网络消息实时更新各个节点在线状态。

2017-04-27 18:32:16 4389

原创 Unity&网络--HLAPI(2):Unity HLAPI NetworkManager与NetworkBehaviour的回调函数

虽然当前的Unity游戏服务器模块即将被砍,不过作为当前最主流游戏引擎的一般性通用服务器架构,研究一下还是可以学习学习它的一些思想。Unity HLAPI既High Level API是相对于Low Level API,它隐藏了网络传输层的细节,更专注于将一些功能性的API暴露给使用者,其中NetworkManager为抽象出的最核心的管理类对象之一,而NetworkBehaviour可看做是MonoBehaviour的网络化版本。就如同我们习惯从MonoBehaviour的OnEnable,Start

2017-04-27 16:14:17 3157

原创 Unity&网络--HLAPI(1):服务器客户端变量同步,脏标识以及定制特性SyncVar

服务器同步变量-在网络游戏中,大部分事务都是在服务器内处理的,例如NPC被玩家攻击后减HP,服务器需要将变化的HP值传到各个客户端,客户端更新此HP值后,客户端才会显示减血后的NPC血量,这种同步变量是网络游戏中最基本也是最频繁的操作。

2017-04-12 23:43:09 2902

原创 在unity向量空间内绘制几何(4): 利用平面几何知识画像素直线

总结:算法的优势:真实,精确的模拟两点间的直线 。当num为一个较大的数时(相对与斜线所经过的像素块的数量),不会出现像素块遗漏的情况(会出现上图中的很精确的爬楼梯的效果)。虽然这种精确并不是计算机在像素级别画线时所需要的。算法的劣势:1,对于在像素领域画线这种重量级操作来说此算法性能太差,计算量大,计算了很多多余的坐标点。2,由于算法思路与传统计算机图形学算法的思路不同,在有些情况下,计算出的像素点集合与传统像素图像算出的不同。

2017-03-02 16:51:24 2219 2

原创 Unity Editor自制工具(1)--“Editor目录栏按钮+全局搜索方法+自制Editor窗口”实现搜索与删除场景中任意名称游戏物体

1,制作Editor上方目录按钮----------------------------------------------在C#静态方法上方加上[MenuItem("目录")],可在Editor中上方目录栏生成一个按钮。

2017-02-15 16:06:54 1667

原创 在unity向量空间内绘制几何(3):通过三角形重心坐标寻找三角形内任意点的位置

1,理解三角形的重心坐标(面积坐标)假如有任意一个三角形ABC,设它的三个顶点为a,b,c,三角形内任意一点为p,三角形PBC,PCA,PAB面积之比为λ1:λ2:λ3\lambda_1:\lambda_2:\lambda_3且λ1+λ2+λ3=1\lambda_1+\lambda_2+\lambda_3=1。则点p与三个顶点a,b,c有以下关系: p=λ1a+λ2b+λ3cp=\lambda_1

2016-12-05 00:40:10 3265

原创 Unity5.X打包与加载AssetBundle简单示例

所有脚本代码来自官方打包AssetBundle:在Editor界面,点击prefab或文件,在AssetsBundle处设置此prefab的Assetsbundles属性。 点New可以创建AssetBundle名称,输入“/”可设置下一级名称。 多个物体可设为同一个AssetBundle名称。 添加一个脚本,给Editor增加一个打包的功能:using UnityEditor;public

2016-10-07 18:38:00 3966

原创 Unity协程实现分析以及Lua协程与Unity协程的混合使用

原文地址:http://stackoverflow.com/questions/12932306/how-does-startcoroutine-yield-return-pattern-really-work-in-unity Unity3D coroutines in detail Many processes in games take place over the course

2016-09-22 23:23:13 1728

原创 从汇编代码的角度观察switch与if...else,乘除与移位的差别

Switch与if…else有以下两个函数,功能基本相同,sum5()是switch版本,sum6()是if else版本。 public int sum5(int x,int y){ switch(x){ case 1: y+=1; break; case 2: y+=2;

2016-06-15 17:49:05 1890

原创 在Unity内使用对象池并实现线程安全的单例模式

用对象池管理游戏物体既是用Setactive命令将游戏物体关闭与开启来代替Instantiate与Destroy,重复使用同一种游戏物体,这种方法性能消耗小,可以把不同地点,不同事件,不同角色调用的同一种游戏物体放在一个列表中管理,在复杂场景中简化代码管理。 抽象理解起来就好像是把一堆东西放在一个地方,用的时候就拿一个出去,再用就再一个一个拿。用完了再放回来。拿出去的东西既是激活的游戏物体,放回来

2016-06-04 22:17:23 2482 2

原创 在unity向量空间内绘制几何(2):计算球体的表面坐标

今天进一步研究一下如何获取一个球面的三维坐标。在电影黑客帝国第三部分矩阵革命的最后部分,有一段NEO独创机器城与机器世界的首领交涉的情节。这个机器首领的名字叫做Deus Ex Machina,拉丁文翻译成拉丁文翻译成英文是God out of the machine,是机器城市的中枢,控制着所有机器。下文将会尝试在Unity向量空间内,通过将球面的极坐标公式转化成代码模拟重构这个‘上帝机器’。

2016-06-01 12:10:56 2462

原创 二进制(2):浮点数的一些问题

浮点数,例如C语言的float与double,每天都会用,但是有很多人不知道为什么它被称为浮点,以及它表示的值是如何从1与0的机器代码中计算出来的。以下内容回答了几个基本问题,1,什么是浮点数?点是如何浮动的?浮点数的优势是什么?2,目前通用的IEEE754浮点数是如何计算的?3,如果浮点数被赋的值,例如运算结果或其他格式转换后的值不在浮点数可表示的范围之内会发生什么?4,同样数值的二进制代码在整数编码和浮点数编码中

2016-05-29 12:01:17 2005

原创 二进制(1):无符号编码和补码编码

二进制既是将不同长度的“位”(一个1或0)组合在一起再加上不同的解释以赋予含义。同样的机器代码[ 1000 1010] 在不同的编码模式下的意义是不同的。这里分析一下无符号编码,既是C语言中的unsigned int, 与补码编码,C语言中的 int。通过五个方面进行学习:1,将位模式转换为两种编码格式下的值的过程的函数缩写,2,位向量在两种编码格式下的取值范围,3,位向量在两种编码格式下的扩展方法,4,理解溢出这

2016-05-25 19:08:15 8097

原创 在unity向量空间内绘制几何(1):通过将极坐标转换为直角坐标,绘制阿基米德螺线,对数螺线与玫瑰线等几何图形

一些基础几何图形的极坐标公式--极坐标内的每个点都有两个参数: r, 与 $\theta$。r为此点到极点(中心点)的距离,$\theta$ 为此点到极点的线段与极轴(类似x轴)的夹角。很多几何图形公式都可以用极坐标简洁的表示,例如:阿基米德螺旋线:(公式1) r=a+b*$\theta$

2016-05-20 00:38:58 7549

空空如也

空空如也

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

TA关注的人

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