最近要用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-essential
sudo apt-get install libgl1-mesa-dev
sudo apt-get install libglu1-mesa-dev
sudo apt-get install freeglut3 freeglut3-dev
2.开始测试程序,先新建test.c文件,再编译,在运行。
#include <GL/glut.h>
void init(void)
{
glClearColor(0.0,0.0,0.0);
glMatrixMode(GL_PROJECTION);
glOrtho(-5,5,-5,15);
glMatrixMode(GL_MODELVIEW);
gluLookAt(0,10,1,0);
return;
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.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 math
import time
h=0
m=0
s=0
def 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()