230 likes | 592 Views
OPENGL 基本認識. OPENGL 介紹 . 什麼是 OPENGL? 並非程式語言 , 而是一種 API 3D 繪圖與模型程式庫 像是 C 的 runtime library 提供許多功能包裝好的函式庫 沒有 OPENGL 程式 , 而是使用了 OPENGL 這個 API. 寫程式前的準備動作. Vc++ 會使用到的程式庫 opengl32.lib glu32.lib 標頭檔 gl.h : 放 opengl 的函數、型態、巨集 glu.h: 工具程式庫的函數原型 寫法 #include<gl/gl.h> #include<gl/glu.h>.
E N D
OPENGL介紹 • 什麼是OPENGL? • 並非程式語言,而是一種API • 3D繪圖與模型程式庫 • 像是C的runtime library • 提供許多功能包裝好的函式庫 • 沒有OPENGL 程式,而是使用了OPENGL這個API
寫程式前的準備動作 • Vc++會使用到的程式庫 • opengl32.lib • glu32.lib • 標頭檔 • gl.h : 放opengl的函數、型態、巨集 • glu.h:工具程式庫的函數原型 • 寫法 • #include<gl/gl.h> • #include<gl/glu.h>
Opengl安裝教學 • 首先我們要先確定有三個檔案 • 1.glut.h • 2.glut32.lib • 3.glut32.dll • vc++使用者: • 1.將glut.h放到vc98\include\gl\ • 2.將(glut.h)glut32.dll glut32.dll放再與程式同一資料夾下 • 3.直接編譯不需其他設定
資料型態 • 所有以GL為首的資料型態代表OPENGL,後面接所對應C的資料型態名稱,以u為首代表unsigned • 變數名稱的意義 • size:深度或長度 • clamp:用在顏色合成中代表顏色的強度 • GLenum:列舉變數 • GLbitfield:含有二進位資料欄位變數
函數命名 • 命名範例 • glColor3f • gl:來源的library的名稱 • Color:root command • 3f:函數接受3個浮點數參數 • 沒有指定型態,預設為double
GLUT • 是一種輔助的程式庫 • 提供彈出式功能表 • 視窗的管理 • 支援搖桿 • OPENGL中沒有任何的有關視窗螢幕管理的函數與命令, 鍵盤,滑鼠輸入函數
GLUT的顯示模式 • 單一緩衝區 • 所有繪圖指令都會執行時顯示是在視窗上 • 雙緩衝區視窗 • 繪圖指令會建立一個仍未顯示的畫面, 快速切換到視窗上顯示出來 • 目的:不希望畫圖的過程被一步步顯示出來
畫點 • Vertex • 使用glVertex3f(x,y,z) • 用法: • glBegin(GL_POINTS); • glVertex3f(x,y,z) • glEnd(); • glPointsize(GLfloat size)改變點的大小 • 參數代表點的半徑
畫線 • GL_LINES:直線 • Ex:在(0,0,0)與(50,50,50)畫出線段 • glBegin(GL_LINES); • glvertex3f(0.0f,0.0f,0.0f); • glvertex3f(50.0f,50.0f,50.0f); • glEnd(); • GL_LINE_STRIP:連續線段
設定線段寬度 • 使用glLineWidth(GLfloat width); • 虛線使用 • glEnable(GL_LINE_STIPPLE) ,啟動 • glLineStipple(虛線寬度,樣式)
畫三角形 • GL_TRINGLES • Ex:glBegin(GL_TRINGLES),後接3個點. • 預設為顏色透明 • 必須指定顏色才能看到結果.
顏色的設定 • 顏色: 由紅,綠,藍組成 • 語法: glColor3f(R,G,B); • R,G,B範圍: 0.0 ~ 1.0 ,(浮點數表示)
程式本體 • 設定顯示模式 • glutInitDisplayMode(GLUT_SINGLE)|GLUT_RGB) • 1.mode :single/double • 2.RGBA色彩顯示模式 • 建立視窗 • 由GLUT程式庫來建立 • glutCreateWindow(“標題名稱”);
程式本體 • 顯示回呼函數(Displaying Callback) • 語法: glutDisplayFunc(RenderScene); • 目的: • 將RenderScene函數定為Displaying Callback function • 時機: • 1.GLUT需要繪圖時 • 2.視窗第一次顯示/視窗大小被變更
重要的function • void SetupRC(); • 用途:繪圖前設定初始化視窗的顏色 • glclearColor(r,g,b,alpha); • 在renderscene()中搭配 glclear(GL_Color_Buffer_Bit)實際執行視窗顏色填滿. • 用該色填滿視窗 • void RenderScene(void) • 用途:繪圖的動作就寫在這裡 • void ChangeSize(Glsizei w,Glsizei h) • 用途:當視窗改變時,重設座標系統
#include <windows.h> • #include <gl/glut.h> • void RenderScene(void) • { • glClear(GL_COLOR_BUFFER_BIT);//清除 • //繪圖動作由此加入….. • glFlush(); • } • void SetupRC(void) { • glClearColor(0.0f, 0.0f, 1.0f, 1.0f); • } • void main(void) • { • glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); • glutCreateWindow("這是我的第一支程式"); • glutDisplayFunc(RenderScene); • SetupRC(); • glutMainLoop(); • }