青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

concentrate on c/c++ related technology

plan,refactor,daily-build, self-discipline,

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  37 Posts :: 1 Stories :: 12 Comments :: 0 Trackbacks

常用鏈接

留言簿(9)

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

索引緩沖器:制作索引次序,并且根據這個索引次序將所有繪制的圖行進行編碼,這樣有兩個好處:
1)按照索引次序可以減少渲染頂點數目,這樣可以提高性能效率。
2)索引緩沖器中的索引可以提供cache的功能,可以cache住最近用于變換和光照的頂點數據,下次使用的時候,就不用再處理了。并且在GPU里面是不知道abc, bcd里面的bc是一致的,這樣除非憑借索引。一般處理的方式是盡量減少數據量,可以通過改變繪制圖元的方式和頂點結構的組織格式(SetFVF,SetVertexDeclaration)。
關于繪制圖元的方式(兩個三角形):
1)如果是triangle list表示就是:
abcbcd
2)如果是triangle strip,就是
abcd
3)如果是index buffer + triangle list就是
abcd
012,123
4)如果是 index buffer + triangle strip就是
abcd
0123

頂點結構和索引值結構是根據繪制圖元的方式來決定的,比如選擇triangle strip的頂點設置跟triangle list的頂點設置就有不同.并且索引緩沖的設置是按照順時針(DX)的形式進行編號的.

在使用圖形渲染頂點的時候,如果對模型的頂點布局和頂點渲染方式有不清楚的,這樣可以通過美工來獲得這種信息,之前在想一架飛機的時候,都沒有將模型構建起來,但是花了不少的精力在那上面,后面才想到,其實沒必要將心思全部花在那里的,而可以將心思放在具體的模型導入上面,在美術那邊就可以獲得頂點的詳細信息,這樣有助于解決問題的關鍵,頂點布局在美術那邊會得到一個比較完整的體現,而程序這邊只需要知道頂點的結構就好了,比如詳細的頂點結構,頂點在導入模型里面的布局等等,諸如此類的。另外還有一個點的是:其實研究頂點的話,可以將之放到模型里面去分析,這樣的話,可以減少單獨設計頂點帶來的困擾。

攝像坐標系就是定義在攝像機的屏幕可視區域,在攝像機的坐標系中,x軸向右,z軸向前(朝向屏幕內,或者攝像機方向),y軸向上(不是世界的上方,而是攝像機的上方),

為了簡化世界坐標系到物體坐標系的轉換,人們引入了一種新的坐標系,稱為慣性坐標系,意思是世界坐標系到物體坐標系的半途,慣性坐標系的原點跟物體坐標系的原點重合,但是慣性坐標系的軸平行于物體坐標系的軸。可以用慣性坐標系來做為物體坐標系與世界坐標系的中介:用旋轉能將物體坐標系轉換到慣性坐標系,用平移可以將慣性坐標系轉換到物體坐標系。
物體坐標系轉換成世界坐標系要經歷的步驟:
1)將物體坐標順時針45度,轉換到慣性坐標系。
2)將慣性坐標系向下向右旋轉到世界坐標系。
3)這樣物體坐標軸順時針45度,向下向下向右旋轉到世界坐標系。

嵌套坐標系:定義了一種層次的,或者樹狀的坐標系.世界坐標系就是這個樹的根。

對于許多向量,我們只關心它的方向而不關心她的大小,在這個情況下使用單位向量非常重要。(D3DXVec3Normalize)
一般來說,點乘描述兩個向量的相似程度。點乘等于向量大小以及向量的cos值的積。
幾何意義在于:a的長度與b在a上的投影長度的乘積,或者是b的長度與a在b上投影長的乘積,它是一個標量,而且可正可負,相互垂直的向量內積為0。

叉積描述的是一個向量垂直于所在的平面的兩個向量(D3DXVec3Cross)。
叉積最重要的應用在于創建垂直于平面,三角形,以及多邊形的向量。

p,q,r定義為x,y,z軸上面的單位向量。那么任意一個向量都可以表示為v = xp + yq + zr; 并且將,p,q,r這些稱為基向量,這里基向量就是卡笛爾坐標。
一個坐標系可以用任意三個基向量表示,當然這三個基向量要線形無關。

矩陣的每一行都能解釋為轉換后的基向量。

可以通過想象變換后的坐標系的基向量來想象矩陣。這些基向量在2d中構成“L”形狀,在3d中構架成三角架形狀。

// 重新產生基向量
    D3DXVec3Normalize(&vLook, &vLook);    // 歸一化向量,獲得look方向
 D3DXVec3Cross(&vRight, &vUp, &vLook);  // 獲得up/look法線所在平面的垂直法線
    D3DXVec3Normalize(&vRight, &vRight);    // 歸一化向量,獲得right方向
 D3DXVec3Cross(&vUp, &vLook, &vRight); // 獲得right/look法線所在平面的垂直法線
    D3DXVec3Normalize(&vUp, &vUp);// 歸一化向量,獲得up方向
     // Matrices for pitch, yaw and roll
// 用歸一化后的向量和一個標量(角度)旋轉后獲得一個旋轉矩陣。
 D3DXMATRIX matPitch, matYaw, matRoll;
 D3DXMatrixRotationAxis(&matPitch, &vRight, fPitch );
 D3DXMatrixRotationAxis(&matYaw, &vUp, fYaw );   
  D3DXMatrixRotationAxis(&matRoll, &vLook, fRoll);
 
 // rotate the LOOK & RIGHT Vectors about the UP Vector
 // 用一個矩陣來變換一個3D向量.
 D3DXVec3TransformCoord(&vLook, &vLook, &matYaw);
 D3DXVec3TransformCoord(&vRight, &vRight, &matYaw);

 // rotate the LOOK & UP Vectors about the RIGHT Vector
 D3DXVec3TransformCoord(&vLook, &vLook, &matPitch);
 D3DXVec3TransformCoord(&vUp, &vUp, &matPitch);

 // rotate the RIGHT & UP Vectors about the LOOK Vector
 D3DXVec3TransformCoord(&vRight, &vRight, &matRoll);
 D3DXVec3TransformCoord(&vUp, &vUp, &matRoll); 

D3DXVECTOR3 *WINAPI D3DXVec3TransformCoord(      

    D3DXVECTOR3 *pOut,
    CONST D3DXVECTOR3 *pV,
    CONST D3DXMATRIX *pM
);
其原理是pOut' = pV' * pM ,因為pM是4*4矩陣,這樣的話,pV' = [pV 1] ,并且之后求得出來的結果向量是pOut'去掉z軸(w)得到pOut = [pOut'.x/w pOut'y/w pOut'z/w].
另外D3DXVec3TransformNormal的做法是差不多的,只是其中一項w被設置為0.

// 設置照相機矩陣,位置和方向。
static D3DXVECTOR3 vCameraLook=D3DXVECTOR3(0.0f,0.0f,1.0);
 static D3DXVECTOR3 vCameraUp=D3DXVECTOR3(0.0f,1.0f,0.0f);
 static D3DXVECTOR3 vCameraPos=D3DXVECTOR3(0.0f,0.0f,-5.0f);
 D3DXMATRIX view;

 D3DXMatrixLookAtLH (&view,&vCameraPos,  // pEye = Position
       &vCameraLook,  // pAt
       &vCameraUp);  // pUp 
 m_pd3dDevice->SetTransform(D3DTS_VIEW, &view);
POSITION: 定義了物體的位置
LOOK: 定義了物體所指的方向
RIGHT: 定義了物體的右側指向
UP:僅在物體會繞著LOOK向量旋轉時才是必需的,表示哪個方向對于物體來說是"上"或"下"。
pitch - RIGHT
roll - LOOK
yaw - UP
LOOK移動- 改變POSITION.

  m_pd3dDevice->SetTransform(D3DTS_WORLD, &m_pObjects[0].matLocal );

  設置渲染紋理內容。
  m_pd3dDevice->SetTexture( 0, m_pTexture );
  m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
  m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_SELECTARG1 );

  // Passing an FVF to IDirect3DDevice9::SetFVF specifies a legacy FVF with stream 0.
// 設置頂點格式
  m_pd3dDevice->SetFVF(FVF ); 
// 將頂點緩沖器綁定到設備數據流。
  m_pd3dDevice->SetStreamSource( 0, m_pVB, 0, sizeof(VERTEX) );
// 設置索引數據
  m_pd3dDevice->SetIndices( m_pIB ); 
 // 繪制
  m_pd3dDevice->DrawIndexedPrimitive( D3DPT_TRIANGLELIST,
           0,
           0,
           16,  // number of vertices
           0,
           10); // number of primitives

在旋轉向量之前,必須重新歸一化,因為要使向量相互垂直。
D3DXQuaternionRotationYawPitchRoll: 用給定的yaw, pitch, roll來構建四元數。
D3DXMatrixRotationQuaternion: 用四元數來構建旋轉。

Qx = [cos(yaw/2) (sin(yaw/2),0,0)]
Qy = [cos(pitch/2) (0, sin(pitch/2),0)]
Qz = [cos(roll/2) (0,0,sin(roll/2))]

D3DXMatrixLookAtLH對于構建一個跟隨式照相機是很有幫助的。

可以使用四元數的方式執行旋轉向量:
 fRoll = fPitch = fYaw = 0.0f;
    D3DXVECTOR3 vPos(0.0f, 0.0f, 0.0f);
    static D3DXMATRIX matView  = D3DXMATRIX(1.0f, 0.0f, 0.0f, 0.0f,
         0.0f, 1.0f, 0.0f, 0.0f, 
         0.0f, 0.0f, 1.0f, 0.0f, 
         0.0f, 0.0f,-5.0f, 1.0f);
// 更新位置和觀察矩陣
 D3DXMATRIX matR, matTemp;
// 用yaw/pitch/roll來構建四元數。
 D3DXQuaternionRotationYawPitchRoll (&qR, fYaw, fPitch, fRoll); 
// 用四元數來構建旋轉矩陣
 D3DXMatrixRotationQuaternion (&matR, &qR);
//  應用旋轉矩陣     
 D3DXMatrixMultiply (&matView, &matR, &matView);
// 平移矩陣
 D3DXMatrixTranslation (&matTemp, vPos.x, vPos.y, vPos.z);
// 應用旋轉矩陣
 D3DXMatrixMultiply (&matView, &matTemp, &matView);
// 為了繞任意點所做的旋轉為線性的。
 D3DXMatrixInverse (&matTemp, NULL, &matView);    

 m_pd3dDevice->SetTransform(D3DTS_VIEW, &matTemp );

一個窗口應用程序中視口的大小被定義為該窗口客戶區的大小,而一個全屏應用程序中視口的大小則定義為屏幕的分辨率。
視口用法: 通過GetViewPort可獲取視口數據,以視口的大小和提供給深度緩沖器的MinX,MinY來填充一個視口結構。應在DrawPrimitive*命令之前用SetViewPort來設置視口。在完成繪制后,應恢復原來的視口,以便在一次渲染中清理整個渲染目標,以及通過Direct3D框架提供的字體類來繪制文字。

渲染場景最有效的方法是僅渲染那些可以被觀察者看到的像素。如果渲染了那些看不到像素,那么這種多余的操作稱為覆繪。
深度緩沖器儲存著顯示器中每個像素的深度信息,在顯示虛擬世界之前,應當清除深度緩沖器中的每個像素,將它們設置為最遠可能的深度值。在光柵化時,深度緩沖算法會獲取當前多邊形所涉及的每個像素的深度。如果一個像素比先前存儲在深度緩沖器中的像素更接近于照相機,則較近的像素被顯示出來,并且這個新的深度值也將覆蓋深度緩沖器中原先的內容,每次繪制多邊形的像素時都執行一遍這個過程。

顏色緩沖器存儲了稍后將要繪制到屏幕上的內容。深度緩沖器的每個像素通常都是16位或24位。深度精度取決于深度緩沖器的位數。
W緩沖器:減少了Z緩沖器在處理遠距離物體時遇到的問題。可以通過這些獲得相關支持:
m_pd3dDevice->SetRenderState(D3DRS_ZENABLE,D3DZB_USEW).
以及
if (d3dCaps.RasterCaps & D3DPRASTERPS_WBUFFER)來判斷是否支持W buffer.

如何使用四元數來旋轉照相機?
通過偏航,俯仰,以及橫滾來構建一個四元數,然后把它轉換成一個矩陣,最后求該矩陣的逆矩陣

只有正方形的矩陣(方陣)才能求逆,因此當我們說矩陣求逆,那么它就是方矩陣
并不是每個方陣都有逆矩陣。

平面其實可以用法向量n和常數d來表示。判斷點和平面的關系:

    假如n·p + d = 0,那么點p與平面共面。

    假如n·p + d >0,那么點p平面的前面且在平面的正半空間里。

    假如n·p + d <0,那么點p平面的背面且在平面的負半空間里。

創建平面的方法:
1)通過點和法線來創建相關的平面,D3DXPlaneFromPointNormal。
2)通過平面上面的三點,p0,p1,p2來表示,D3DXPlaneFromPoints。


http://www.shnenglu.com/shadow/articles/2807.html
http://www.shnenglu.com/lovedday/archive/2008/04/04/46264.html

posted on 2008-09-15 08:32 jolley 閱讀(598) 評論(0)  編輯 收藏 引用
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美电影免费观看高清| 亚洲福利视频二区| 日韩亚洲欧美综合| 亚洲国产精品99久久久久久久久| 午夜久久久久久久久久一区二区| 国产精品欧美精品| 久久xxxx| 欧美a级在线| 亚洲一卡久久| 欧美在线观看视频| 亚洲高清网站| 99国产精品久久久久久久久久 | 欧美黄色日本| 亚洲图片在线| 久久精彩免费视频| 亚洲美女视频在线观看| 亚洲自拍都市欧美小说| 亚洲二区三区四区| 一区二区高清在线观看| 激情综合五月天| 亚洲精品欧美精品| 国产一区日韩一区| 亚洲毛片在线观看| 激情亚洲网站| 中国成人在线视频| 在线观看91精品国产麻豆| 99视频超级精品| 在线观看欧美一区| 亚洲小说春色综合另类电影| 亚洲国产精品电影在线观看| 亚洲夜间福利| 99re66热这里只有精品3直播| 午夜精品久久久久久久久久久| 亚洲精品乱码久久久久久蜜桃91| 亚洲一区视频在线| 亚洲精品日韩精品| 久久精视频免费在线久久完整在线看 | 亚洲一区二区三区三| 亚洲激情网站免费观看| 亚洲欧美日韩久久精品| av成人天堂| 蜜桃伊人久久| 久久综合伊人77777麻豆| 国产精品久久久久久久久免费桃花 | 国产精品丝袜久久久久久app| 91久久精品国产91性色tv| 亚洲午夜av在线| 日韩视频在线你懂得| 久久乐国产精品| 欧美一区二区三区啪啪| 欧美区高清在线| 欧美www在线| 伊人男人综合视频网| 欧美一级欧美一级在线播放| 午夜精品婷婷| 国产精品ⅴa在线观看h| 亚洲免费观看在线视频| 亚洲人成亚洲人成在线观看| 久久裸体艺术| 美女脱光内衣内裤视频久久网站| 国产一区二区三区成人欧美日韩在线观看 | 亚洲午夜视频在线观看| 亚洲欧美精品suv| 欧美日韩一区二区精品| 日韩一级黄色av| 99视频精品全部免费在线| 欧美精品在线播放| 亚洲另类自拍| 亚洲综合国产精品| 国产精品免费久久久久久| 亚洲与欧洲av电影| 久久精品国产999大香线蕉| 国产香蕉97碰碰久久人人| 欧美一级免费视频| 麻豆成人91精品二区三区| 亚洲国产精品黑人久久久 | 亚洲午夜av在线| 午夜日韩激情| 韩国成人理伦片免费播放| 久久精品一级爱片| 亚洲国产精品国自产拍av秋霞| 日韩手机在线导航| 国产精品国产三级国产aⅴ无密码| 亚洲一区在线免费观看| 久久精品一区二区三区中文字幕| 激情国产一区二区| 欧美激情精品久久久久久免费印度| 亚洲精品一线二线三线无人区| 亚洲欧美久久久| 怡红院精品视频在线观看极品| 欧美成人精品1314www| 一本色道久久综合| 久久黄色级2电影| 亚洲黄色一区| 国产精品欧美久久| 久久亚洲一区二区| av成人免费在线| 久久综合伊人77777尤物| 一区二区三区高清| 国产视频一区免费看| 欧美激情久久久久| 午夜精品av| 91久久久久久久久| 久久久国产亚洲精品| 日韩视频一区二区三区在线播放免费观看 | 亚洲人久久久| 久久久噜噜噜久久| 久久国产精品一区二区| 久久久精品999| 日韩亚洲视频在线| 黄色精品一区| 国产精品久久久99| 欧美激情视频一区二区三区在线播放| 亚洲天堂黄色| 亚洲精品一区二区在线观看| 欧美 日韩 国产在线| 欧美一区二区三区四区夜夜大片 | 亚洲精品久久在线| 韩国成人福利片在线播放| 国产精品日韩在线观看| 欧美激情亚洲综合一区| 久久精品国产亚洲高清剧情介绍| 一区二区三区|亚洲午夜| 欧美激情在线狂野欧美精品| 久久久一二三| 久久av一区二区三区漫画| 亚洲性感激情| 夜夜嗨av一区二区三区中文字幕 | 欧美国产国产综合| 狼狼综合久久久久综合网| 久久aⅴ国产紧身牛仔裤| 亚洲综合视频在线| 亚洲一区二区免费视频| 中文一区二区| 在线中文字幕一区| 在线视频日本亚洲性| 一区二区三区高清不卡| 在线视频精品一区| 亚洲视频一区| 亚洲伊人伊色伊影伊综合网| 亚洲影院色无极综合| 亚洲综合电影| 亚洲免费在线| 欧美一级理论片| 久久动漫亚洲| 久久久夜夜夜| 欧美国产日韩二区| 亚洲国产一区二区视频| 亚洲三级影院| 一本综合久久| 亚洲欧美日韩天堂| 欧美一区二区三区在线| 久久精品免费播放| 另类亚洲自拍| 欧美日韩国产黄| 国产精品入口| 在线播放豆国产99亚洲| 亚洲精品一区二| 亚洲一区久久久| 欧美一区二区三区四区在线观看 | 99在线热播精品免费99热| 亚洲五月六月| 久久精品综合一区| 欧美成人在线免费观看| 亚洲看片免费| 亚洲免费在线视频| 久久中文久久字幕| 欧美日韩在线另类| 国产一区二区日韩精品| 亚洲精品中文字幕有码专区| 亚洲一区二区四区| 久久婷婷一区| 亚洲精品字幕| 久久成人精品一区二区三区| 欧美mv日韩mv亚洲| 国产精品区一区二区三区| 在线观看欧美| 亚洲一区二区在线免费观看| 老色鬼精品视频在线观看播放| 最新国产拍偷乱拍精品| 99视频精品在线| 亚洲国语精品自产拍在线观看| 你懂的视频欧美| 亚洲私人影吧| 免费视频亚洲| 国产美女搞久久| 99re6热只有精品免费观看| 久久久精品国产一区二区三区| 亚洲激情偷拍| 久久精品国产成人| 国产精品乱码妇女bbbb| 亚洲精品在线二区| 久久日韩精品| 亚洲专区一区二区三区| 欧美啪啪一区| 亚洲高清视频一区二区| 久久偷看各类wc女厕嘘嘘偷窃| 这里只有精品视频在线| 欧美黄色免费网站| 136国产福利精品导航网址应用 |