首页 > 代码库 > OpenGL初学:安装配置与第一个程序

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,选择新建工程,新建一个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

OpenGL初学:安装配置与第一个程序