※ 引述《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 其实就可以达到目的!
(我现在正在做跟你差不多的工作,详细程式码就不贴出来了)