※ 引述《purple0619 (紫獄)》之銘言:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: BCB6
: 問題(Question):
: 初學BCB6,要用到OpneGL,上網找影片學習。
: 影片裡面有用到,OpenGL的按鈕,請問要安裝什麼嗎?
:
: 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 其實就可以達到目的!
(我現在正在做跟你差不多的工作,詳細程式碼就不貼出來了)