http://www.libaqiang.com/?p=78330
1.Ubuntu下安装OpenGL/Glut库
OpenGL(全写Open Graphics Library)是个定义了一个跨编程语言、跨平台的编程接口的规格,它用于三维图象(二维的亦可)。OpenGL是个专业的图形程序接口,是一个功能强大,调用方便的底层图形库。
ubuntu下安装OpenGL的方式如下:
sudo apt-get install freeglut3 freeglut3-dev #freeglut是一款开源的图形编程接口
sudo apt-get install binutils-gold #Ubuntu>=11.10的版本需要安装此包以解决连接问题
2. 通过链接OpenGL/Glut库来编译文件
g++ -lGL -lglut color_cube.cpp -o color_cube
3.解决编译时的链接错误问题
问题:
undefined reference to `gluPerspective’
collect2: ld returned 1 exit status
undefined reference to “gluLookAt”
解决办法:
g++ -lGL -lGLU -lglut color_cube.cpp -o color_cube
4.一段实例程序:
#include
#include
GLboolean polySmooth = GL_TRUE;
static void init(void){
glCullFace (GL_BACK);
glEnable (GL_CULL_FACE);
glBlendFunc (GL_SRC_ALPHA_SATURATE,GL_ONE);
glClearColor (0.0,0.0,0.0);
}
#define NFACE 6
#define NVERT 8
void drawCube(GLdouble x0,GLdouble x1,GLdouble y0,GLdouble y1,GLdouble z0,GLdouble z1){
static GLfloat v[8][3];
static GLfloat c[8][4] = {
{0.0,1.0},{1.0,
{0.0,1.0,1.0}
};
/* indices of front,top,left,bottom,right,back faces */
static GLubyte indices[NFACE][4] = {
{4,5,6,7},{2,3,7,6},{0,4,3},
{0,1,4},{1,2},2,1}
};
v[0][0] = v[3][0] = v[4][0] = v[7][0] = x0;
v[1][0] = v[2][0] = v[5][0] = v[6][0] = x1;
v[0][1] = v[1][1] = v[4][1] = v[5][1] = y0;
v[2][1] = v[3][1] = v[6][1] = v[7][1] = y1;
v[0][2] = v[1][2] = v[2][2] = v[3][2] = z0;
v[4][2] = v[5][2] = v[6][2] = v[7][2] = z1;
#ifdef GL_VERSION_1_1
glEnableClientState (GL_VERTEX_ARRAY);
glEnableClientState (GL_COLOR_ARRAY);
glVertexPointer (3,GL_FLOAT,v);
glColorPointer (4,c);
glDrawElements (GL_QUADS,NFACE*4,GL_UNSIGNED_BYTE,indices);
glDisableClientState (GL_VERTEX_ARRAY);
glDisableClientState (GL_COLOR_ARRAY);
#else
printf (“If this is GL Version 1.0,“);
printf (“vertex arrays are not supported.n”);
exit(1);
#endif
}
/* Note: polygons must be drawn from front to back
* for proper blending.
*/
void display(void) {
if (polySmooth) {
glClear (GL_COLOR_BUFFER_BIT);
glEnable (GL_BLEND);
glEnable (GL_POLYGON_SMOOTH);
glDisable (GL_DEPTH_TEST);
}else {
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glDisable (GL_BLEND);
glDisable (GL_POLYGON_SMOOTH);
glEnable (GL_DEPTH_TEST);
}
glPushMatrix ();
glTranslatef (0.0,-8.0);
glRotatef (30.0,0.0);
glRotatef (60.0,0.0);
drawCube(-0.8,0.8,-0.8,0.8);
glPopMatrix ();
glFlush ();
}
void reshape(int w,int h) {
glViewport(0,(GLsizei) w,(GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(30.0,(GLfloat) w/(GLfloat) h,20.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
/* ARGSUSED1 */
void keyboard(unsigned char key,int x,int y) {
switch (key) {
case ‘t’:
case ‘T’:
polySmooth = !polySmooth;
glutPostRedisplay();
break;
case 27:
exit(0); /* Escape key */
break;
default:
break;
}
}
/* Main Loop */ int main(int argc,char** argv) { glutInit(&argc,argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_ALPHA | GLUT_DEPTH); glutInitWindowSize(400,400); glutCreateWindow(“OpenGL Color Cube”); init (); glutReshapeFunc (reshape); glutKeyboardFunc (keyboard); glutDisplayFunc (display); glutMainLoop(); return 0; }