OpenGL初学:安装配置与第一个程序
计算机图形学要用到OpenGL,我把我安装的过程和当中遇到的一些问题记录下。希望对OpenGL的刚開始学习的人有帮助^ ^
OpenGL简单介绍:
OpenGL™ 是行业领域中最为广泛接纳的 2D/3D 图形 API, 其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序。
OpenGL™ 是独立于视窗操作系统或其他操作系统的。亦是网络透明的。
在包括CAD[2] 、内容创作、能源、娱乐、游戏开发、制造业、制药业及虚拟现实等行业领域中,OpenGL™ 帮助程序猿实如今 PC、工作站、超级计算机等硬件设备上的高性能、极具冲击力的高视觉表现力图形处理软件的开发。(摘自百度百科)
配置教程:
要使用OpenGL,必须有配套的.dll,.lib,.h文件。能够在这里下载。
下载好后例如以下图所看到的
1、复制.dll文件(如glu.dll等文件)到系统盘c:\windows\system32中。在64位系统中要拷贝到C:\Windows\SysWOW64这个目录。
2、复制.h文件(如gl.h 等文件)到Visual c++ 的安装文件夹下。
以我的为例E:\vs2012\VC\include\GL下,一般都会有GL目录的,没有的话新建一个即可了。
3、复制.lib文件(如glaux.lib等) 到你的编译器所在文件夹的lib文件夹。以我的为例E:\vs2012\VC\lib。
注意:假设上面的这些目录里本来就有这些文件,请看一下与上面提供的文件是不是一个版本号的,即改动日期、文件大小等是否一样,假设不一样最好用上面提供的覆盖掉,全部的.lib,.h,.dll文件要是同一个版本号,不然会出现故障,例如以下图,就是我的glut32.dll和glut.h不是一个版本号造成的。
第一个OpenGL程序
做完上面的工作。就基本配置好了,以下让我们来写第一个opengl程序,来检验一下
打开vs,选择新建project。新建一个win32控制台应用程序(Win32 Console Application)
选择“空项目”
加入新建项。我这里叫OpenGL.c,注意,是.c为扩展名的C语言程序。
以下就是写代码啦,这里提供一个測试程序
#include <GL/glut.h> void myDisplay(void) { glClear(GL_COLOR_BUFFER_BIT); glRectf(-0.5f, -0.5f, 0.5f, 0.5f); glFlush(); } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowPosition(100, 100); glutInitWindowSize(400, 400); glutCreateWindow("第一个OpenGL程序"); glutDisplayFunc(&myDisplay); glutMainLoop(); return 0; }
该程序的作用是在一个黑色的窗体中央画一个白色的矩形。例如以下图
出错处理
1)
error LNK2019: unresolved external symbol __imp__glFlush@ 这类的错误
或
1>PT.obj : error LNK2019: 无法解析的外部符号 _auxSolidSphere@8,该符号在函数 _main 中被引用
1>PT.obj : error LNK2019: 无法解析的外部符号 _auxInitWindowA@4。该符号在函数 _main 中被引用
1>PT.obj : error LNK2019: 无法解析的外部符号 _auxInitPosition@16,该符号在函数 _main 中被引用
1>PT.obj : error LNK2019: 无法解析的外部符号 _auxInitDisplayMode@4,该符号在函数 _main 中被引用
原因是没有在附加依赖项中加入如上lib 文件
解决方法:项目——项目属性——配置属性——链接器——输入——附加依赖项,加入
glut32.lib Opengl32.lib Glu32.lib glaux.lib
2)
error C2664: “auxInitWindowW”: 不能将參数 1 从“const char [7]”转换为“LPCWSTR”
与指向的类型无关。转换要求 reinterpret_cast、C 样式转换或函数样式转换
错误及解决方式:
not passing in a Unicode string - put an "L" before the string literal: L"XXXXX" or use the TEXT("XXXXX") or _T("XXXXX") macros...
最后
推荐一个非常好的OpenGL的学习站点http://www.yakergong.net/nehe/
END