天天看點

OpenGL程式設計-1

Opengl入門基礎筆記

OpenGL實用工具庫(OpenGL Utility Toolkit Library, GLUT)

提供所有視窗系統的共同功能

打開視窗

從滑鼠和鍵盤擷取輸入

彈出菜單

事件驅動

代碼可以在平台間移植,但是GLUT缺乏在特定平台上優秀工具包所具有的功能

滾動條

絕大多數常數采用#define在頭檔案gl.h, glu.h和glut.h中定義

注意#include <glut.h>會自動包含其它兩個頭檔案

如:

glBegin(GL_POLYGON);

glClear(GL_COLOR_BUFFER_BIT);

在頭檔案中也定義了OpenGL資料類型: GLfloat, Gldouble,….

基本幾何形狀

線段

多邊形

*屬性

*變換

視圖Viewing

模組化Modeling

*控制(GLUT)

*輸入(GLUT)

*查詢Query

glVertex3f(x,y,z) glVertex3fv(p)

gl表示屬于GL庫 3指參數個數 f指參數的類型 P為指向float的指針

'注意每部分的大小寫'

OpenGL不是面向對象的,是以邏輯上的一個函數卻對應着多個OpenGL函數:

glVertex3f

glVertex2i

glVertex3dv

内在存貯模式是相同的

在C++中很容易建立重載函數,但效率卻成為主要問題

·每個GLUT程式都必須有一個顯示回調函數

·隻要OpenGL确定顯示内容要被重新整理時,顯示回調函數就會被調用。例如,當視窗被打開的時候

·main函數以程式進入事件循環後為結束

·The main function ends with the program entering an event loop

·glutInit使得應用程式可擷取指令行參數并初始化系統

·glutInitDisplayMode設定視窗的屬性

RGB顔色

單緩沖區

·屬性按照邏輯組合在一起

·glutWindowSize 以像素為機關定義視窗的尺寸

·glutWindowPosition 定義視窗左上角在顯示器上的位置

·glutCreateWindow建立視窗,标題來自于參數值

·glutDisplayFunc定義顯示回調函數

·glutMainLoop進入無窮的事件循環

簡單多邊形:邊除頂點外不相交

凸多邊形:對于多邊形中任意兩點,連接配接這兩點的線段完全在多邊形内

平面多邊形:所有頂點在同一平面上

·顔色(點、線、多邊形)

·點的大小

·線段的寬度與實虛模式

·多邊形

前後面

填充模式:顔色或模式

顯示為實心多邊形或者隻顯示邊界

·顔色的每個分量在幀緩沖區中是分開存貯的

·在緩沖區中通常每個分量占用8位位元組

·注意在函數glColor3f中顔色值的變化範圍是從0.0(無)到1.0(全部), 而在glColor3ub中顔色值的變化範圍是從0到255

由一組RGB值構成一張表,“顔色”是表中項的索引

需要更少的記憶體

索引通常隻有8位

現在重要性下降

由glColor*設定的顔色成為狀态的一部分,後續構造過程将使用該顔色,直至它被修改為止

顔色與其它屬性不是對象的一部分,但是在渲染對象時要把這些屬性賦給對象

可以按下述過程建立具有不同顔色的頂點

glColor

glVertex

OpenGL根據多邊形頂點顔色插值出内部顔色

glShadeModel(GL_SMOOTH)

GL_SMOOTH: 采用光滑着色,獨立的處理圖元中各個頂點的顔色。對于線段圖元,線段上各點的顔色将根據兩個頂點的顔色通過插值得到。對于多邊形圖元,多邊形内部區域的顔色将根據所有頂點的顔色插值得到。即有過渡色效果

第一個頂點的顔色确定填充顔色

glShadeModel(GL_FLAT)

GL_FLAT:采用恒定着色,使用圖元中某個頂點的顔色來渲染整個圖元。

OpenGL程式設計-1

繼續閱讀