openGL的第一个程序

首先,配置openGL环境,我用的是集成开发环境是codeblocks。

1、从openGL官网上面下载bin库,解压。

2、把里面的glut.h文件放在codeblocks/MinGW/include/gl目录下,把glut32.lib放在codeblocks/MinGW/lib下,将glut32.dll放在C:/window/system下。

 

顺便唠几句

codeblocks的MinGW/lib下有很多的.a和.o文件,在unix中每个源文件编译的中间文件(在连接之前)是.a文件。

我们所谓的一个库,那么一个库究竟有什么?——源代码。(头文件.h+源文件.c[pp])。如果我们下载一个库,那么需要我们自己编译,生成中间文件。

所谓的动态链接库和静态库是一个非常知道研究的知识。

我就是这样配置的,第一个测试程序能通过。

 

上测试源代码:

#include <windows.h>
#include <gl/glut.h>
#include <iostream>

using namespace std;

void init(void)
{
    glClearColor(0.0, 0.0, 0.0, 0.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
}


void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT);

    glColor3f(1.0, 1.0, 1.0);
    glBegin(GL_POLYGON);
    glVertex3f(0.25, 0.25, 0.0);
    glVertex3f(0.75, 0.25, 0.0);
    glVertex3f(0.75, 0.75, 0.0);
    glVertex3f(0.25, 0.75, 0.0);
    glEnd();

    glFlush();
}
int main(int argc, char *argv[])
{
    cout << "Hello World!" << endl;

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
    glutInitWindowSize(320, 240);
    glutInitWindowPosition(0, 0);
    glutCreateWindow("Hello GL0");

    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
}


下面对该程序做出解释:

#include <windows.h>这个头文件的作用,不清楚,因为用到glut32.dll这个动态链接库,所以哟包含这个头文件吧。猜的。

#include <GL/glut.h> 传说还有2个头文件,但是在<glut.h>这个中已经被包含了,所以不用再次包含,转到codelocks/MinGW/include/GL目录下一个,你就会发现果然还有两个头文件。显然这两个头文件是codeblocks安装是自动安装的,但是我不清楚为什么codeblocks不安装glut.h这个头文件。


然后看main函数,因为main是程序的进入点,程序从这里开始执行。

glutInit(&argc, argv);//对GLUT进行初始化,那么究竟做了什么?先留在这里!!~我也不明白!反正开始必须写的。

glutInitDisplayMode(GLUT_RGB| GLUT_SINGLE);、设置显示模式。原型为void glutInitDisplayMode(unsigned int mode);关于参数的取值和作用查看文档。列举一下常用的

GLUT_RGB 指定RGB颜色模式的窗口。

GLUT_RGBA指定RGBA颜色模式的窗口。关于什么是RGB和RGBA,一个点怎么用像素表示,大概是这个意思。

GLUT_INDEX指定颜色索引模式的窗口。不懂!

GLUT_SINGLE指定单缓存窗口。

GLUT_DOUBLE指定双缓存窗口。额,大概就是两章画布,一张用于显示,一张用于后台填充。

GLUT_DEPTH窗口使用深度缓存。不懂!

glutInitWindowSize(320, 200);指定初始窗口大小。

glutInitWindowPosition(0, 0);指定初始窗口位置。

glutCreateWindow("Hello GL");//creates a top-level window. Usage:int glutCreateWindow(char *name);

http://www.opengl.org/documentation/specs/glut/spec3/node113.html

这个网站不错,是openGL的官方API在线文档。

glutDisplayFunc(display);//这个函数,调用你的画图函数,当需要画图的时候,这个函数会重绘窗口,至于这种机制的实现,我现在还不明白,这个原理很值得研究。

唠叨几句:通常我们在自己编写的程序中经常调用系统接口(也就是系统API,比如unix下的socket,write,read等等函数),然后我们自己的程序编译后有两种情况,可能是将系统函数的源代码加到了我的程序中,编译成可执行文件;另一种情况是我的程序在执行的时候,再去调用系统函数的执行码(这可能就是动态链接)。欢迎拍砖,渴望指点。

但是,有些系统函数在执行的时候,需要调用我们的函数,这可能就是常说的回调。这个应该就是一个回调,至于回调的everything我还不知道!

glutMainLoop();//这应该就是一个监听函数,当需要重绘的时候,这个函数会让glutDisplayFunc运行。

ok!~

 

欢迎各位爱好者一起交流指点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值