作者locationc (星如止水)
看板C_and_CPP
標題[問題] opengl旋轉的問題
時間Fri Jul 24 19:21:42 2009
已經爬文 且也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
1F:推 QQ29:每次轉的角度++ 既然你用到pushmatrix的話 07/24 19:27
現在的問題比較是說
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)
2F:推 VictorTom:這個問題明明以前自己畫pixel硬幹3D時遇到過, 可是現在 07/24 19:47
3F:→ VictorTom:想不起來當時到底怎麼解決的....>_<# 07/24 19:47
4F:推 VictorTom:目前想得到的一個方向就是, 轉動的時候要用轉object的觀 07/24 19:54
5F:→ VictorTom:點, 而是轉動觀察者(光源順便), 具體實作要再想一下Orz 07/24 19:55
6F:→ locationc:樓上大大說的是轉camera的方向 可是如果轉軸的沒辦法嗎? 07/24 20:02
7F:推 Bencrie:矩陣疊的順序倒過來就可以了 07/24 20:08
8F:→ locationc:樓上大大可以多說一點嗎 感謝 07/24 20:11
9F:推 grayyoung:V大是職業的程式工作者嗎 相當的威阿 07/25 02:06
10F:推 littleshan:1. 你不能只存「三軸各轉幾度」,而要存一個 matrix 07/25 02:45
11F:→ littleshan:2. 每次旋轉時去更新這個 transform matrix 07/25 02:46
12F:推 VictorTom:小弟只是打雜的, 啥都不會~_~ 樓上l大說的對, 就那樣:) 07/25 09:05
13F:推 Bencrie:OpenGL的矩陣運算是直接乘起來最後才乘頂點,所以效果會 07/25 11:59
14F:→ Bencrie:顛倒。改成抓矩陣、LoadIdentity、Rotate再乘抓下來的矩陣 07/25 12:01
15F:推 jhs1213:上次運算出來的矩陣會包含3個軸轉去哪個方向 07/25 17:44
16F:→ jhs1213:再對新的軸的方向旋轉可能就是你想要的 07/25 17:45