搜尋此網誌
2017年12月3日 星期日
C# Unity 計算兩向量之夾角 (扇形範圍偵測)
/// <summary>
/// 計算兩向量夾腳 0 ~ 360
/// </summary>
/// <param name="A"></param>
/// <param name="B"></param>
/// <returns></returns>
private float Angle_360(Vector3 A, Vector3 B)
{
A.Normalize();
B.Normalize();
// -1 ~ 1
float angle = Vector3.Dot(A, B);
float theta = Mathf.Acos(Vector3.Dot(A, B));
return theta * 360 / Mathf.PI;
}
如果要做個扇形 偵測敵人
需要兩個東西
1. 角度
2. 多遠
所以求得 藍線 紅線 向量之後 就可以用上面的method求出角度了
2017年9月27日 星期三
2017年9月14日 星期四
UnityShader初體驗 - 12-5 Shader筆記 ( Bloom效果 )
12-5 Shader筆記
Bloom效果
1. 找出較亮的區域
2. 使用高斯模糊 (模擬光暈)
3. 跟原本影像做合成
總共使用4個Pass
1. 找出亮區域
2 和 3 做高斯模糊
4 合成
2017年7月28日 星期五
C# - 從 Linq 學習 [ 如何使用 Delegate , Func , Lambda ) ]
這篇不是在說 怎麼使用 Linq
而是再說嘗試 寫出Linq
http://tim12332013.blogspot.tw/2017/06/c-linq-interface-generic.html
繼上一篇 Linq ToList() 學習 Interface 跟 Generic之後
這篇來說說 Where()
------------------------------------------
這篇主要重點在有三個
1. Delegate - 委派
2. Func - 有回傳值得委派
3. Lambda - 匿名函示 ( 簡化版 )
在知道上述三樣東西之後才會看懂下面在說啥
-------------------------------------------
先貼程式 :

結果: 找出 1~10 中 能被 2 整除的數 (答 2 4 6 8 10)

結論:
利用Foreach IEnumerable<T> 找出所有Item
再拿別人傳進來的 Func 來執行
最後回傳答案
而是再說嘗試 寫出Linq
------------------------------------------
http://tim12332013.blogspot.tw/2017/06/c-linq-interface-generic.html
繼上一篇 Linq ToList() 學習 Interface 跟 Generic之後
這篇來說說 Where()
------------------------------------------
這篇主要重點在有三個
1. Delegate - 委派
2. Func - 有回傳值得委派
3. Lambda - 匿名函示 ( 簡化版 )
在知道上述三樣東西之後才會看懂下面在說啥
-------------------------------------------
先貼程式 :
結果: 找出 1~10 中 能被 2 整除的數 (答 2 4 6 8 10)
結論:
利用Foreach IEnumerable<T> 找出所有Item
再拿別人傳進來的 Func 來執行
最後回傳答案
2017年7月7日 星期五
UnityShader初體驗 - 數學基礎 - 笛卡爾座標
最近看了本 "只有unity shader才能超越unity" 紀錄一下心得 0.0
笛卡爾坐標系 - 描述一個東西位置 的方法
Wiki:https://zh.wikipedia.org/wiki/%E7%AC%9B%E5%8D%A1%E5%84%BF%E5%9D%90%E6%A0%87%E7%B3%BB二維坐標系 (平面空間)
三維坐標系 (3D空間)
三維 通常分成 左手座標 , 右手座標

為什麼要分 左右手的原因就是
在做旋轉的時候 在不同座標下 看起來不一樣
舉例來說
在空間中 用一個點 已一條直線為旋轉軸
旋轉30°
那會發現有兩種旋轉方向可以選擇
這時候就可以用左右手法則
依據屬於哪個坐標系
判斷要往哪一邊旋轉大拇指朝上 , 4隻手指的方向 就是答案

書上練習題 :
Q: (0,0,1) 座標的點 繞著Y軸 正方向旋轉 ,在左 , 右 手座標系中 , 分別會變成什麼位置?
A: 左: (1,0,0) 右 (1,0,0)
有錯請指證@@
2017年6月26日 星期一
C# - 從 Linq 學習 [ 如何使用 Interface(介面) 和 Generic(泛型) ]
這篇不是在說 怎麼使用 Linq
而是再說嘗試 寫出Linq
試圖去解析 Linq的寫法
希望帶來一些啟發
可以用在專案上
如果只是想知道如何使用
可以左轉參考這邊
https://kw0006667.wordpress.com/2013/05/29/clinq%E7%B0%A1%E5%96%AE%E4%BD%BF%E7%94%A8-from-where-select/
我覺得這篇寫得還不錯
----------------------------------------------------
這篇用 Linq 的 ToList() 當作範例 :
總歸來說 他使用了三樣東西
1. 擴充函式
2. Interface
3. Generic
在已經知道上述 3 樣東西的是什麼前提下
才會了解下面在說啥
-----------------------------------------------------
切入正題 :
Queue<T> , Statck<T> , T[]
都能夠直接使用Linq語法 ToList()
直接轉換成 List<T> 的形式
為什麼?
因為我們都知道一個規則
兒子Class 可以使用 爸爸Class 的 函式
Queue<T> : IEnumerable<T>
Stack<T> : IEnumerable<T>
T[] : IEnumerable<T>
所以基於 ( 因為爸爸有 所以我也有的概念 )
我們直接擴充爸爸就好啦 ~
範例程式碼 :

結果:

-------------------------------------------------------------------
結論 :
最終成功山寨了 Linq ToList() 這個Function
至於其他Linq的 Function 也是基於差不多的想法
只是有用到 delegate 等等其他技巧
可能可以再寫一篇 0.0
而是再說嘗試 寫出Linq
試圖去解析 Linq的寫法
希望帶來一些啟發
可以用在專案上
如果只是想知道如何使用
可以左轉參考這邊
https://kw0006667.wordpress.com/2013/05/29/clinq%E7%B0%A1%E5%96%AE%E4%BD%BF%E7%94%A8-from-where-select/
我覺得這篇寫得還不錯
----------------------------------------------------
這篇用 Linq 的 ToList() 當作範例 :
總歸來說 他使用了三樣東西
1. 擴充函式
2. Interface
3. Generic
在已經知道上述 3 樣東西的是什麼前提下
才會了解下面在說啥
-----------------------------------------------------
切入正題 :
Queue<T> , Statck<T> , T[]
都能夠直接使用Linq語法 ToList()
直接轉換成 List<T> 的形式
為什麼?
因為我們都知道一個規則
兒子Class 可以使用 爸爸Class 的 函式
Queue<T> : IEnumerable<T>
Stack<T> : IEnumerable<T>
T[] : IEnumerable<T>
所以基於 ( 因為爸爸有 所以我也有的概念 )
我們直接擴充爸爸就好啦 ~
範例程式碼 :
結果:
結論 :
最終成功山寨了 Linq ToList() 這個Function
至於其他Linq的 Function 也是基於差不多的想法
只是有用到 delegate 等等其他技巧
可能可以再寫一篇 0.0
2017年5月2日 星期二
UnityShader初體驗 - 法向量 , 跟RGB的關係的理解
x,y,z 坐標系 由圖可以知道 Unity 裡
右邊->X
上面->Y
深度->Z

那我們也知道顏色 RGB 使用類似的方式儲存資訊
(r,g,b)
那如果我們把 一顆球的顏色 用 法向量取代會發生什麼事情呢?
因為
(x,y,z) <-> (r,g,b)
已這樣的對應關係
大膽猜出 一顆圓的頂端 會是綠色
因為
頂端的法向量值 -> (x,y,z) => (0,1,0) => (r,g,b) 綠色
右方的法向量值 -> (x,y,z) => (1,0,0) => (r,g,b) 紅色
前方的法向量值 -> (x,y,z) =>(0,0,1) => (r,g,b) 藍色
那我實際看看結果圖
那證明這樣的推論是對的 上方是綠色 , 右方是紅色
換個角度再看一次
這次換到對面看 那這樣可以看到 正面藍色 上方綠色 左方紅色
也符合邏輯
那就看一下程式碼
這裡的實作就是把每個顏色
使用
法向量的值取代
o.color = v.normal
訂閱:
文章 (Atom)