用dev-c++写自己的第一个opengl程序

时间:2022-12-21 04:54:21

最近因为需要自己开始学习opengl,但是因为我用的是win7的操作系统,又不想为了学习这么一个东西还要费劲的去下载安装vs2008,所以选择了dev-c++作为自己的开发工具。

但是由于对dev-c++不熟悉,在开始阶段走了写弯路,虽然解决了基本的问题,但是还有些问题自己没有解决,希望能得到牛人的指点。

 

在这里记录一下自己用dev-c++开发自己第一个opengl程序的过程,一方面对自己是一个记录和鞭策,另一方面也是给将来要学习的人一些方便,同时也提出自己遇到但是还没有解决的问题,希望得到大家的指点。

 

dev-c++实际上已经包含了开发opengl程序基本的功能可以简单的选择:新建-multimedia-opengl,建立一个opengl程序。

这个程序包含了基本的opengl程序的结构,包括生成窗口,消息驱动机制,还有基本的opengl程序。直接点击运行可以看到一个不断旋转的彩色三角形。

用dev-c++写自己的第一个opengl程序

 

虽然直接在生成的程序上进行修改很方便,但是我希望用glut生成窗口和绘制(因为我看得教材是这样的,呵呵。),也更希望能用更贴近教程的方法进行编程,所以决定自己动手编写程序。

程序的代码很简单,最终绘制一个白色的矩形:

#include<windows.h>
//#include<GL/gl.h>//glut.h中已经包含
//#include<GL/glu.h>
#include<GL/glut.h>

//绘制程序
void display()
{
     glClear(GL_COLOR_BUFFER_BIT);//将屏幕设置为黑色
     glColor3f(10.,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();//发送缓冲区
}

//初始化绘制
void init()
{
     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);设置投影空间
}

int main(int argc, char** argv)
{
    glutInit(&argc, argv);//初始化glut
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);//设置显示模式为单缓冲,RGB模式
    glutInitWindowSize(250,250);//设置窗口大小
    glutInitWindowPosition(100,100);//设置窗口位置
    glutCreateWindow("Hello");//设置窗口标题
    init();
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
   
}

但是dev-c++本身是不包含glut.h的,所以要下载glut库,并将glut.h拷贝到include/gl/下。
接下来我知道要包含glut32.lib,opengl32.lib,glu32.lib库,这时问题也就来了。

起初我以为可以像使用vc一样将这三个文件拷贝到lib文件夹下,然后在工程选项里将这三个库加进来就可以了,

 用dev-c++写自己的第一个opengl程序

可是这时编译时一直出现错误:[Linker error] undefined reference to `glClear@4'。。。

后来参考了用dev-c++直接生成的程序的设置将其改为-lopengl32,-lGlU32,-lglut32

 用dev-c++写自己的第一个opengl程序

这时程序才可以正常运行,打开lib目录看看原来程序在链接是实际上链接的是原来就有的libglut32.a,libglu32.a,libopengl32.a,也就是说根本不需要将glut32.lib,opengl32.lib,glu32.lib拷贝到lib下就可以运行了,结果如图所示。

用dev-c++写自己的第一个opengl程序

 

至于为什么原来的方法不行,我在网上搜了一下据说是因为lib文件并不是通用,所以dev-c++没有办法加载,但是可以直接加载dll文件解决这个问题。不过dev-c++已经提供了很多的.a库文件,相信对一般的应用已经足够了。

 

这是我用dev-c++编写的第一个opengl程序,虽然并不完善但是应该对和我一样第一次使用dev-c++编写opengl程序或者刚刚开始使用dev-c++的人来说应该还是有所帮助。