openGL的第一个程序
2013-08-22 18:33
597 查看
首先,配置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>这个头文件的作用,不清楚,因为用到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!~
欢迎各位爱好者一起交流指点
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!~
欢迎各位爱好者一起交流指点
相关文章推荐
- 学习OpenGL超级宝典(OpenGL superbible)的第一个程序
- [OpenGL学习] mac上运行第一个openGL程序
- VC6+XP下第一个OpenGL程序
- OpenGL(试用篇)——第一个OpenGL程序(2)
- 现代OpenGL(一):我的第一个OpenGL程序
- 详解第一个OpenGL程序
- Android OpenGl ES2.0编程_第一个OpenGL小程序
- 3D球体一个(纪念第一个opengl程序~~)
- Opengl第一个练手小程序
- OpenGL的环境配置和第一个程序
- 第一个OpenGL程序
- 在vs2005下的第一个OpenGL程序
- 第一个OpenGL程序
- OpenGL 第一个小程序
- 第一个OpenGL程序
- OpenGL1 第一个程序(来自网上)
- 在vs2005下的第一个OpenGL程序。
- 第一个OpenGL程序--基于VS2005和GLUT
- OpenGL学习(二)第一个程序
- 计算机图形学基础(第二版)陆枫 何云峰(2)我的第一个OpenGL程序