工作需要,開始學習openGL。其實需要學的是openGL ES 但是網上搜索一段之後發現相應的ES教程或資料都是針對有openGL經驗的人,所以先學習openGL。
參考資料:
OpenGL編程基礎(第3版)Edward Angel (段菲 譯) 入門級別
OpenGL超級寶典(第4版) (傳說中的藍寶書) 進階級別
OpenGL ES 2.0 Programming Guide 2009 opengl ES
首先,工作環境是Linux,Ubuntu發行版。
需要的庫:
GLUT (library "glut" on Linux)
OpenGL (library "GL" on Linux)
GL Utilities (library "GLU" on Linux)
X11
Xmu
Xi
編譯命令:
gcc -I/usr/include -L/usr/local/lib -L/usr/lib -lglut -lGLU -lGL -lX11 -lXmu -lXi -lXext -lm FILE_NAME_LIST -o TARGET
參考鏈接:http://www.divms.uiowa.edu/~cwyman/classes/common/howto/compile.html
第一個例子:
參考鏈接:http://soft.yesky.com/261/2398261.shtml (這個網站的教程只是用於windows,所以後來換了其他教程,不過作爲了解,入門還是可以看看)
#include <stdlib.h>
#include <GL/glut.h>
void background(void)
{
glClearColor(0.0,0.0,0.0,0.0);//設置背景顏色爲黑色
}
void myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);//buffer設置爲顏色可寫
glBegin(GL_TRIANGLES);//開始畫三角形
glShadeModel(GL_FLAT);//設置爲光滑明暗模式
glColor3f(1.0,0.0,0.0);//設置第一個頂點爲紅色
glVertex2f(-1.0,-1.0);//設置第一個頂點的座標爲(-1.0,-1.0)
glColor3f(0.0,1.0,0.0);//設置第二個頂點爲綠色
glVertex2f(1.0,-1.0);//設置第二個頂點的座標爲(0.0,-1.0)
glColor3f(0.0,0.0,1.0);//設置第三個頂點爲藍色
glVertex2f(0.0,1.0);//設置第三個頂點的座標爲(-0.5,1.0)
glEnd();//三角形結束
glFlush();//強制OpenGL函數在有限時間內運行
}
void myReshape(GLsizei w,GLsizei h)
{
glViewport(0,0,w,h);//設置視口
glMatrixMode(GL_PROJECTION);//指明當前矩陣爲GL_PROJECTION
glLoadIdentity();//將當前矩陣置換爲單位陣
gluOrtho2D(-1.5,1.5,-1.5,1.5);
/*if(w <= h)
gluOrtho2D(-1.0,1.5,-1.5,1.5*(GLfloat)h/(GLfloat)w);//定義二維正視投影矩陣
else
gluOrtho2D(-1.0,1.5*(GLfloat)w/(GLfloat)h,-1.5,1.5);
glMatrixMode(GL_MODELVIEW);//指明當前矩陣爲GL_MODELVIEW*/
}
int main(int argc,char ** argv)
{
/*初始化*/
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(400,400);
glutInitWindowPosition(200,200);
/*創建窗口*/
glutCreateWindow("Triangle");
/*繪製與顯示*/
background();
glutReshapeFunc(myReshape);
glutDisplayFunc(myDisplay);
glutMainLoop();
return(0);
}
編譯:
$ gcc -I/usr/include -L/usr/local/lib -L/usr/lib -lglut -lGLU -lGL -lX11 -lXmu -lXi -lXext -lm hello-gl.c -o hello
運行:
$ ./hello
效果如圖