WIN7&Ubuntu配置OpenGL详解(附.h, .lib, .dll 文件)

来源:互联网 发布:python量化交易 github 编辑:程序博客网 时间:2024/05/29 07:05

最近要用OpenGL跑人脸模型,于是开始捣鼓怎么配置openGL。但网上的各种博客,虽说讲的很详细,但给出的步骤总是不全,让我这样的小白很是苦恼,倒腾了不下十个博客才解决。所以,为了不让之后的小白苦恼,也为了自己能更熟悉,在此进行步骤详解。

Tips: 1)WIN7(X64)下运行环境为Microsoft Visual Studio 2013,仅使用C++

         2)Ubuntu(14.04)下运行语言为C++和python,两者都进行配置

         3)涉及到OpenGL的版本问题,建议使用3、4版本,因为相较1、2有了根本性的改变,一般系统自带OpenGL1版本,但只要更新显卡驱动,就会更新到合适的OpenGL新版本,因此无需纠结OpenGL版本问题,直接更新显卡驱动就行!(在此曾经很困惑,因此强调)


好了,开始放大招!

一、WIN7(X64)配置OpenGL

1.首先下载所需的各种files,包括.h头文件,.lib静态库文件,.dll动态库文件(百度盘链接:http://pan.baidu.com/s/1qXVGDAG)

1)压缩包中大体可以分为文件,OpenGL文件,GLUT文件,GLEW文件。

此处使用的GLUT文件是98年的闭源代码,现在也有开源的freeglut文件,但使用的API接口基本一致,且GLUT只是提供窗口平台,具体的绘图均由OpenGL提供,故没有什么区别。

2)GLWE的 .lib 和 .dll文件有WIN32和X64之分,故均放入压缩包中,复制时根据需要选择。

3)所有的 .h文件均放入:Microsoft Visual Studio 12.0/VC/include/GL文件夹中,要是没有GL文件夹,就新建一个

4)所有的 .lib文件均放入:Microsoft Visual Studio 12.0/VC/lib文件夹中,如文件夹中已有一些文件,建议保留最新的。

5)所得的 .dll文件均放入:C:\Windows\System32中,为保险期间,也在C:\Windows\SysWOW64中放一份。

2.文件都放置好后,在新建VS2013的程序时,只需要在“属性->链接器->输入->附加依赖项”中将上述中除去GLWE相关的 .lib文件加入即可(其实不需要全加,但加入也无妨)

3.就此配置完成,可以进行程序测试,测试代码如下:

#include <GL/glut.h>#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )void dis(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("the first openGL");glutDisplayFunc(&dis);glutMainLoop();return 0;}

、Ubuntu(14.04)配置OpenGL

1.安装C++相关的包:

sudo apt-get install build-essentialsudo apt-get install libgl1-mesa-devsudo apt-get install libglu1-mesa-devsudo apt-get install freeglut3 freeglut3-dev
2.开始测试程序,先新建test.c文件,再编译,在运行。

1)test.c文件内容如下:

#include <GL/glut.h>void init(void){    glClearColor(0.0, 0.0, 0.0, 0.0);    glMatrixMode(GL_PROJECTION);    glOrtho(-5, 5, -5, 5, 5, 15);    glMatrixMode(GL_MODELVIEW);    gluLookAt(0, 0, 10, 0, 0, 0, 0, 1, 0);    return;}void display(void){    glClear(GL_COLOR_BUFFER_BIT);    glColor3f(1.0, 0, 0);    glutWireTeapot(3);    glFlush();    return;}int main(int argc, char *argv[]){    glutInit(&argc, argv);    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);    glutInitWindowPosition(0, 0);    glutInitWindowSize(300, 300);    glutCreateWindow("OpenGL 3D View");    init();    glutDisplayFunc(display);    glutMainLoop();    return 0;}

2)编译并运行:

gcc ./test.c -lGL -lGLU -lglut -o test ./test

3.安装pyOpenGL,一句命令:

sudo pip install pyopengl

4.测试python代码:

from OpenGL.GL import *from OpenGL.GLU import *from OpenGL.GLUT import *import mathimport  timeh=0m=0s=0def Draw():    PI=3.1415926    R=0.5    TR=R-0.05    glClear(GL_COLOR_BUFFER_BIT)    glLineWidth(5)    glBegin(GL_LINE_LOOP)    for i in range(100):        glVertex2f(R*math.cos(2*PI/100*i),R*math.sin(2*PI/100*i))    glEnd()    glLineWidth(2)    for i in range(100):        glBegin(GL_LINES)        glVertex2f(TR*math.sin(2*PI/12*i),TR*math.cos(2*PI/12*i))        glVertex2f(R*math.sin(2*PI/12*i),R*math.cos(2*PI/12*i))        glEnd()    glLineWidth(1)    h_Length=0.2    m_Length=0.3    s_Length=0.4    count=60.0    s_Angle=s/count    count*=60    m_Angle=(m*60+s)/count    count*=12    h_Angle=(h*60*60+m*60+s)/count    glLineWidth(1)    glBegin(GL_LINES)    glVertex2f(0.0,0.0)    glVertex2f(s_Length*math.sin(2*PI*s_Angle),s_Length*math.cos(2*PI*s_Angle))    glEnd()    glLineWidth(5)    glBegin(GL_LINES)    glVertex2f(0.0,0.0)    glVertex2f(h_Length*math.sin(2*PI*h_Angle),h_Length*math.cos(2*PI*h_Angle))    glEnd()    glLineWidth(3)    glBegin(GL_LINES)    glVertex2f(0.0,0.0)    glVertex2f(m_Length*math.sin(2*PI*m_Angle),m_Length*math.cos(2*PI*m_Angle))    glEnd()    glLineWidth(1)    glBegin(GL_POLYGON)    for i in range(100):        glVertex2f(0.03*math.cos(2*PI/100*i),0.03*math.sin(2*PI/100*i));    glEnd()    glFlush()def Update():    global h,m,s    t=time.localtime(time.time())    h=int(time.strftime('%H',t))    m=int(time.strftime('%M',t))    s=int(time.strftime('%S',t))    glutPostRedisplay()glutInit()glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA)glutInitWindowSize(400, 400)glutCreateWindow("My clock")glutDisplayFunc(Draw)glutIdleFunc(Update)glutMainLoop()


0 0
原创粉丝点击