看板 C_and_CPP 關於我們 聯絡資訊
我現在寫一個簡單的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
visor:你的 object 可以做到把最後 rotate 的值存起來吧 ?? 06/14 18:25
VictorTom:個人覺得讓使用者自己loadIdentity比較簡單, 需要load時 06/14 18:43
VictorTom:user就自己call需要做的事; 至於需不需要每個frame都要 06/14 18:44
VictorTom:loadIdentity則是by design....@_@" 06/14 18:44
QQ29:所以我應該使用他下啥我就一直*= 06/14 19:10
QQ29:要不要identity 就交由使用者自己決定嗎 06/14 19:11
QQ29:我只要包好 Rotate三軸和Translate這兩個函式即可 06/14 19:11
Bencrie:OpenGL不就這麼做嗎 XD? 06/14 20:15
QQ29:如果我希望使用者還是可以下 x++這樣 我該怎麼設計呢 06/14 20:38
QQ29:我怎麼想都變成使用者只能傳(1)...傳x++會越轉越快邏輯不對~ 06/14 20:39