歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Ubuntu下OpenGL編程基礎解析

本文重點介紹在Ubuntu下怎麼進行OpenGL基礎編程,其主要步驟如下:

1:首先當然需要安裝一些基本的編譯庫和OpenGL庫文件,主要安裝以下兩個就ok了

基本編譯庫:build-essential

sudo apt-get install  build-essential

OpenGL工具庫:freeglut3-dev

sudo apt-get install freeglut3-dev

以上是本人在虛擬機上安裝的提示,可以看到除了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;
 
}

Copyright © Linux教程網 All Rights Reserved