[問題] OpenGL 矩陣問題

看板C_and_CPP (C/C++)作者 (我愛阿蓉)時間16年前 (2010/06/14 18:16), 編輯推噓2(208)
留言10則, 4人參與, 最新討論串1/1
我現在寫一個簡單的Redner Lib想給使用者用 他必須在Draw函式和Update函式手動寫上RenderManager.Draw和RenderManager.Update 我希望每個frame都loadidenity清除所有rotate 和 translate矩陣 但使用者會這樣下旋轉指令 Obj.RotateX(x); x++; 最後會呼叫RenderManager.Draw(); 但Draw裡面會去loadidentity 問題就 把使用者下的給清掉了 為了克服這問題 現在是 先用一個一開始是identity矩陣:UserMat *使用者下的指令 最後World矩陣*UserMat後 UserMat在Draw函式最後把他清成identity. 使用者他就可以傳x然後x++這樣....每個frame都看似正常 但突然使用者不想要這物體動了 他就"不"呼叫Obj.Rotate(x); 尷尬了 我上一個frame把她清成identity 導致物體轉回原本沒轉的狀態(希望是停住) 想不到該怎麼克服這點 除非"規定"使用者 要停 不是不呼叫Rotate 而是照樣呼叫 但x不用++ 或是整個架構改成 我不要清成identity了 使用者下什麼指令 我就直接*= 我的World矩陣 但這樣又會變成 使用者必須被迫 要變成Obj.Rotate(1); 感覺也很怪 畢竟之前寫OPENGL都是每個frame都先把ModelView清成identity.... 雖然不知兩者有什麼利弊 但想請教各位我該怎麼解這問題 如果是一般遊戲引擎 是怎麼做的??他提供給使用者也是可以傳x++而不想動 就不用呼叫 了嗎?? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.87.64.222

06/14 18:25, , 1F
你的 object 可以做到把最後 rotate 的值存起來吧 ??
06/14 18:25, 1F

06/14 18:43, , 2F
個人覺得讓使用者自己loadIdentity比較簡單, 需要load時
06/14 18:43, 2F

06/14 18:44, , 3F
user就自己call需要做的事; 至於需不需要每個frame都要
06/14 18:44, 3F

06/14 18:44, , 4F
loadIdentity則是by design....@_@"
06/14 18:44, 4F

06/14 19:10, , 5F
所以我應該使用他下啥我就一直*=
06/14 19:10, 5F

06/14 19:11, , 6F
要不要identity 就交由使用者自己決定嗎
06/14 19:11, 6F

06/14 19:11, , 7F
我只要包好 Rotate三軸和Translate這兩個函式即可
06/14 19:11, 7F

06/14 20:15, , 8F
OpenGL不就這麼做嗎 XD?
06/14 20:15, 8F

06/14 20:38, , 9F
如果我希望使用者還是可以下 x++這樣 我該怎麼設計呢
06/14 20:38, 9F

06/14 20:39, , 10F
我怎麼想都變成使用者只能傳(1)...傳x++會越轉越快邏輯不對~
06/14 20:39, 10F
文章代碼(AID): #1C5W5ibe (C_and_CPP)
文章代碼(AID): #1C5W5ibe (C_and_CPP)