gamma系數就是灰度系數,改變gamma系數的值就是相當于改變色階(圖象亮度強弱的指數標準),gamma值越少,圖象越亮.
調試d3d,將控制面板中D3DDebugging打開,進行調試,在選擇調試信息輸出等級的時候,可以選擇more來獲得更加多得詳細信息。
http://nexe.gamedev.net/directKnowledge/default.asp?p=Debugging。
Direct3D9: (INFO) :MemFini!
Direct3D9: (WARN) :Memory still allocated! Alloc count =
152Direct3D9: (WARN) :Current Process (pid) = 00000fb8
Direct3D9: (WARN) :Memory Address: 00c95988 lAllocID=
1 dwSize=000047f8, (pid=00000fb8)
這里是檢測出內存泄露了.
一般是內存信息什么的沒有releasing和deleting掉.
之前遇到的一個問題lock is not supported when multi-sampling is enabled是因為shader debugging打開了,之后關閉了,就沒有事情了。
剛才編譯hlsl的時候,發現了x3025錯誤,后來的dx版本要使用D3DXSHADER_ENABLE_BACKWARDS_COMPATIABLITY|D3DXSHADER_DEBUG才能編譯,特別是2008年的dx版本。
DX默認的是D3DFILL_SOLID,如果出現D3DFILL_WIREFRAME的情況一定要設置回去。
CD3DArcBall:允許你將用戶的輸入解釋為旋轉或者平移.我們所要做的是將鼠標消息傳遞給這個類,并且將視圖矩陣設為類的旋轉或者平移矩陣就可以了.
點乘: a.b = ||a|| *||b|| * cosA, 一般用來判斷為0,那么表明正交,>0,方向基本相同,<0,方向基本相反.使用點乘來計算投影.
給定兩向量v,n,將其分解為v平和v垂,分別平行于和垂直于n,并且滿足 v = v平+v垂,一般成平行分量v平為v在n 上的投影.
V平 = n * ||V平|| / ||n||.
cosA = ||V平||/||V|| cosA||V|| = ||V平||
V平= n*n*v/( ||n||*||n||).
叉乘得到的向量垂直于原來的兩個向量.
a *b指向該平面的正上方,垂直于a和b.
||a*b|| = ||a|| * ||b|| * sinA.
||a*b|| 也等于以a和b為兩邊的平行四邊形的面積.
如果a,b平行或任意一個為0,則a*b = 0,叉乘對零向量的解釋是它平行于任意其他向量,點乘的解釋是和任意其他向量垂直.
任意對角矩陣D,都有D轉置矩陣= D,包括單位矩陣.
DirectX使用的行向量.
v = xp+yq+zr,向量v就表示成p,q,r的線性變換了,向量p,q,r稱做基向量.這里基向量是笛卡爾坐標系
變換物體相當于以相反的量變換描述這個物體的坐標系.
2d里面是這樣設置的:
逆時針旋轉經常(不是必須)被認為是正方向,順時針方向是負方向.
繞x軸旋轉:
[ 1 0 0
0 cosA sinA
0 -sinA cosA]
繞y軸旋轉:
[cosA 0 -sinA
0 1 0
sinA 0 cosA]
繞z軸旋轉:
[ cosA sinA 0
-sinA cosA 0
0 0 1]
繞軸n旋轉角度A,那么獲得的矩陣是:
[nx*nx*(1-cosA)+cosA nx*ny*(1-cosA)-nz * sinA nx*nz*(1-cosA) + ny*sinA
nx * ny *(1-cosA) - nz *sinA ny*ny*(1-cosA)+cosA ny*nz*(1-cosA) - nx* sinA
nx * nz *(1-cosA)+ny * sinA ny * nz *(1-cosA) + nx* sinA nz*nz*(1-cosA)+cosA]
縮放:通過基向量構造矩陣,得到以單位向量n為縮放方向,k為因子的縮放矩陣:
s(n,k) = [ p] [ 1 + (k-1)nx2 (k-1)nxny (k-1)nxnz]
=
[ q] [ (k -1)nxny 1+(k-1)ny2 (k-1)nxnz]
[ r] [(k-1)nxnz (k-1)nzny 1+(k-1)nz2]
投影意味著降維操作,有一種投影方法是在某個方向上用零做縮放因子,這種情況下,所有點都被拉平至垂直的軸(2D)或平面(3D),這種類型的投影稱做正交投影,或者平行投影,因為從原來的點到投影點的直線相互平行.
n垂直于投影直線,而不是平行,3D中,向垂直于n的平面投影的矩陣如公式:
p(N) = [1-nx2 -nxny -nxnz]
[-nxny 1-ny2 -nynz]
[-nxnz -nzny 1-nz2]
鏡像: 將物體沿直線(2D中)或平面(3D中)翻折.
P(n) = [ 1-2nx2 -2nxny -2nxnz]
[-2nxny 1-2ny2 -2nynz]
[-2nxnz -2nzny 1-2nz2]
Hxy的意義是x,y坐標被坐標z改變
Hxy(s,t) = [1 0 0]
[0 1 0]
[s t 1 ]
Hxz(s,t) = [ 1 0 0]
[s 1 t]
[0 0 1]
Hyz(s,t) = [1 s t]
[0 1 0]
[0 0 1]
M物體->像機 = M物體->世界M世界->像機
P->像機 = P物體 M物體->像機
線形變換: 如果滿足下式,那么映射f(a)就是線性的:
f(a+b) = f(a) + f(b)
以及F(ka) = kf(a).
仿射變換: 線性變換后接著平移,因此仿射變換的集合是線性變換的超集.任何線性變換都是仿射變換,但不是所有仿射變換都是線性變換.
如果存在一個逆變換可以"撤消"原變換,那么該變換是可逆的.
如果變換前后兩向量夾角的大小和方向都不改變,該變換是等角.只有平移,旋轉和均勻縮放是等角變換.
等角變換將會保持比例不變.
平移,旋轉和鏡像是僅有的正交變換.長度,角度,面積,和體積都保持不變.
剛體變換只改變物體的位置和方向,不包括形狀,所有長度,角度,面積和體積都不變.平移和旋轉是僅有的剛體變換,鏡像并不被認為是剛體變換.
假設矩陣M有r行,c列,記法Mij表示從M中除去第i行和第j列后剩下的矩陣.顯然,該矩陣有r-1行,c-1列,矩陣Mij稱為M的余子式.