添加光照glEnable(GL_LIGHTING);這個函數調用告訴OpenGL使用材料屬性和光照參數去決定每個頂點的顏色值。如果沒有開啟這個函數,則看到的物體是昏暗的。開啟光照後會根據你的材料屬性和光照參數計算頂點的顏色值。下圖對比未開啟光照和開啟
使用光源要模擬真實世界,僅有環境光是不夠的,需要指定更多的光源來提升真實感。OpenGL至少提供8種光源,可以在場景中的任意位置甚至是可視區域之外。你可以指定光源位於無限遠處以獲得平行光束,或者光源位於近處向外發射光束。還可以制造出聚光燈的效果。選擇
光照效果僅僅使用環境光和漫反射光的光照效果,噴氣式飛機表面的顏色看起來比較平淡。在渲染木材,泥土,布料,紙箱上等這些表面粗糙的物體上,使用環境光和漫反射光的光照效果就基本足夠了。但是在為光滑的金屬物體建模時,為了使其顯得更加逼真,僅僅使用環境光和漫反
陰影影(又稱影子、背影),光線被不透明物體阻檔而產生的黑暗范圍,與光源的方向相反。影的橫切面是二維輪廓、阻檔光線物體的倒轉投影。影的大小、形狀隨光線的入射角而改變。(維基百科)在場景中添加陰影可以使得場景更加逼真。下面兩幅圖是有無陰影效果的對比:如何
混合在正常情況下,OpenGL渲染時會把顏色值輸入到顏色緩沖區中,深度值輸入到深度緩沖區中。如果我們關閉深度測試,那麼新的顏色值會簡單地覆蓋已經存在於顏色緩沖區中的值。當開啟深度測試時,顏色段只有在通過深度測試時,才會覆蓋已經存在於顏色緩沖區中的值。
反走樣OpenGL的混合還可以用於反走樣。在絕大多數情況下,一個渲染片段映射到屏幕上的一個像素。在屏幕上的像素是一個小方格。被著色的像素和未被著色的像素區分非常地明顯。在這種情況下,可能會產生鋸齒。鋸齒是計算機生成圖像的嚴重缺陷,使得圖像看起來不自然
應用霧霧是OpenGL支持的一種易於使用的特殊效果。在使用霧時,OpenGL把霧的顏色與完成所有其他顏色計算的幾何圖元進行混合。霧與幾何圖元的混合程度取決於幾何圖元離觀察者的距離。霧可以使物體逐漸模糊最終消失在霧色裡(就像在霧中遠去的父親的背影)。在
累積緩沖區OpenGL除了顏色緩沖區、深度緩沖區、模板緩沖區之外,還有累積緩沖區。累積緩沖區允許你把渲染到顏色緩沖區的值,拷貝到累積緩沖區。在多次拷貝操作到累積緩沖區時,可以用不同方式的把顏色緩沖區內容和當前累積緩沖區的內容進行重復混合。當在累積緩沖
位圖最初的電子計算機,只能顯示單色(綠色或琥珀色)圖形,每一個像素只有兩種狀態打開和關閉。在計算器圖形學前期,圖像數據是用位圖來表示的,位圖就是一系列的0和1,表示打開或關閉的像素值。下圖就是用位圖表示的一匹馬:下圖是同一匹馬的灰度圖,在這個像素圖中
像素包裝位圖和像素圖很少會被緊密包裝到內存中。在許多硬件平台上,考慮到性能的原因位圖和像素圖的每一行的數據會從特殊的字節對齊地址開始。絕大多數編譯器會自動把變量和緩沖區放置在當前計算機架構優化的對齊地址上。OpenGL默認是4字節對齊的。在之前的例子
OpenGL支持放大,縮小,旋轉圖像。下面將舉例介紹這些像素的操作。下面的例子是從tga文件中讀取圖片並顯示,而且可以通過右鍵菜單來選擇圖像的顯示模式和保存圖片的快照到磁盤命名為screenshot.tga。完整的代碼示例如下:#include gl
紋理映射,是將紋理空間中的紋理像素映射到屏幕空間中的像素的過程。紋理映射是真實感圖像制作的一個重要部分,運用它可以方便的制作出極具真實感的圖形而不必花過多時間來考慮物體的表面細節。然而紋理加載的過程可能會影響程序運行速度,當紋理圖像非常大時,這種情況
紋理環境OpenGL是如何把紋理元素的顏色和幾何圖元的顏色結合起來的?是通過紋理環境的模式來控制。設置紋理環境模式的函數如下:void glTexEnvi(GLenum target, GLenum pname, GLint param);void
MipmappingMipmap是一個功能強大的紋理技術,它可以提高渲染的性能以及提升場景的視覺質量。它可以用來解決使用一般的紋理貼圖會出現的兩個常見的問題:閃爍,當屏幕上被渲染物體的表面與它所應用的紋理圖像相比顯得非常小時,就會出現閃爍。尤其當相機
輔助顏色一般情況下,我們設置紋理的環境為GL_MODULATE模式,在這種情況下,受到光照的幾何圖形會和紋理的顏色進行結合。正常情況下,OpenGL進行光照計算,並根據標准的光照模型進行單個片段的顏色計算。然後,再把片段的顏色乘以紋理的顏色,等到結合
立方體貼圖還有兩種紋理生成模式未介紹,GL_REFLECTION_MAP和GL_NORMAL_MAP,這兩種模式需要用到新的紋理目標:立方體貼圖。一個立方體貼圖被當做一個紋理來看待,它由六個正方形的2D圖像(必須是正方形)來組成立方體的六個面。下圖展
紋理組合器OpenGL的紋理組合器可以控制多重紋理的片段是如何組合的。一般情況下,我們可以簡單的為每個紋理單元設置一個紋理環境模式(GL_REPLACE,GL_DECAL,GL_ADD和GL_MODULATE),把每個紋理應用的結果添加到下一個紋理單
內部支持的表面 GLU庫中提供了一些二次曲面的支持。這些二次方程可以渲染球體,圓柱體,圓盤。這些函數有很大的靈活性,我們可以指定圓柱體的一端的半徑,然後讓另一端的半徑為0,這樣的話就能構建一個圓錐。我們還可以繪制一個有洞的圓盤。如下圖:這些
參數方程表現形式在中學的時候,我們都學習過直線的參數方程:y = kx + b;其中k表示斜率,b表示截距(即與y軸的交點坐標)。類似地,我們也可以用一個參數方程來表示一條曲線。1962年,法國工程師貝塞爾發明了貝塞爾曲線方程。關於貝塞爾曲線的詳細介