Time of Update: 2018-12-06
前面我們用tessellation細分三角形或者四邊形,產生的細分點都是在三角形或四邊形平面內。本教程我們學習一下PN triangles(point normal triangles)的方法,把一個三角形細分為一個曲面。PN triangles的詳細介紹請參考:2001 paper by Vlachos et al ,下面我們簡單介紹一下PN triangles:
Time of Update: 2018-12-06
原帖地址:http://ogldev.atspace.co.uk/www/tutorial08/tutorial08.html 縮放矩陣比較簡單,它的目的就是在三個軸(x,y,z)方向,對物體長度進行縮放(或者說,對頂點在三個軸的分量進行縮放),當然也可以選擇某個軸方向來縮放。對物體進行縮放的原因主要是用來匹配世界空間不同物體的大小,因為三維物體建模都是在模型空間,通常(x,y,z)的範圍都是(0,1),而世界空間中,物體有大有小,比如小樹和大樓,這就需要我們對這些模型進行縮放操作。
Time of Update: 2018-12-06
本章我們用一個billboard的實現來學習D3D11中的GS。 在VS shader中,我們輸入的是頂點及頂點參數,輸出的也是頂點及參數,在GS shader中,我們輸入的是體元(primitive,可以是點,線,三角形等等,凡是D3D11中允許的體元都可以), 輸出頂點、體元資訊以及相關參數。 如下面兩個圖,左邊對一個三角形做vs操作,則會對三個頂點v1,v2,v3分別執行頂點操作,右圖對三角形做gs操作,則一整個三角形做為輸入,輸出則為一個四面體(增加了3個三角形)。
Time of Update: 2018-12-06
五 、EQAA/CSAA EQAA(enhanced quality AA)和CSAA(coverage sample AA)其實是同樣的採樣技術,EQAA是AMD的實現,CSAA是NV的實現,下面我以EQAA為例看看這兩種AA的原理: 在MSAA中,每個採樣都有一個sample color緩衝相對應,這樣在AA數目比較大的時候,比如16XMSAA,對memory的需求很大,為了節省記憶體頻寬,就出現了EQAA/CSAA這些基於覆蓋採樣(coverage
Time of Update: 2018-12-06
我們知道,D3D11中按Frame來渲染物體,每個Frame中又可能包含若干個primitive,如下面的所示: gpu在實際渲染中,會按幀來渲染,比如frame0中,有兩個primitive(三角形),經過vs以後,PA(primitive assemble) block會進行體元裝配,然後進行光柵化操作,光柵化操作時候,會比較depth buffer的值。因為紅色的三角形面的z值更小,所以它會覆蓋黑色三角形一部分。
Time of Update: 2018-12-06
原文地址:http://ogldev.atspace.co.uk/www/tutorial02/tutorial02.html 通常寫OpenGL程式時候,我們都需要glew庫,該庫封裝了OpenGL的各種擴充,便於我們使用。 我們可以在main函數中調用glew初始化函數,之後就可以查詢opengl各種擴充能否使用了,對於能夠使用的函數,可以動態載入。 在這篇教程中,我們首先瞭解一下頂點緩衝對象(VBO,vertex buffer
Time of Update: 2018-12-06
原帖地址:http://ogldev.atspace.co.uk/www/tutorial07/tutorial07.html 本章我們來學習一下,物體的旋轉。所謂旋轉,就是一個點,繞某個固定的軸轉動一定的角度。在笛卡爾座標系中,我們繞某個主軸轉動時候,會保持該軸決定的分量不變,比如繞z軸旋轉,z座標分量不變,x,y分量變化,所以又稱繞xy平面旋轉,當然,我們也可以繞任意向量進行旋轉操作。我們通過下面的圖來瞭解一下旋轉矩陣是如何產生的?沿著圓把頂點從位置(x1,y1)移動到(x2,y2
Time of Update: 2018-12-06
通常的DRAM記憶體條的模樣如,整個記憶體條稱作DIMM或者chip,上面的每個小黑塊表示一個bank。 主板上,可能有多個記憶體插槽,這樣可以插好多個記憶體條,就是多個DIMM記憶體條的側視圖:一個記憶體條有1個或2個rank,2個rank的記憶體條是指雙面記憶體,就是記憶體條的2面都有bank存在,是記憶體條的俯視圖: 對於DDR3來說,通常一個DIMM有8個bank,而GDDR5有16個bank。在一個bank內,行列的交叉點表示1bit,如所示:
Time of Update: 2018-12-06
現在,我們開始寫一個簡單的OpenCL程式,計算兩個數組相加的和,放到另一個數組中去。程式用cpu和gpu分別計算,最後驗證它們是否相等。OpenCL程式的流程大致如下:下面是source code中的主要代碼: int main(int argc, char* argv[]) { //在host記憶體中建立三個緩衝區 float *buf1 = 0; float *buf2 = 0;
Time of Update: 2018-12-06
本教程中,我們建立2個model class,SphereModelClass以及CylinderModelClass,分別用來表示球形和錐形物體。程式執行後的介面如下:線框模式介面如下:從線框模式可以看出,球形是由三個因素決定:半徑、經度線、緯度線。 在SphereModelClass.cpp中,我們看到,初始化頂點緩衝和索引緩衝的函數為:InitializeBuffers(ID3D11Device* device, float radius, int numSlices,
Time of Update: 2018-12-06
histogram翻譯成中文就是長條圖,在電腦影像處理和視覺技術中,通常用histogram來進行映像匹配,從而完成track,比如meanshift跟蹤演算法中,經常要用到映像的長條圖。
Time of Update: 2018-12-06
本章教程內容主要來自:http://ogldev.atspace.co.uk/www/tutorial01/tutorial01.html使用OpenGL之前,請先安裝和設定好FreeGlut和glew, :http://freeglut.sourceforge.net/http://glew.sourceforge.net/ 原教程源碼:http://ogldev.atspace.co.uk/ogldev_win.zip
Time of Update: 2018-12-06
TS中產生細分後頂點的u,v,{w}座標,我們根據控制點和u,w,{w}座標產生新的頂點位置,在前面四邊形的細分中,我們用了雙線性差值的方法,得到新的頂點位置,這些新頂點位置都在一個平面上。在本教程中,我們使用參數方程,可以產生多邊形,在tess factor增大的情況下,得到近似的球體。 DS中產生新頂點的代碼為: //頂點在現在表面的位置 float3 position = float3(0.0,0.0,0.0);
Time of Update: 2018-12-06
從今天開始學習OpenCL…… 因為老狼的顯卡是AMD 5xx的redwood,所以下面先介紹OpenCL APP(Accelerated Parallel
Time of Update: 2018-12-06
原文地址:http://ogldev.atspace.co.uk/www/tutorial03/tutorial03.html 本教程是一個很短的教程,主要內容是在教程2基礎上渲染一個三角形。 在前面一個教程中,我們在歸一化的裁剪空間中定義一個頂點,這樣就省去一些座標變化操作,但不能省去的操作是視口變化。我們從z軸正方向負方向看去,裁剪空間類似的樣子,裁剪空間盒子中的三維物體先投影到該平面上,然後通過視口變化映射到螢幕空間,點(-1.0,1.0)被映射到螢幕的左上方,(-1.
Time of Update: 2018-12-06
nnd,以前發的這篇教程怎麼沒有了?是我自己誤刪除了,還是被系統刪除了?找不到存稿了,沒有心情再寫一遍了。 簡單說一下,本篇教程就是實現一個水面的動畫,主要是利用動態頂點緩衝,在每一幀都改變頂點的值,從而實現水面的動畫。主要參考的是《introduction to 3D game programming with d3d10》這本書,但D3D10和D3D11的動態緩衝實現有所改變。具體演算法就不再說了,大家可以參考:Mathematics for 3D Game Programming
Time of Update: 2018-12-06
在篇日誌中,我們學習一下在D3D11中,如何啟用aa(反鋸齒)功能,提高渲染品質,並瞭解一下硬體反鋸齒的原理。首先我們先回顧一下採樣和濾波的概念,然後瞭解在D3D11中,如何啟用aa(anti-aliasing)功能,最後是SSAA/MSAA/EQAA/CSAA幾種硬體aa的原理。一、採樣和濾波 採樣(sampling)和filter(濾波)是訊號處理中的概念。所謂sampling,就是把連續的訊號離散化,而filter就是根據離散化後的訊號恢複原始訊號的過程。
Time of Update: 2018-12-06
在myTutorialD3D11_40中,我們在情境中再添加一個box,並把box放在水裡,實現半透明的效果。如所示: 我們要特別注意一點的就是情境中物體的渲染次序,先渲染山穀、第二個box,第三個水。box和水的順序不能顛倒,顛倒後的效果如下,沒有了透明的效果:完整的代碼請參考:工程檔案myTutorialD3D11_40代碼下載:http://files.cnblogs.com/mikewolf2002/d3d1139-49.ziphttp://files.cnblogs.
Time of Update: 2018-12-06
現在我們利用上一篇教程的方法,來統計一副RGBA映像中,有多少個像素點(該像素點滿足R, G, B, A任意分量>=5)?我考慮的方法是建立256 bin的長條圖,對於一個像素,求max(R, G,B,A),用該值決定該像素點進入那個bin,這樣求出長條圖後,width*height - hostBin[0] - hostBin[1] - hostBin[2] - hostBin[3] - hostBin[4],即為我們要的結果。
Time of Update: 2018-12-06
到現在為止,我們的TextureClass初始化函數非常簡單,說白了就是一行代碼:result = D3DX11CreateShaderResourceViewFromFile(device, filename, NULL, NULL, &m_texture, NULL); 這行代碼裝入一個dds檔案,而且其它選項都設定為NULL,這時系統會使用裝入檔案本身的格式,比如我們裝入的tong.dds, 前面我們為其產生了mipmaps層,並且設定surface格式為DXT5