看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《purple0619 (紫獄)》之銘言: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : BCB6 : 問題(Question): : 初學BCB6,要用到OpneGL,上網找影片學習。 : 影片裡面有用到,OpenGL的按鈕,請問要安裝什麼嗎? : http://i.imgur.com/DUfHNqH.jpg
: PS.有上網找資料,好像是要在Install component安裝才會有選項 : 有試著安裝GLScene,但是沒有出現OpenGL的圖示。 : 補充說明(Supplement): : 需要用BCB6,編寫工具機與機械手臂的模擬, : 請問有什麼推薦的書籍或資料可以參考嗎? : 謝謝各位! 一開始我也跟你一樣,找了很多「元件」來安裝, 但是裝了後程式的移植性勢必受到影響, 未來想換其他編譯器就比較難! 在 BCB 的 include/GL 資料夾中,已經有 gl.h 等函式庫可以使用。 我們需要做的是使用這個函式庫,最好再把她打包成物件。 大約長這樣: #include <windows.h> #include <GL\gl.h> #include <GL\glu.h> class yourGL { public: yourColor backgroundColor; private: HWND hwnd; HGLRC glrc; HDC dc; public: yourGL(); ~yourGL(); bool Begin(int windowWidth, int windowHeight)const; void End()const; void Initialize(HWND hwnd_); } 你也可以試著把常用的光照、繪製地板(DrawGround)、滑鼠事件(控制視角)等等功能加入。 1. 在使用上先呼叫 Initial(HWND hwnd_) 初始化,並指定繪圖區域: yourGL.Initial(this->Handle); //把整個視窗當作畫布 yourGL.Initial(Panel1->Handle); //繪製在Panel1上 初始化只需一次,你可以參考 http://www.nullterminator.net/opengl32.html void EnableOpenGL(HWND hWnd, HDC * hDC, HGLRC * hRC); 2. 接著我希望利用 Timer 事件在「Panel1」上畫圖: void __fastcall TForm1::Timer1Timer(TObject *Sender) { //畫直線 yourGL.Begin(Panel1->Width,Panel1->Height); glBegin(GL_LINES); glVertex3f(0,0,0); glVertex3f(1,0,0); glEnd(); yourGL.End(); } 其中 yourGL.End(); 就是呼叫 SwapBuffers(dc) 而已: void yourGL::End()const { SwapBuffers(dc); } 至於 yourGL.Begin(int,int) 則是寫一些畫面清除、視角設定等指令。 你可以參考: http://www.gamelife.idv.tw/viewtopic.php?t=606 void Display(void) 總之,你想使用元件應該是不知道怎樣將圖形繪製在指定區域上吧? 只要利用 HWND 其實就可以達到目的! (我現在正在做跟你差不多的工作,詳細程式碼就不貼出來了) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.237.121.32 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1452262146.A.95D.html
chengcti: 用 bcb 就是為了方便 這樣用那就改用vc就好了 01/08 22:12
當使用了元件而導致卡在 BCB6 上, 甚至也無法更新成 XE 版的編譯器,其實也不好吧? 如果只是單純繪圖,會推薦這樣的作法。 如果是想要使用物理引擎來模擬,那就另當別論了! ※ 編輯: noodleT (36.237.121.32), 01/08/2016 22:19:27
purple0619: 謝謝大大詳細解說 01/10 14:29
sodas500i: 推 01/13 01:22