Ubuntu下OpenGL编程基础解析

本文重点介绍在Ubuntu下怎么进行OpenGL基础编程,其主要步骤如下:

1:首先当然需要安装一些基本的编译库和OpenGL库文件,主要安装以下两个就ok了

基本编译库:build-essential

sudo apt-get install  build-essential

OpenGL工具库:freeglut3-dev

sudo apt-get install freeglut3-dev

Ubuntu下OpenGL编程基础解析

Ubuntu下OpenGL编程基础解析

以上是本人在虚拟机上安装的提示,可以看到除了freeglut3外 还安装了其他额外的软件包。

2:第二步,当然是编写代码了,这个就不用讲了,自己贴一个,有时间可以研究下。

/* Rotating cube with color interpolation */ 

#include <stdlib.h>
 #include <GL/glut.h>
 
 GLfloat vertices[][3] = {{-1.0,-1.0,-1.0},{1.0,-1.0,-1.0},   
  {1.0,1.0,-1.0}, {-1.0,1.0,-1.0}, {-1.0,-1.0,1.0},   
  {1.0,-1.0,1.0}, {1.0,1.0,1.0}, {-1.0,1.0,1.0}}; 

 GLfloat normals[][3] = {{-1.0,-1.0,-1.0},{1.0,-1.0,-1.0}, 
  {1.0,1.0,-1.0}, {-1.0,1.0,-1.0}, {-1.0,-1.0,1.0},   
  {1.0,-1.0,1.0}, {1.0,1.0,1.0}, {-1.0,1.0,1.0}};

 GLfloat colors[][3] = {{0.0,0.0,0.0},{1.0,0.0,0.0},
  {1.0,1.0,0.0}, {0.0,1.0,0.0}, {0.0,0.0,1.0}, 
  {1.0,0.0,1.0}, {1.0,1.0,1.0}, {0.0,1.0,1.0}};


void polygon(int a, int b, int c , int d)
{
  glBegin(GL_POLYGON); 
  glColor3fv(colors[a]); 
  glNormal3fv(normals[a]); 
  glVertex3fv(vertices[a]); 
  glColor3fv(colors[b]); 
  glNormal3fv(normals[b]); 
  glVertex3fv(vertices[b]); 
  glColor3fv(colors[c]); 
  glNormal3fv(normals[c]); 
  glVertex3fv(vertices[c]); 
  glColor3fv(colors[d]); 
  glNormal3fv(normals[d]); 
  glVertex3fv(vertices[d]); 
  glEnd(); 
}
 
 
 
void colorcube(void) 

/* map vertices to faces */ 
 
  polygon(0,3,2,1); 
  polygon(2,3,7,6); 
  polygon(0,4,7,3); 
  polygon(1,2,6,5); 
  polygon(4,5,6,7); 
  polygon(0,1,5,4); 
}

static GLfloat theta[] = {0.0,0.0,0.0}; 
static GLint axis = 2; 

void display(void) 

/* display callback, clear frame buffer and z buffer,
  rotate cube and draw, swap buffers */ 
 
 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
 glLoadIdentity(); 
 glRotatef(theta[0], 1.0, 0.0, 0.0); 
 glRotatef(theta[1], 0.0, 1.0, 0.0); 
 glRotatef(theta[2], 0.0, 0.0, 1.0); 
 colorcube(); 
 glFlush(); 
 glutSwapBuffers(); 

 
 

void spinCube()
{
  /* Idle callback, spin cube 2 degrees about selected axis */
 theta[axis] += 2.0; 
 if( theta[axis] > 360.0 ) theta[axis] -= 360.0;
 display();
}
 
 
 
void mouse(int btn, int state, int x, int y)
 {
  /* mouse callback, selects an axis about which to rotate */
  if(btn==GLUT_LEFT_BUTTON && state == GLUT_DOWN) axis = 0; 
  if(btn==GLUT_MIDDLE_BUTTON && state == GLUT_DOWN) axis = 1; 
  if(btn==GLUT_RIGHT_BUTTON && state == GLUT_DOWN) axis = 2;
}
 
void myReshape(int w, int h)
{
  glViewport(0, 0, w, h); 
 glMatrixMode(GL_PROJECTION); 
 glLoadIdentity(); 
 if (w <= h) 
 {
  glOrtho(-2.0, 2.0, -2.0 * (GLfloat) h / (GLfloat) w, 
          2.0 * (GLfloat) h / (GLfloat) w, -10.0, 10.0); 
 }
    else
    {
        glOrtho(-2.0 * (GLfloat) w / (GLfloat) h, 
          2.0 * (GLfloat) w / (GLfloat) h, -2.0, 2.0, -10.0, 10.0);
  }
 
  glMatrixMode(GL_MODELVIEW);
}
 

main(int argc, char **argv)
{
  glutInit(&argc, argv);
 /* need both double buffering and z buffer */

 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); 
    glutInitWindowSize(500, 500); 
    glutCreateWindow("colorcube"); 
    glutReshapeFunc(myReshape); 
    glutDisplayFunc(display); 
 glutIdleFunc(spinCube); 
 glutMouseFunc(mouse); 
 glEnable(GL_DEPTH_TEST); /* Enable hidden--surface--removal */ 
    glutMainLoop();
 
return 0;
 
}

相关推荐