Re: [程式] openGL關於旋轉座標
※ 引述《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
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
GameDesign 近期熱門文章
PTT遊戲區 即時熱門文章