您的位置:首页 > 编程语言 > Java开发

Eclipse下配置openGL开发环境

2014-03-21 10:57 399 查看
本文转载自http://blog.csdn.net/sdlgxxy/article/details/6225267

  一直想学习OpenGL,苦于配置开发环境,由于一直使用Eclipse,实在看不上VC++6.0,呵呵,所以下功夫配置一下OpenGl在Eclipse下的开发环境,一上午的时间终于把这个问题解决了,网上也没有详尽的文章,这里记录一下。出的问题实在太多,好几次都想放弃了,辛亏没有,呵呵。下面给出我的实现步骤:

1、下载安装Eclipse的C/C++版本(我软件库里有,直接解压就能用了)。下载地址为:http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/helios/SR2/eclipse-cpp-helios-SR2-win32.zip

2、下载openGL的相关文件,我已经将其分类打包上传到了资源区,下载地址为http://download.csdn.net/source/3063599 (这个是原博主的不需要积分)
http://download.csdn.net/detail/caihongshijie6/7075917(这个是我自己上传的,是需要下载积分的,强烈推荐下载原博主的。我自己上传仅仅是因为想方便我自己)
OpenGL库配置用到的文件分为下面三类:

■ 动态链接库文件(.dll)

glaux.dll、glu32.dll、glut32.dll、OPENGL32.DLL。

■ 头文件(.h)

GL.H、GLAUX.H、glos.h、GLU.H、glut.h。

■ 库文件(.lib)

GLAUX.LIB、Glu32.lib、glut32.lib、Opengl32.lib。

3、配置上述文件

1)将dll文件拷贝到windows/System32下面

2)因为我用的是MinGW,将.h文件放到${minGW}/include/GL文件加下,如果没有GL文件夹,新建一个。

3)库文件和头文件类似,也放在MinGW安装目录对应的lib下

4、好了,到了这里基本准备工作做完了,开始干活,打开Eclipse,新建一个C或C++项目,首先可以先写个HelloWorld验证Eclipse环境是否正常。一切OK之后,粘贴一份OpenGL的代码,编译运行试试,注意从网上拷贝下来的代码中没有前两行,是我加上的,第二行尤其重要,否则编译不通过。

#include <windows.h>
#include <GL/gl.h>
#include <GL/glut.h>
#define window_width  640
#define window_height 480
// Main loop
void main_loop_function() {
// Z angle
static float angle;
// Clear color (screen)
// And depth (used internally to block obstructed objects)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Load identity matrix
glLoadIdentity();
// Multiply in translation matrix
glTranslatef(0, 0, -10);
// Multiply in rotation matrix
glRotatef(angle, 0, 0, 1);
// Render colored quad
glBegin(GL_QUADS);
glColor3ub(255, 000, 000);
glVertex2f(-1, 1);
glColor3ub(000, 255, 000);
glVertex2f(1, 1);
glColor3ub(000, 000, 255);
glVertex2f(1, -1);
glColor3ub(255, 255, 000);
glVertex2f(-1, -1);
glEnd();
// Swap buffers (color buffers, makes previous render visible)
glutSwapBuffers();
// Increase angle to rotate
angle += 0.25;
}
// Initialze OpenGL perspective matrix
void GL_Setup(int width, int height) {
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glEnable(GL_DEPTH_TEST);
gluPerspective(45, (float) width / height, .1, 100);
glMatrixMode(GL_MODELVIEW);
}
// Initialize GLUT and start main loop
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitWindowSize(window_width, window_height);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutCreateWindow("GLUT Example!!!");
glutDisplayFunc(main_loop_function);
GL_Setup(window_width, window_height);
glutMainLoop();
}


本以为应该没啥问题吧,结果编译都通不过,出现如下错误:

F:/workspace/cpp/HelloWorld/Debug/../src/HelloWorld.cpp:12: undefined reference to `glClear@4'
F:/workspace/cpp/HelloWorld/Debug/../src/HelloWorld.cpp:14: undefined reference to `glLoadIdentity@0'
F:/workspace/cpp/HelloWorld/Debug/../src/HelloWorld.cpp:16: undefined reference to `glTranslatef@12'
F:/workspace/cpp/HelloWorld/Debug/../src/HelloWorld.cpp:18: undefined reference to `glRotatef@16'
F:/workspace/cpp/HelloWorld/Debug/../src/HelloWorld.cpp:20: undefined reference to `glBegin@4'
F:/workspace/cpp/HelloWorld/Debug/../src/HelloWorld.cpp:21: undefined reference to `glColor3ub@12'
F:/workspace/cpp/HelloWorld/Debug/../src/HelloWorld.cpp:22: undefined reference to `glVertex2f@8'
F:/workspace/cpp/HelloWorld/Debug/../src/HelloWorld.cpp:23: undefined reference to `glColor3ub@12'


查资料可以知道,由于没有正确的链接到库所致,解决方法如下:

在项目上,右键点击选择Properties,进如下图配置页面,按如下所示配置,注意不要改动,我是经过很多次尝试之后才配成功的,如果你的Libraries中配置的是glut而不是glut32,则会出现如下错误:无法定位程序输入点glPopAttrib于动态连接库OPENGL.DLL上 



配置到这一步之后,重新编译项目,如果你按照我上面的步骤操作的话应该能编译成功了,恭喜你,迈出了成功的一步,可是接下来依然不是一帆风顺的。

5、项目编译成功之后,就可以运行下,看效果了,除非你人品超好,否则,我相信当你满怀期待的按下了Ctrl+F11后,Eclipse会毫无反应,我的第一反应以为是Eclipse一般输出是在Console中,对于openGL则不能显示,然后果断的打开了一个cmd,把Eclipse帮你编译好的HelloWorld.exe拖进去,运行之。当Windows连给我弹出了四次提示框,缺少某个dll文件(兵来将挡,依次下载相应的dll,拷贝到windows/system32目录下),又报了一个错误如图(哎,无助啊,又是一顿猛查资料)。



解决这个错误,很简单,参考http://www.codeguru.com/forum/showthread.php?t=357244,其实就是某个创建窗口的函数不能直接调用,需要作为回调函数来使用。修改后的代码如下:
#include <windows.h>
#include <GL/gl.h>
#include <GL/glut.h>
#define window_width  640
#define window_height 480
// Main loop
void main_loop_function() {
// Z angle
static float angle;
// Clear color (screen)
// And depth (used internally to block obstructed objects)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Load identity matrix
glLoadIdentity();
// Multiply in translation matrix
glTranslatef(0, 0, -10);
// Multiply in rotation matrix
glRotatef(angle, 0, 0, 1);
// Render colored quad
glBegin(GL_QUADS);
glColor3ub(255, 000, 000);
glVertex2f(-1, 1);
glColor3ub(000, 255, 000);
glVertex2f(1, 1);
glColor3ub(000, 000, 255);
glVertex2f(1, -1);
glColor3ub(255, 255, 000);
glVertex2f(-1, -1);
glEnd();
// Swap buffers (color buffers, makes previous render visible)
glutSwapBuffers();
// Increase angle to rotate
angle += 0.25;
}
// Initialze OpenGL perspective matrix
void GL_Setup(int width, int height) {
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glEnable(GL_DEPTH_TEST);
gluPerspective(45, (float) width / height, .1, 100);
glMatrixMode(GL_MODELVIEW);
}
// Initialize GLUT and start main loop
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitWindowSize(window_width, window_height);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutCreateWindow("GLUT Example!!!");
glutDisplayFunc(main_loop_function);
GL_Setup(window_width, window_height);
glutMainLoop();
}


好了,大功告成,再次编译运行项目,看到如下界面

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: