前言在先前的章節中,我們已經討論OpenGL基本的一些渲染技術。這些基本的技巧足夠渲染簡單的圖像,然而在渲染精細的畫面逼真的畫面的時候(非常多的頂點和紋理),如果使用之前的方式渲染(立即模式)速度就很慢了,考慮到性能的原因(特別是實時渲染)我們需要以
頂點數組當我們有來自模型的大量數據的時候,使用顯示列表來對這些數據進行預編譯,需要遍歷這些頂點數據(一次一個頂點數據)把數據傳給OpenGL。依賴於頂點的數量,這會帶來潛在的性能損耗。而且這些數據不一定是靜態的,有可能在我們每次渲染的時候,我們需要對
有時我們不需要物體的許多細節,而只需要其外圍的輪廓來描繪物體大概的形狀比如物體的陰影。如果我們簡單的使用線框模式繪制一個立方體如下:下面介紹OpenGL生成輪廓的兩種方式。 多邊形偏移多邊形偏移是一個挺有用的技巧,有時會用來解決z-figh
本文通過包含許多頂點數據的復雜模型來比較使用glBegin()/glEnd立即模式,顯示列表,以及頂點索引數組的性能與內存。F-16 Thunderbird的飛機模型有3704個獨立的三角形,通過Deep Exporation工具的索引模式編制後,共
顯示列表可以快速簡單地優化立即模式(glBegin/glEnd)的代碼。在最壞的情況下,顯示列表的命令被預編譯存到命令緩沖區中,然後發送給圖形硬件。在最好的情況下,是編譯後放在圖形硬件中以減少傳輸的帶寬。顯示列表的優化根據實現的不同而有所不同,而且顯
有時我們不僅僅是渲染場景,而且還要與渲染的場景進行交互。大多數情況下是使用鼠標進行交互。注:viewing volume(可視區域,視景體) 選擇OpenGL的選擇模式允許你通過鼠標點擊屏幕,來選擇鼠標下面的物體。使用OpenGL的選擇特性
反饋像選擇一樣也是一種渲染模式,不會往幀緩沖區中寫數據,而是把信息填充到反饋緩沖區中。與選擇模式返回名稱棧不同,反饋的這些信息包括窗口坐標中經過變換的頂點數據,經過光照計算後的顏色數據,以及紋理數據和其他在光柵化圖元中需要使用的數據。通過調用glRe
在一個場景中,如果有有些物體被其他物體遮住了不可見。那麼我們就不需要繪制它。在復雜的場景中,這可以減少大量的頂點和像素的處理,大幅度的提高幀率。遮擋查詢就是允許我們判斷一組圖形在進行了深度測試之後是否可見。 遮擋查詢之前為了顯示遮擋查詢對性
之前我們介紹過簡單的把物體壓平到投影平面來制造陰影。但這種陰影方式有其局限性(如投影平面須是平面)。在OpenGL1.4引入了一種新的方法陰影貼圖來產生陰影。陰影貼圖背後的原理是簡單的。我們先把光源的位置當作照相機的位置,我們從這個位置觀察物體,我們
在傳統上,圖形硬件設計的目標是快速地執行相同的硬編譯的計算指令集。計算的步驟可以被跳過,參數可以被調整,但計算本身卻是固定的。所以舊式的GPU設計被稱為是“固定功能”的。現在的趨勢是朝著通用圖形處理器的方向發展。就像CPU一樣
變量GLSL的變量命名方式與C語言類似。變量的名稱可以使用字母,數字以及下劃線,但變量名不能以數字開頭,還有變量名不能以gl_作為前綴,這個是GLSL保留的前綴,用於GLSL的內部變量。當然還有一些GLSL保留的名稱是不能夠作為變量的名稱的。&nbs
以下內容只針對GLSL1.20的版本進行說明的,有些內置的變量在1.20之後,已經被廢棄了。初次實驗每個頂點著色器都至少輸出一個裁剪空間的位置坐標。光照、紋理坐標的生成和其他的一些操作是可選的。例如,你要創建了深度紋理,那你只需要最終的深度值,你就沒
圖像處理圖像處理是一種獨立於頂點著色器的特殊處理程序。在不使用片段著色器的情況下繪制場景之後,可以按照各種方式應用卷積核。為了保持著色器的簡潔,使用硬件加速,我們限制總卷積的大小為3X3.在示例程序中,調用glCopyTexIamge2D把幀緩沖區拷
Python pickle 模塊提供了把對象序列化的方法,對象會被序列化成ASCII的字符串,可以保存到文件。unpickle則可以從文件或字符中反序列化成對象。如下的兩個方法非常有用。pickle.dumps(obj[, protocol])Ret
JDK5引入了JMM新規范:JSR-133,引入了happens-before/可見性等概念,對synchronized/volatile/final等關鍵詞進行了語義定義。解決了:final變量在構造器中初始化的線程安全問題以及volatile變量
在網上看到了一個C語言計算日期間隔的方法,咋一看很高深,仔細看更高神,很巧妙。先直接代碼吧#include <stdio.h>#include <stdlib.h>int day_diff(int year_start, in
之前有個要把打開的文件清空,然後重新寫入的需求,但是使用 ftruncate(fd, 0)後,並沒有達到效果,反而文件頭部有了\0,長度比預想的大了。究其原因是沒有使用 lseek 重置文件偏移量,是我太天真了,以為清空文件就會從頭開始寫入。----
前言C++的多態依賴虛函數來實現。若類存在虛函數,則每一個類的實例都維護了一個地址,這個地址指向虛函數表。虛函數表中存放的是類中所有虛函數的地址。下面我們找出虛函數表的地址,從而獲得每個虛函數的地址,然後使用地址直接調用虛函數。正文1.空類的size
前言引用就是別名(alias)。所謂別名,就是對已存在的對象另起一個名字。本身含義並不難理解,但與其它概念一組合,就成了使用難點。再加上新標准提出了新的一種引用-右值引用,引用這一概念就變得更加難以理解和使用。正文隨著新標准(新標准往往就是新的技術)