剛開始學習OpenGL,感受這個挺有趣的(在繪製三維模型時,空間想象能力要求比較高,否則很頭疼的)。html
新東西,新心情。。。來一發紅色三角形。java
我就是要經過OpenGL來繪製一個紅色的三角形。如今咱們來看一下代碼:緩存
#include <GL/glut.h> void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清除屏幕和深度緩存 glLoadIdentity(); // 重置當前的模型觀察矩陣 glTranslatef(0.0f, 0.0f, -5.0f); // 移入屏幕5個單位 glColor3f(1.0f, 0.0f, 0.0f); // 顏色設置爲紅色 glBegin(GL_TRIANGLES); // 開始繪製三角形 glVertex3f(0.0f, 1.0f, 0.0f); // 上頂點 glVertex3f(-1.0f, -1.0f, 0.0f); // 左下頂點 glVertex3f(1.0f, -1.0f, 0.0f); // 右下頂點 glEnd(); // 結束繪製 glFlush(); // 強制刷新緩衝 } void initGL() { glViewport(0, 0, 300, 300); // 重置當前的視口 glMatrixMode(GL_PROJECTION); // 選擇投影矩陣 glLoadIdentity(); // 重置投影矩陣 gluPerspective(45.0f, (GLfloat)300 / (GLfloat)300, 0.1f, 100.0f); // 設置視口的大小 glMatrixMode(GL_MODELVIEW); // 選擇模型觀察矩陣 glLoadIdentity(); // 重置模型觀察矩陣 glShadeModel(GL_SMOOTH); // 平滑投影 glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // 黑色背景 glClearDepth(1.0f); // 設置深度緩存 glEnable(GL_DEPTH_TEST); // 啓用深度測試 glDepthFunc(GL_LEQUAL); // 深度測試類型 glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // 透視修正 } int main(int argc, char *argv[]) { glutInit(&argc, argv); // 初始化GLUT glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); // 設置顯示模式(這裏是單緩存和RGB顏色模式的窗口) glutInitWindowSize(300, 300); // 設置窗口大小 glutInitWindowPosition(300, 300); // 設置窗口初始位置 glutCreateWindow("第一個OpenGL程序"); // 建立一個窗口 initGL(); // OpenGL的設置 glutDisplayFunc(display); // 註冊一個繪圖函數 glutMainLoop(); // 進入GLUT事件處理循環 return 0; }
關於投影矩陣,深度緩存這些東西,下次更加熟悉以後再寫一下。。。函數
OpenGL源碼:http://www.eyesourcecode.com/forum-OpenGL-1.htmloop