作者noodleT (面T)
看板C_and_CPP
标题Re: [问题] BCB6安装OpenGL
时间Fri Jan 8 22:09:02 2016
※ 引述《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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1452262146.A.95D.html
1F:→ chengcti: 用 bcb 就是为了方便 这样用那就改用vc就好了 01/08 22:12
当使用了元件而导致卡在 BCB6 上,
甚至也无法更新成 XE 版的编译器,其实也不好吧?
如果只是单纯绘图,会推荐这样的作法。
如果是想要使用物理引擎来模拟,那就另当别论了!
※ 编辑: noodleT (36.237.121.32), 01/08/2016 22:19:27
2F:推 purple0619: 谢谢大大详细解说 01/10 14:29
3F:推 sodas500i: 推 01/13 01:22