Re: [程式] openGL關於旋轉座標

看板GameDesign (遊戲設計)作者 (zxwxz)時間18年前 (2006/12/15 00:58), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《Yehsb (史摩布萊克)》之銘言: : 首先感謝你進來觀看 : 我是OPENGL的新手 : 最近卡住一個問題 : 我畫的是一個桿件 : 現在想讓這個趕件 : 以點o為旋轉中心 : ________________________ : | .o .c .b| : |________________________| : 但是我以下方的方法寫 : 它是以點c來旋轉 : 那我應該要增加什麼嗎?? : glPushMatrix(); : RotateCurrentAxis(); : glTranslatef(25.0f, 25.0f, 68.0f); : static float s_rot1 = 0.0f; : static float s_rotdelta = 2.0f; : s_rot1 += s_rotdelta; : glRotatef(s_rot1, 1.0f, 0.0f, 0.0f); : glCallList(nPART_2); : glPopMatrix(); : ==============================以上為第一個問題==================== : 第二問 : 我現在想要o點延一個圓的圓周移動 : 並且 : r點延著一個水平方向移動 : 那我又應該要怎麼寫呢? : 感謝你的解答 第一個問題 應該是你對於3D繪圖整體架構要搞清楚 首先要先確定你動的是一個(物件) 要動(物件)的時候 一定有一個中心點(繪圖中心點) 這就會是你對於這一個(物件)MATRIX的定位了 所以你繪圖的想法就有誤差了 首先你應該是想畫一個長條(你這邊是用CALL圖形) 但是這個長條根整個繪圖座標的相對應應該是 O是在繪圖的中心點才對(但是你CALL的圖形繪圖中心點卻不一樣) Rotate的用法是轉基底作標喔 不是針對某一個圖形轉喔 如果不是的話 則必須要先把整個物件 移動到其相對應位置(移動) 才開始旋轉 也就是說Rotate必須要在Translate之前做 很弔詭是吧! 但是你要知道 以上這些動作都是屬於座標轉移 3D繪圖在這邊是用經過轉換後的座標繪圖的 所以 所有的程式步驟都會變成是要倒著來的 以下是數學解釋 Rotate(Translate(x))=y 你在畫圖的步驟其實是X 而實際展現卻是在Y 所以X要先經過Translate移動圖形才輪到Rotate轉圖形 但是程式卻不是這樣寫的 因為繪圖軟體只會根據既定的座標繪圖 因此轉成數學式只能定位目前存在的座標空間 比較深入一點的可能要去查線性代數 而為了在繪圖上有所謂的物件的概念 利用了許多線性系統的概念 創造出了對單一物件的線性體系 這樣繪圖的物件之間自然會產生其從屬關係 所以才會有GLPUSH跟GLPOP用來暫存矩陣的必要性 而第二個問題 就是所謂的物件從屬的問題了 你可以利用以上這些規則想想看 其中的從屬關係 而怎樣達成這樣的效果 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.171.48.4 ※ 編輯: zxwxz 來自: 218.171.48.4 (12/15 01:33)

12/15 10:50, , 1F
上了一課~感謝!!
12/15 10:50, 1F
文章代碼(AID): #15WOAbx9 (GameDesign)
文章代碼(AID): #15WOAbx9 (GameDesign)