日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

LearningRecords

系統(tǒng) 1904 0

(1)枚舉默認(rèn)為unsigned int類型,我們可以手動(dòng)為枚舉指定類型,如:

      
        enum
      
       Attr : 
      
        char
      
      
{
ATTR_LV = 120 ,
};


(2)我們可以使用泰勒展開(kāi)式快速計(jì)算兩點(diǎn)間距離:

?

      
        int
      
       fastDistance2D( 
      
        int
      
       _nX1, 
      
        int
      
       _nY1, 
      
        int
      
       _nX2, 
      
        int
      
       _nY2 )
      
{
// this function computes the distance from _nX1, _nY1 to _nX2, _nY2 with 3.5% error
// first compute the absolute value of (_nX2 - _nX1), (_nY2 - _nY1)
int x = abs( _nX2 - _nX1 );
int y = abs( _nY2 - _nY1 );

// compute the minimum of x,y
int nMin = min( x, y );

// return the distance
return ( x + y - (nMin >> 1 ) - (nMin >> 2 ) + (nMin >> 4 ) );
}

float fastDistance3D( float _fX1, float _fY1, float _fZ1,
float _fX2, float _fY2, float _fZ2 )
{
// this function computes the distance from the _fX1, _fY1, _fZ1 to _fX2, _fY2, _fZ2
// make sure values are all positive
int x = static_cast< int >( fabs(_fX2 - _fX1) * 1024 );
int y = static_cast< int >( fabs(_fY2 - _fY1) * 1024 );
int z = static_cast< int >( fabs(_fZ2 - _fZ1) * 1024 );

// sort values
int nTemp = 0 ;
if ( y < x )
{
nTemp = x;
x = y;
y = nTemp;
}

if ( z < y )
{
nTemp = y;
y = z;
z = nTemp;
}

if ( y < x )
{
nTemp = x;
x = y;
y = nTemp;
}
//////////////////////////////////////////////////////////////////////// //

// compute distance with 8% error
int dist = ( z + 11 * (y >> 5 ) + (x >> 2 ) );
return ( static_cast< float >(dist >> 10 ) );
}


(3)sinx的泰勒級(jí)數(shù)表示如下:

?cosx的泰勒級(jí)數(shù)表示如下:

理想情況下,這些級(jí)數(shù)將是無(wú)限延伸的以達(dá)到最大的精確性,但是我們需要根據(jù)特定情況使用有限項(xiàng)來(lái)計(jì)算精確的結(jié)果,使用1到4項(xiàng)的sinx泰勒級(jí)數(shù)如下:

LearningRecords

當(dāng)x的值離原點(diǎn)越遠(yuǎn),我們就需要越多的項(xiàng)來(lái)計(jì)算精確的結(jié)果。一般來(lái)說(shuō),4項(xiàng)對(duì)于我們來(lái)說(shuō)足夠了,因?yàn)閟inx是以2pi為周期的函數(shù),因此我們可以把任意的x的值規(guī)范到-pi ~ pi之間再進(jìn)行計(jì)算。

(4)可以用柱坐標(biāo)或球坐標(biāo)將點(diǎn)從極坐標(biāo)系轉(zhuǎn)換到笛卡爾坐標(biāo)系中,如圖:

LearningRecords

(5)在著色器中計(jì)算頂點(diǎn)顏色時(shí),雖然著色器中所有的值都是浮點(diǎn)數(shù),但在頂點(diǎn)顏色離開(kāi)著色器時(shí),它會(huì)被裁剪到范圍0~1,并且受制于頂點(diǎn)顏色的格式。舉例來(lái)說(shuō),如果頂點(diǎn)顏色的格式是32位的,那么顏色的每個(gè)分量只能保存8位即256種不同的值。這也就是說(shuō),在0~1之間只存在256種不同的值,所以,當(dāng)顏色的變換小于1/256時(shí),將會(huì)出現(xiàn)偏差,如圖:

LearningRecords

有許多辦法可以解決這個(gè)問(wèn)題,例如將數(shù)據(jù)分別存在多個(gè)分量中,最終再重新組合。或者將數(shù)據(jù)存入紋理坐標(biāo)中,然后從一個(gè)預(yù)先定義的紋理中取出最終的數(shù)據(jù)等等。

(6)當(dāng)我們使用非均勻的縮放矩陣變換物體時(shí),必須注意物體法線的變換問(wèn)題,如圖:

LearningRecords

其中(a)表示原始的法線,(b)表示將非均勻的縮放矩陣變換應(yīng)用到法線上,此時(shí)我們發(fā)現(xiàn)法線不再垂直于表面,(c)表示應(yīng)用正確的變換矩陣到法線上,法線變換后仍繞垂直于表面。

這個(gè)正確的變換矩陣就是應(yīng)用于物體的變換矩陣的逆轉(zhuǎn)置矩陣。

現(xiàn)假設(shè)A矩陣是應(yīng)用到物體的世界變換矩陣,u向量代表頂點(diǎn)切線,n向量代表頂點(diǎn)法線,我們知道有:

然后我們把點(diǎn)積寫成向量乘矩陣的形式:

之后插入單位矩陣:

進(jìn)行適當(dāng)?shù)慕M合:

把后面的項(xiàng)進(jìn)行轉(zhuǎn)置操作:

再把向量乘矩陣寫成點(diǎn)積形式:

最后我們得到了A的逆轉(zhuǎn)置矩陣可以正確的變換法線。

(7)相對(duì)于2D紋理坐標(biāo),在立方體映射中我們使用一個(gè)從立方體原點(diǎn)發(fā)射的3D向量作為紋理坐標(biāo),立方體的某一面與該3D向量的交點(diǎn)即是我們所要采集的紋理元素。

現(xiàn)假設(shè)該3D向量為v(-3, -1, 2),由于x坐標(biāo)是最大的值(絕對(duì)值大小),所以該3D向量肯定與立方體的x軸負(fù)方向的面相交,同理,如果v(-1, 4, 2),那么肯定與立方體的y軸正方向的面相交。現(xiàn)在,我們將該3D向量的另外2個(gè)分量除以最大的那個(gè)分量的絕對(duì)值,即(-1, 2) / |-3| = (-1/3, 2/3),這樣將產(chǎn)生[-1, 1]之間的坐標(biāo)值,為了求得正確的紋理坐標(biāo)值,我們?cè)賹⒔Y(jié)果規(guī)范化到[0, 1]之間,即1/2(-1/3 + 1, 2/3 + 1) = (0.33, 0.83),這樣,就求得了用于從相交面采集紋理元素的2D紋理坐標(biāo)。

(8)平面方程為Ax + By + Cz = D,其中,A,B,C表示平面法線的3個(gè)分量,D表示平面到原點(diǎn)的有向距離。假設(shè)我們現(xiàn)在有P1,P2,P3點(diǎn),要求這3個(gè)點(diǎn)所在的平面方程,我們可以先求兩兩點(diǎn)之間的向量,如圖:

LearningRecords

然后,我們只需要隨意取V1,V2,V3向量中的2個(gè)進(jìn)行叉積,我們就可以得到平面的法線,這里要注意叉積的順序問(wèn)題。

接著,我們把求得的法線的3個(gè)分量分別代入A,B,C,然后,隨意取P1,P2,P3中的一點(diǎn)代入平面方程,就可以求得D。基本過(guò)程如下:

LearningRecords

LearningRecords


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 余江县| 衡东县| 长白| 彭州市| 广安市| 冕宁县| 阳信县| 肇源县| 葫芦岛市| 太仆寺旗| 界首市| 禄劝| 馆陶县| 武义县| 长丰县| 垫江县| 西盟| 满城县| 行唐县| 盐城市| 阜城县| 微山县| 奇台县| 铜陵市| 章丘市| 万山特区| 光山县| 南京市| 成安县| 象州县| 望奎县| 大港区| 安阳市| 麟游县| 准格尔旗| 崇明县| 玉屏| 白沙| 临漳县| 分宜县| 秦皇岛市|