看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《capucino (是人心在動...)》之銘言: : : 查了一下用按鍵控制似乎是對整個openGL所畫的物體做反應 : : 比方說按方向鍵→ , : : 若程式設定為向右移,假設裡面有一個茶壺 和一個方塊 : : 則茶壺和方塊皆往右移 : : 但如果想要只讓某特定物件作移動或旋轉, : : 該怎麼辦呢? : : 是用 glMatrixMode(GL_MODELVIEW); : : glLoadIdentitt(); : : 指定當前的model : : 但是按鑑按下去怎麼知道是我只讓"此model" 作反應呢? : : ps.我是用BCB寫的 感謝 也可以這樣做 class SceneObject { ... public: void Render(void); void Rotate(double angle, const Vector3& axis); void Translate(const Vector3& vec); private: Matrix4x4 m_WorldMatrix; }; 類似這樣,每個物體自己記自己的位置 這樣畫的時候只要 glLoadIdentity 跟 glMultiMatrix 就好了 也很容易配合 glSelectBuffer 來運算 至於 Vector3 跟 Matrix4x4 這種東西,我覺得如果常寫圖學的程式的話,這種基礎的 數學函式庫都是必備的,網路上很多,隨便拿一個來用就好 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.168.24.177
capucino:不好意思,我打關鍵字找不太到範例,請問是openGL範疇嗎? 05/13 22:41
VictorTom:這其實是用C++ object封裝的概念去操作OpenGL API, 所以 05/13 22:51
VictorTom:這裡你看到的沒有一個是OpenGL的東西; 但是這是幫你抽象 05/13 22:52
VictorTom:化程式, 方便你以OO的方式去控制scene裡的各別obj的變化 05/13 22:52
VictorTom:與draw; Vec3或Matrix4x4這種東西也只是一些data的封裝, 05/13 22:53
VictorTom:vec3概念上就是float x, y, z; 這樣子的東西:) 05/13 22:53
QQ29:青蛙大這個應該還要搭配camera class 紀錄lookat吧 05/13 22:58
chiwa:僅供參考囉。當場景越寫越大時,這種概念應該會有幫助XD 05/14 02:39
chiwa:Translate跟Rotate函式的實作,也能幫助釐清Transformation 05/14 02:40
chiwa:的概念,我自己是這樣練習的:p 05/14 02:41
capucino:請問一下c大是用哪本書練習呢? 我是用openGL超級手冊 05/14 08:58
VictorTom:OpenGL常用的RedBook與SuperBible, 或者一般的入門書, 05/14 10:10
VictorTom:應該很少會直接給你像青蛙大這樣完整概念sample, 到應用 05/14 10:11
VictorTom:級(比如直接教你寫遊戲之類的??)可能比較會有吧@_@" 05/14 10:12
VictorTom:Nehe的入門lesson, 或者GLUT的sample有看過的也不記得有 05/14 10:13
VictorTom:要像青蛙大這樣寫, 就看您自己習不習慣OO style囉, 確實 05/14 10:18
VictorTom:青蛙大的方法處理Scene Obj是比較有系統的:) 05/14 10:19
Bencrie:我是覺得先把Transformation後面的線性代數弄懂比較好 XD 05/14 10:42
VictorTom:有心把數學算一算, 會比較知道transform後的結果是怎麼 05/14 10:49
VictorTom:來的, 不然至少要知道該有的流程, 與transform的順序影 05/14 10:50
VictorTom:響, 比如先translate在rotate, 與先rotate在translate就 05/14 10:50
VictorTom:不會是一樣的; Vertex座標, 如何經過ModelView/Project 05/14 10:50
VictorTom:等matrix轉換, 到最後ViewPort算screen/window位置的:) 05/14 10:51