[問題] opengl旋轉的問題

看板C_and_CPP作者 (星如止水)時間15年前 (2009/07/24 19:21), 編輯推噓9(907)
留言16則, 7人參與, 最新討論串1/1
已經爬文 且也google好幾天了T-T 不過好像都跟我的問題不太一樣 現在是要做一個跟這個一模一樣的東西 http://houseof3d.com/pete/applets/facet/three.html 我的做法大概是 按上下左右時 glPushMatrix if 左 glRotatef- 沿z軸轉 if 右 ..... glGetFloatv(GL_MODELVIEW_MATRIX, &x) glPopMatrix 在其它函式會用x把圖render出來 現在的問題是 因為用glRotatef時 軸會跟著轉 而因為上次轉轉的狀態要維持著 所以每次render圖時 都會要做一次上面描述的函式 所以當下次按 上下左右時 當時的z軸已經不是向左轉的功能了 而是轉過的z軸 有想過解決方法是 用現在轉過的軸來算出要對x,y,z各轉幾度 來達到向左轉的功能 可是好像很難做 這個有沒有比較好的方法 謝謝各位 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.44.133.47

07/24 19:27, , 1F
每次轉的角度++ 既然你用到pushmatrix的話
07/24 19:27, 1F
現在的問題比較是說 ex: 先對x轉 +20 再對z轉 +20 此時的z已經跟原來不一樣 雖然有用push跟pop 可是因為下次進來的時候 會先做一次對x轉 +20 此時z軸還是會變掉 因為x,z各轉20的話 先對哪一軸轉是有差的 而如果寫死的話(也就是只把角度一直累加上去) 就會變成只有一種順序(ex:先x後z) 所以我是用一個陣列記得說 從最開始到現在 每一次的動作是多少 而每次render的時候 就會把陣列裡的動作做一次(為了維持剛剛轉的狀態) 而這樣就會變成想做下一個動作時 軸還是被轉掉 不好意思描述的好像有點複雜T-T ※ 編輯: locationc 來自: 114.44.133.47 (07/24 19:44)

07/24 19:47, , 2F
這個問題明明以前自己畫pixel硬幹3D時遇到過, 可是現在
07/24 19:47, 2F

07/24 19:47, , 3F
想不起來當時到底怎麼解決的....>_<#
07/24 19:47, 3F

07/24 19:54, , 4F
目前想得到的一個方向就是, 轉動的時候要用轉object的觀
07/24 19:54, 4F

07/24 19:55, , 5F
點, 而是轉動觀察者(光源順便), 具體實作要再想一下Orz
07/24 19:55, 5F

07/24 20:02, , 6F
樓上大大說的是轉camera的方向 可是如果轉軸的沒辦法嗎?
07/24 20:02, 6F

07/24 20:08, , 7F
矩陣疊的順序倒過來就可以了
07/24 20:08, 7F

07/24 20:11, , 8F
樓上大大可以多說一點嗎 感謝
07/24 20:11, 8F

07/25 02:06, , 9F
V大是職業的程式工作者嗎 相當的威阿
07/25 02:06, 9F

07/25 02:45, , 10F
1. 你不能只存「三軸各轉幾度」,而要存一個 matrix
07/25 02:45, 10F

07/25 02:46, , 11F
2. 每次旋轉時去更新這個 transform matrix
07/25 02:46, 11F

07/25 09:05, , 12F
小弟只是打雜的, 啥都不會~_~ 樓上l大說的對, 就那樣:)
07/25 09:05, 12F

07/25 11:59, , 13F
OpenGL的矩陣運算是直接乘起來最後才乘頂點,所以效果會
07/25 11:59, 13F

07/25 12:01, , 14F
顛倒。改成抓矩陣、LoadIdentity、Rotate再乘抓下來的矩陣
07/25 12:01, 14F

07/25 17:44, , 15F
上次運算出來的矩陣會包含3個軸轉去哪個方向
07/25 17:44, 15F

07/25 17:45, , 16F
再對新的軸的方向旋轉可能就是你想要的
07/25 17:45, 16F
文章代碼(AID): #1AQPb9BF (C_and_CPP)