Re: [問題] OpenGL 選特定物件配合按鍵移動問題

看板C_and_CPP作者 (我是青蛙,不是王子^_^)時間14年前 (2010/05/13 21:32), 編輯推噓6(6017)
留言23則, 5人參與, 最新討論串3/3 (看更多)
※ 引述《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

05/13 22:41, , 1F
不好意思,我打關鍵字找不太到範例,請問是openGL範疇嗎?
05/13 22:41, 1F

05/13 22:51, , 2F
這其實是用C++ object封裝的概念去操作OpenGL API, 所以
05/13 22:51, 2F

05/13 22:52, , 3F
這裡你看到的沒有一個是OpenGL的東西; 但是這是幫你抽象
05/13 22:52, 3F

05/13 22:52, , 4F
化程式, 方便你以OO的方式去控制scene裡的各別obj的變化
05/13 22:52, 4F

05/13 22:53, , 5F
與draw; Vec3或Matrix4x4這種東西也只是一些data的封裝,
05/13 22:53, 5F

05/13 22:53, , 6F
vec3概念上就是float x, y, z; 這樣子的東西:)
05/13 22:53, 6F

05/13 22:58, , 7F
青蛙大這個應該還要搭配camera class 紀錄lookat吧
05/13 22:58, 7F

05/14 02:39, , 8F
僅供參考囉。當場景越寫越大時,這種概念應該會有幫助XD
05/14 02:39, 8F

05/14 02:40, , 9F
Translate跟Rotate函式的實作,也能幫助釐清Transformation
05/14 02:40, 9F

05/14 02:41, , 10F
的概念,我自己是這樣練習的:p
05/14 02:41, 10F

05/14 08:58, , 11F
請問一下c大是用哪本書練習呢? 我是用openGL超級手冊
05/14 08:58, 11F

05/14 10:10, , 12F
OpenGL常用的RedBook與SuperBible, 或者一般的入門書,
05/14 10:10, 12F

05/14 10:11, , 13F
應該很少會直接給你像青蛙大這樣完整概念sample, 到應用
05/14 10:11, 13F

05/14 10:12, , 14F
級(比如直接教你寫遊戲之類的??)可能比較會有吧@_@"
05/14 10:12, 14F

05/14 10:13, , 15F
Nehe的入門lesson, 或者GLUT的sample有看過的也不記得有
05/14 10:13, 15F

05/14 10:18, , 16F
要像青蛙大這樣寫, 就看您自己習不習慣OO style囉, 確實
05/14 10:18, 16F

05/14 10:19, , 17F
青蛙大的方法處理Scene Obj是比較有系統的:)
05/14 10:19, 17F

05/14 10:42, , 18F
我是覺得先把Transformation後面的線性代數弄懂比較好 XD
05/14 10:42, 18F

05/14 10:49, , 19F
有心把數學算一算, 會比較知道transform後的結果是怎麼
05/14 10:49, 19F

05/14 10:50, , 20F
來的, 不然至少要知道該有的流程, 與transform的順序影
05/14 10:50, 20F

05/14 10:50, , 21F
響, 比如先translate在rotate, 與先rotate在translate就
05/14 10:50, 21F

05/14 10:50, , 22F
不會是一樣的; Vertex座標, 如何經過ModelView/Project
05/14 10:50, 22F

05/14 10:51, , 23F
等matrix轉換, 到最後ViewPort算screen/window位置的:)
05/14 10:51, 23F
文章代碼(AID): #1Bw_zZ5x (C_and_CPP)
文章代碼(AID): #1Bw_zZ5x (C_and_CPP)