2017年5月30日 星期二

3D遊戲程式設計-Unity初步

這次課堂上修了3D遊戲設計以及VR game,都使用了unity3D,中間也遇到一些常見的問題,為了以後查資料方便,這裡就以筆記的方式記錄一下如何解決。

transform.rotate是使用角度做一個旋轉動作,而且是直接從最短路徑做變換

碰撞兩邊都要有collider並且至少一個collider要勾選起trigger才能進入 (不勾tirgger,會使用unity內建碰撞反應)
然後rigidbody也是其中一個至少有要rigidbody才能進入OnTriggerEnter
void OnTriggerEnter(Collider other)
    {
        Debug.Log(other.gameObject);
    }
這個function

OnCollisionEnter回傳的參數是collision -> 碰撞的點面資訊
OnTriggerEnter回傳的是collider -> 碰撞到的物件
OnTriggerStay會以frame為單位跑一次是否觸發碰撞

如果我們使用生成暫時物件使用下的語法
Instantiate(tempCristal, this.transform);
而且tempCristal是一個public gameobject其內容放入一個asset的prefab
那個下次call destroy(tempCristal)會刪除這個prefab,但是我們只是想要消除遊戲執行時生成的物件而已不是asset裡面的prefab
這時應該要用下面的語法
instantiatedObj = (GameObject)Instantiate(tempCristal, this.transform);
用instantiatedObj就是遊戲執行時生成的物件
那個destroy(instantiatedObj)就是刪除這個物件而以我們不會刪到asset裡面的prefab

要修改particle system真正的大小(粒子運動的範圍)
要修改scaling model成hierarchy

inactive的物件沒辦法被任何的find函數找到,而且底下的物件像是collider,particle system做任何設定都沒有效果

sub-emitters must be children of the system that spawns them
這個error的原因通常是我們直接使用下載好的particle system prefab
裡面的particle通常有這樣的結構
一個empty的物件裝一個大的particle system
下面還會有3個particle system的child
注意到這個時候要檢查這三個particle system的"sub emitters"這個變數
如果有超過兩個parent的particle system指向同一個child的particle system那麼就會出現sub-emitters must be children of the system that spawns them
解決方法很簡單,額外複製一個這個child的particle system然後其中一個parent的particle system指向他
那麼就不會再跳出這個error了

 Resources.Load<AudioClip>可以直接load進音樂檔案,可是注意一點檔案路徑必須在Resources裡面。然後path裡面就不用加上Resources了,可是如果有在一個資料夾就要用"/"連接,最後也是最重要的一點,檔案名不要家附檔名,才能正確地load進audio clip

2017年5月12日 星期五

openCV: SIFT library安裝

使用visual studio 2015如果想要安裝openCV有個非常好用的方式

管理NuGet套件->搜尋openCV contrib 3.1版本套件

這個套件不只有原本的opencv還有一堆額外的library 可以用 像是SIFT

#include <opencv2/xfeatures2d.hpp>
應該就可以用SIFT了

2017年1月19日 星期四

平行程式設計-CUDA與OpenGL

這次平行的project,我們選擇了一個比較適合cuda的題目,particle system的平行化。
基本上的想法就是使用shader來做render之前的數學計算,讓GPU來加速繪圖過程。
只是因為shader不夠像CUDA,雖然基本上是一樣的,所以我們這次嘗試使用較舊的API,叫做OpenGLCUDA,現在基本上已經棄用的,但是新版的openGL,以及新的nvidia顯示卡依然支援這個語法。

2017年1月5日 星期四

OpenGL-Assimp資料庫連結

之前參考了learnOpenGL網站的範例,到了匯入model的階段的時候
教學建議使用Assimp來匯入model,這是Assimp官網對這個lib的解釋
Open Asset Import Library (short name: Assimp) is a portable Open Source library to import various well-known 3D model formats in a uniform manner.

用這個lib可以簡單地把obj檔轉換成uniform格式來使用,對於openGLSL是非常友善的。
只是當下使用的時候,我是直接下載assimp 3.1.1 binary版本,亦如往常地把32bit 的lib,include等檔案在VS的property設定完之後,出現了問題,所以在這裡紀錄一下如何解決。