unity3D EasyAR 識別模型抖動解決方案
阿新 • • 發佈:2019-01-30
EasyAR引擎不知道什麼原因導致識別成功後,模型出現高頻率抖動,問官方無解後,嘗試按論壇裡的朋友的方式試驗
即,在模型抖動的幅度在一定範圍內的時候,不允許該模型抖動,但是這樣會導致平移相機時,模型的移動有卡頓。
如果大家有更好的改進方案,煩請告知一下本人,感謝!
首先需要在 Augmenter 設定世界中心為 Augmenter
然後在ImageTarge 的 EasyImageTargetBehaviour類重寫Update方法
具體程式碼如下
protected override void Update() { base.Update(); float myrx = 0; myrx = this.transform.localEulerAngles.x; while (myrx >= 360)//為了讓判斷條件時方便,強制把所有不在1~270以內的數字,轉換為-270~270 { myrx -= 360; } while (myrx <= -360) { myrx += 360; } while (myrx > 270 && 360 - myrx >= 0) myrx = -(360 - myrx); float myry = 0; myry = this.transform.localEulerAngles.y; while (myry >= 360) { myry -= 360; } while (myry <= -360) { myry += 360; } while (myry > 270 && 360 - myry >= 0) myry = -(360 - myry); float myrz = 0; myrz = this.transform.localEulerAngles.z; while (myrz >= 360) { myrz -= 360; } while (myrz <= -360) { myrz += 360; } while (myrz > 270 && 360 - myrz >= 0) myrz = -(360 - myrz); //關鍵,當模型抖動超過一定範圍時,不修正模型的座標角度,記錄座標和角度 if (((Math.Abs(this.transform.position.x - lastX) > 0.06 || Math.Abs(this.transform.position.y - lastY) > 0.06 || Math.Abs(this.transform.position.z - lastZ) > 0.06)&& (Math.Abs(this.transform.position.x - lastX) > 0.13 || Math.Abs(this.transform.position.y - lastY) > 0.13 || Math.Abs(this.transform.position.z - lastZ) > 0.13))|| ( (Math.Abs(myrx - lastRX) > 3 &&Math.Abs(myry - lastRY) >3 &&Math.Abs(myrz - lastRZ) > 3)&& (Math.Abs(myrx - lastRX) > 6 || Math.Abs(myry - lastRY) > 6 || Math.Abs(myrz - lastRZ) > 6)) { lastX = this.transform.position.x; lastY = this.transform.position.y; lastZ = this.transform.position.z; lastRX = myrx; lastRY = myry; lastRZ = myrz; this.transform.rotation = Quaternion.Euler(lastRX, lastRY, lastRZ); this.transform.position = new Vector3(lastX, lastY, lastZ); } else//模型抖動範圍過小時,修正模型座標為上一次正確的座標 { this.transform.rotation = Quaternion.Euler(lastRX, lastRY, lastRZ); this.transform.position = new Vector3(lastX, lastY, lastZ); } }