- 博客(68)
- 资源 (6)
- 收藏
- 关注
原创 【寒江雪】UV+Depth信息计算世界坐标
最近要实现Depth反计算世界坐标的效果,于是看了其他网友的博客,实现如下 float d = texture(depthStencilTexture,TexCoords).r; vec4 NDC = vec4(TexCoords.x*2.0 - 1.0, TexCoords.y*2.0 - 1.0, d*2.0 - 1, 1.0); vec4 worldPos = inv_view * i...
2019-10-20 01:59:42
566
原创 【寒江雪】Unity中调用C++的函数和类
这几天一直在搜Unity怎么使用C++写的类,百度出来的都是如何在C++中调C++写的Add方法,很苦恼,然后google第一条就找到了国外网友的答案 先给出在Unity中怎么调C++写的Add方法的示例,这个示例已经是全网传遍了的。// Add.cppextern "C" _declspec(dllexport) int Add(int x, int y);int Add(int...
2019-04-19 22:56:32
2686
5
原创 【寒江雪】计算两个面的交线
计算两个面的交线 空间中两个平面要么相交要么平行,相交平面得到的是一条直线。 根据之前的博文有讲述,空间中不共线三点确定一个平面。那么已知两个平面,且两平面相交,应该如何去计算两平面之间的交线呢? 思路分析:如果两平面相交,获得一条直线,那么该直线就同时属于两个平面。那么该直线会同时垂直于两个平面的法线。那么两个平面的法向量的外积,就可以计算出交线的方向。这时候还需要计算交线上一...
2018-07-27 13:06:17
25826
原创 【寒江雪】计算直线与平面的交点坐标
计算直线与平面的交点坐标 直线与平面交点坐标的计算公式推导 直线l=p+a⃗ tl=p+a→tl = p + \vec{a}t 取平面内一点s,法向量n⃗ n→\vec{n} 则由ps→cos<ps→,n⃗ >=ps→⋅n⃗ ps→cos<ps→,n→>=ps→⋅n→\vec{ps}\cos = \vec{ps}\cd...
2018-07-27 13:02:42
6426
原创 【寒江雪】判断空间中两直线的位置
判断空间中两直线的位置 假设空间中有两直线l1,l2l1,l2l_1,l_2 其中l1=t1a1→+b1l1=t1a1→+b1l_1 = t_1\vec{a_1}+b_1,l2=t2a2→+b2l2=t2a2→+b2l_2 = t_2\vec{a_2} + b_2 两直线在空间中的位置关系,有异面,平行和相交。通过以下几个步骤判断他们的位置关系作向量c⃗ =b1−...
2018-07-26 22:14:42
3547
原创 【寒江雪】空间内两直线相交
空间内两直线相交 在三维空间内,两直线相交公式的推导。整个推导过程假设两直线一定相交。 设空间内有直线l1,l2l1,l2l_1,l_2相交于点pppl1=t1a1→+b1l1=t1a1→+b1l_1 = t_1\vec{a_1}+b_1 l2=t2a2→+b2l2=t2a2→+b2l_2 = t_2\vec{a_2}+b_2 p=t2a2→+b2p=t2a2→+b2p = t_...
2018-07-26 00:27:54
6848
原创 【寒江雪】两异面直线之间的距离
两异面直线之间的距离 两异面直线之间的距离的计算方法,根据两异面直线的公垂线的方向向量,和直线上任意两点组成的方向向量来计算距离。 假设两直线分别为p1=t1a1→+b1p1=t1a1→+b1p_1=t_1\vec{a_1}+b_1,p2=t2a2→+b2p2=t2a2→+b2p_2 = t_2\vec{a_2}+b_2 两直线的公垂线的方向向量即为n⃗&nbsp;=a1→×a2...
2018-07-24 23:44:47
3292
原创 【寒江雪】Go实现迭代器模式
Iterator Pattern 迭代器模式可以把对象的访问方式给封装出来,只需要给某种数据结构实现自己的迭代器,用户只需要拿到迭代器就可以轻易操作该数据结构,而不需要在乎底层实现。实现封装一个容器package iteratorimport "container/list"type Container interface{ Iterator()Itera...
2018-07-24 19:25:50
688
原创 【寒江雪】Go实现组合模式
Composite Pattern 组合模式是以树形结构来组织组件完成某个功能。当根节点的某个方法被调用时,会遍历树结构,调用相应的方法。不过具体如何设计是因人而异的。 它突出的是整体和部分的关系。实现 组合模式的结构中有两种类型,一种是分支节点,它包含了子节点列表,可以往里边添加和删除节点。另一种是叶子节点,叶子节点没有子节点。这两种节点都实现了同一个接口:Compo...
2018-07-24 19:25:12
403
原创 【寒江雪】Go实现装饰者模式
Decorator Pattern 装饰着模式可以在需要扩展某个类的时候,动态地修改而不需要在内部添加代码,也可以防止类爆炸。 装饰者模式可以提供了灵活地扩展方案.实现 实现一个日志的自定义功能.package decoratorimport ( "time" "fmt")type LogDecorate interface { ...
2018-07-24 19:24:48
312
原创 【寒江雪】Go实现外观模式
Facade Pattern 外观模式其实就是把复杂的东西给封装,由统一的接口进行操作。这样可以简化用户的使用。例子 如果要开一家饭馆,一个饭馆分为采购的,管仓库的,切菜的,炒菜的,吃菜的。 而采购的,管仓库的,切菜的,炒菜的,是厨房。吃菜的,是客户。客户并不希望知道厨房工作的细节,只希望告诉厨房自己想吃什么就行了,他不想告诉厨房要去买什么菜,怎么切,怎么炒。而巧的是,...
2018-07-24 19:24:21
306
原创 【寒江雪】Go实现策略模式
Strategy Pattern 策略模式在运行时动态地装配算法行为到对象中。 我们可以定义算法,封装它们,动态地切换它们。实现type Operator interface{ Apply(int,int)int}type Operation struct{ Operator Operator}func (this *Operation)Op...
2018-07-24 19:23:10
286
原创 【寒江雪】Go实现模版方法模式
Template Pattern 模版方法设计模式允许把对象不同的部分抽象,在同一段代码中执行相同的逻辑,增加可拓展性。在Go语言中,实现由底层对象实现,而行为由顶层方法控制。实现package templateimport &quot;fmt&quot;type Tmpl interface{ DoSomething() DoAnything()}type Tmp...
2018-07-24 19:21:23
261
原创 【寒江雪】判断一个点是否在网格内
判断一个点是否在多边形网格内 根据前几天看到的博客——《判断一个点是否在多边形内》——突发奇想,设计一个算法判断一个点是否在多面体网格内。 这里假设该网格物体都是由许多个三角面构成的,同时假设该网格物体是封闭的。 那么要判断一个点是否在网格内,就由该点朝某个坐标轴方向发射一条射线(也就是构造一条射线)。 如果该射线穿入的三角形面数与穿出的三角形面数之和为奇数,那么可以确定该...
2018-07-24 19:15:38
2736
7
原创 【寒江雪】平面内点坐标的分解
平面内点坐标的分解 看题目有点绕,但其实要做的事情很简单。 假设一个平面,由不共线三点OAB构成。设OA→=i⃗ OA→=i→\vec{OA} = \vec{i},OB→=j⃗ OB→=j→\vec{OB} = \vec{j} 则平面内任意一点P=O+αi⃗ +βj⃗ P=O+αi→+βj→P = O + \alpha\vec{i} + \...
2018-07-24 11:55:46
450
原创 【寒江雪】点面距离的计算
点面距离的计算 空间中一个平面可以用三个点来表示,那么计算空间中一个点到平面的距离其实也相当简单。 直接上推导过程 假设平面内任意一点O(x0,y0,z0)(x0,y0,z0)(x_0,y_0,z_0) 基向量 a⃗&nbsp;a→\vec{a}(ax,ay,az)(ax,ay,az)(a_x,a_y,a_z) 和 b⃗&nbsp;b→\vec{b}(bx,by,bz)(bx,...
2018-07-21 19:49:04
2712
原创 【寒江雪】空间中的点线和面
空间中的点线和面 在三维空间中,最基本的元素莫过于基本的点,线和面。 他们之间的关系,可以这样理解,点按着一定的方向平移可以得到直线,线按照一定的方向平移可以得到平面,这个结论想象一下就可以理解了。 可是要在数理逻辑上来表示这些元素,就需要根据一定的公理,定理来确定了。表示空间中任意一个点 在三维空间中,要表示任意一个点可以使用三维坐标来表示点的位置信息。 ...
2018-07-21 18:37:24
1388
1
原创 【寒江雪】圆与胶囊型物体的碰撞检测
圆与胶囊型物体的碰撞检测 本文主要讲述平面中一个,圆与胶囊型物体的碰撞检测的一种算法。 圆形由圆心+半径表示。 胶囊型物体的两端是两个半圆,中间部分是一个矩形。所以胶囊型物体的表示由两个圆心+半径来表示。 要对这两种图形做碰撞检测,就要涉及到圆心到胶囊型物体的最短距离的计算。这时候就要用到点到线段的最短距离的计算方法。 计算出最小距离的平方D^2。然后根据D^2...
2018-07-20 01:43:54
1253
原创 【寒江雪】圆与扇形物体的碰撞检测
圆与扇形物体的碰撞检测 扇形物体包括一个圆心和两个端点,两个端点在扇形物体的弧上。可以用三点+半径来表示一个扇形,或者也可以用三点来表示一个扇形。 要对圆与扇形物体做碰撞检测,先来分析圆与扇形物体的位置关系。 圆心可能的位置有两种:在扇形物体的扇面朝向的方位不在扇形物体的扇面朝向的方位 这两种情况的判断方法是有区别的。 对于第一种情况,直接根据圆...
2018-07-17 16:24:32
2171
3
原创 【寒江雪】点到直线的最短距离
点到直线的最短距离 根据直线的表示方式p = at + b,可以设一个点P(px,py),任意一点A(x0,y0)到点P的距离可以根据两点间距离公式求出。 D^2 = (px-x0)^2+(py-y0)^2 = (axt+bx-x0)^2+(ayt+by-y0)^2 = (ax^2+ay^2)t^2 + 2{ax(bx-x0)+ay(by-x0)}t+(...
2018-07-17 16:21:11
5153
原创 【寒江雪】实现物体的匀速圆周运动
让物体做圆周运动圆心在原点,半径为1的匀速圆周运动curAngle += angleSpeed * Mathf.Deg2Rad;float x = Mathf.Cos(curAngle);float y = Mathf.Sin(curAngle);圆心在原点,半径可变的匀速圆周运动curAngle += angleSpeed * Mathf.Deg2Rad;f...
2018-07-13 21:48:30
1220
原创 【寒江雪】Box-Muler算法——均匀分布转正态分布
Box-Muler算法 Box-Muller,一般是要得到服从正态分布的随机数,基本思想是先得到服从均匀分布的随机数再将服从均匀分布的随机数转变为服从正态分布。 Box-Muller 算法隐含的原理非常深奥,但结果却是相当简单。它一般是要得到服从正态分布的随机数,基本思想是先得到服从均匀分布的随机数再将服从均匀分布的随机数转变为服从正态分布。 如果在 (0,1] 值域...
2018-07-13 21:47:54
3684
原创 【寒江雪】直线的表示
直线的表示 在一个平面中,两点确定一条直线,通过高中的知识,可以根据两点计算直线的斜率,以y=kx+b的形式表示直线,但是为了更好地在计算机中表示直线,可以通过两点来表示一条直线。 要表示一条直线,原理无非是表示直线上的点集。y=kx+b表示的就是直线点集中的纵坐标与横坐标之间的关系。 撇开表达式表示法,用向量来表示一条直线,可以表示成p=at+b。这里a和b就是两个...
2018-07-13 21:45:07
957
原创 【寒江雪】Go实现迭代器模式
Iterator Pattern 迭代器模式可以把对象的访问方式给封装出来,只需要给某种数据结构实现自己的迭代器,用户只需要拿到迭代器就可以轻易操作该数据结构,而不需要在乎底层实现。实现封装一个容器package iteratorimport "container/list"type Container interface{ Iterator()Itera...
2018-03-23 00:50:02
777
1
原创 【寒江雪】Go实现模版方法模式
Template Pattern 模版方法设计模式允许把对象不同的部分抽象,在同一段代码中执行相同的逻辑,增加可拓展性。在Go语言中,实现由底层对象实现,而行为由顶层方法控制。实现package templateimport "fmt"type Tmpl interface{ DoSomething() DoAnything()}type Tmp...
2018-03-23 00:18:42
1350
2
原创 【寒江雪】Go实现策略模式
Strategy Pattern 策略模式在运行时动态地装配算法行为到对象中。 我们可以定义算法,封装它们,动态地切换它们。实现type Operator interface{ Apply(int,int)int}type Operation struct{ Operator Operator}func (this *Operation)Op...
2018-03-20 15:40:36
983
原创 【寒江雪】Go实现状态模式
State Pattern 状态模式把对象每一个状态的行为封装在对象内部。避免大量状态逻辑杂糅。实现package stateimport "fmt"type State interface{ NextState()State Update()}type GameStartState struct{}type GameRunState s...
2018-03-19 13:25:09
842
原创 【寒江雪】Go实现观察者模式
Observer Pattern 观察者模式使得一种类型的实例可以发送事件给其他类型,前提是接收事件的实例要根发送者订阅这个事件。实现 先来定义要使用到的接口package observertype( Event struct{ Data int64 } Observer interface{ OnNotif...
2018-03-17 12:45:15
1443
1
原创 【寒江雪】Go实现备忘录
Memento Pattern 备忘录模式保存一个对象的状态,在需要的时候将其恢复。 该模式在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。 很多时候我们总是需要记录一个对象的内部状态,这样做的目的就是为了允许用户取消不确定或者错误的操作,能够恢复到他原先的状态,使得他有”后悔药”可吃。实现 我们以...
2018-03-17 00:55:53
617
原创 【寒江雪】Go实现中介者模式
Mediator Pattern 中介者模式定义一个中介对象来封装系列对象之间的交互。各个对象不需要显示地相互引用,从而使其耦合性松散,而且可以独立地改变它们之间的交互。实现 说起中介,就想到买房。package mediatorimport ( "fmt" "gopkg.in/mgo.v2/bson")type Mediator interf...
2018-03-15 21:00:21
748
原创 【寒江雪】Go实现命令模式
Command Pattern 命令模式将命令包裹在对象中,并传给调用对象。调用对象寻找处理该命令的合适对象,并把该命令传给合适的对象,该对象执行命令。例子 举一个例子,在go里边调用C语言的代码,来监听键盘的输入,并调用与输入绑定的函数。 定义事件码和事件结构。const ( EVENT_CODE_KEY = iota)type EventCode...
2018-03-14 17:26:39
1129
原创 【寒江雪】Go实现责任链模式
Chain of Responsibility Pattern 责任链模式为请求创建了一个接收者对象的链。处理请求的对象是一系列链条,或者一个集合。每个处理节点都保存有其他处理节点的引用。接收到请求的时候,会判断该请求是否需要自己处理,处理完毕传给下一个处理节点,有点像流水线作业。例子 让我举一个复杂一点的例子。我就不用链条的形式来写了,我用一个map来保存处理器的引用。 ...
2018-03-14 00:07:06
2240
原创 【寒江雪】Go实现代理模式
Proxy Pattern 代理模式使得一个对象可以给另一个对象提供访问控制。截取所有访问。实现 代理模式可以使用在很多地方,例如网络连接,内存中大的对象,一个文件,或者其他消耗大的对象,或者是不可能被复制的对象。下面是一个简单的例子。package proxyimport ( "fmt" "sync")type IObject inter...
2018-03-13 18:16:51
1011
原创 【寒江雪】Go实现享元模式
Flyweight Pattern 享元模式使用共享物件,来尽可能多地减少内存使用量以及共享给尽可能多的相似组件。 它适合用于当大量物件只是重复因而导致无法令人接受的使用大量内存。通常物件中的部分状态是可以分享。常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元。实现 我们举个例子:游戏中的角色都有基础属性游戏中的角色都会穿上装备装备是不同的单基础...
2018-03-13 16:06:44
645
原创 【寒江雪】Go实现外观模式
Facade Pattern 外观模式其实就是把复杂的东西给封装,由统一的接口进行操作。这样可以简化用户的使用。例子 如果要开一家饭馆,一个饭馆分为采购的,管仓库的,切菜的,炒菜的,吃菜的。 而采购的,管仓库的,切菜的,炒菜的,是厨房。吃菜的,是客户。客户并不希望知道厨房工作的细节,只希望告诉厨房自己想吃什么就行了,他不想告诉厨房要去买什么菜,怎么切,怎么炒。而巧的是,...
2018-03-13 14:03:16
343
原创 【寒江雪】Go实现装饰者模式
Decorator Pattern 装饰着模式可以在需要扩展某个类的时候,动态地修改而不需要在内部添加代码,也可以防止类爆炸。 装饰者模式可以提供了灵活地扩展方案.实现 实现一个日志的自定义功能.package decoratorimport ( "time" "fmt")type LogDecorate interface { ...
2018-03-13 00:58:53
783
原创 【寒江雪】Go实现组合模式
Composite Pattern 组合模式是以树形结构来组织组件完成某个功能。当根节点的某个方法被调用时,会遍历树结构,调用相应的方法。不过具体如何设计是因人而异的。 它突出的是整体和部分的关系。实现 组合模式的结构中有两种类型,一种是分支节点,它包含了子节点列表,可以往里边添加和删除节点。另一种是叶子节点,叶子节点没有子节点。这两种节点都实现了同一个接口:Compo...
2018-03-12 20:55:48
638
原创 【寒江雪】Go实现桥接模式
Bridge Pattern Bridge Pattern说的是,当一个系统中,包含一个组件,该组件是可变的,该系统是可变的。这个时候就需要一个桥连接抽象的系统和抽象的组件。 如果该系统包含多个其他的组件,这些组件都是可变的时候,也需要在该系统和这些组件之间架桥。 如果该系统包含的某个组件所包含的组件,是可变的,那么递归地重复上述过程。 也就是说,在桥接模式中存在两个抽象,...
2018-03-12 00:34:20
807
原创 【寒江雪】Go实现单例模式
Singleton Pattern 单例模式限制了一个类型只有一个对象。实现单例定义package singletontype singleton map[string]stringvar ( once sync.Once instance singleton)func New() singleton { once.Do(fun...
2018-03-10 19:07:44
859
原创 【寒江雪】Go实现对象池模式
Object Pool Pattern 对象池模式是一种创建型模式,根据需求来预测将要使用的对象,提前创建并保存在内存中。实现对象池定义package poolimport ( "fmt" "strconv")type Object struct{}func (Object)Do(index int){ fmt.Println...
2018-03-10 16:08:20
956
游戏编程精粹5
2018-07-17
算法导论(第三版)
2018-07-17
基于mgo写的mgo小工具
2018-02-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人