開發應用入門的
下面要講一些理論的東西了,請不要感到厭煩,因為如果沒有這些知識,我們的三維教程將很難進行下去。為了方便的描述三維場景中物體的旋轉、平移、縮放等空間變換操作,我們引入三維變換矩陣的概念。這是一個4X4的矩陣,當然單位矩陣的對角線上的值都是1了。看這貌似平凡的矩陣,里面卻蘊藏著無數的神奇。比如在笛卡爾坐標系中有一個空間點,坐標是10, 10, 10,現在你想把這一點平移5, -2, 8個單位,那么你只需要將變換矩陣最后一行的前三列的值為別賦為5、-2和8再將空間點的坐標做為一個4X1的矩陣,最后一列補0再與變換矩陣求積(什么?你不會算矩陣相乘?!我倒!),得到的4X1矩陣的前三列值便是變換過的空間點坐標的X、Y和Z。同樣的旋轉、縮放也是大致的方法,區別僅在于變換矩陣里不同位置的值代表不同的含義。
現在我們將開始繪圖。先確定一下視角:
// 設置模形矩陣
void SetModalMatrix( void )
{
glMatrixMode( GL_MODELVIEW );
glLoadIdentity( ); // 單位化矩陣
// 這個函數是在OnIdle里被調用的,所以我們用下面的代碼來實現物體的旋轉
// 一個很容易理解的概念是,你繞著物體轉和物體自己轉在某些簡單場景里的
// 的效果看起來是一樣的,所以我們通過矩陣運算讓眼睛點在一定高度做圓周
// 運動。知道圓的簡化方程是:(sinα* r)^2 + (cosα* r)^2 = r^2,所以代碼
// 很好理解。
static float fRadius = 0;
fRadius += 0.01f;
if ( fRadius M_PI * 2 )
{
fRadius = 0;
}
gluLookAt( cosf( fRadius ) * 30, sinf( fRadius ) * 30, 15.0,
0.0, 0.0, 0.0, // 向原點坐標看去
0.0, 0.0, 1.0 ); // 設置眼睛(攝影機)的方向向量,該向量表示眼表向上
}
// 設置透視矩陣
void SetProjMatrix( WORD wWidth, WORD wHeight )
{
// 此函數將在WM_SIZE時被調用,所以應該設置一下glViewPort
glViewport( 0, 0, wWidth, wHeight );
glMatrixMode( GL_PROJECTION );
相關熱詞: 飯后 水果 飲食 誤區 glLoadIdentity( );
// 這和照象機很類似,第一個參數設置鏡頭廣角度,第二個參數是長寬比,后面是遠近剪切。
gluPerspective( 45.0, (double)wWidth / (double)wHeight, 1.0, 1000.0 );
}
然后我們在OnDraw里調用下面的代碼:
// 先將上次渲染的殘留物清為背景色
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glBegin( GL_QUADS ); // 設置繪制模式,我們畫一個平面的四邊形
glVertex2i( 5, 5 );
glVertex2i( 5, -5 );
glVertex2i( -5, -5 );
glVertex2i( -5, 5 );
SwapBuffers( g_hDC ); // 交換前后緩沖,雙緩沖無閃爍
一品紅銀川治療子宮內膜炎多少錢
類風濕性關節炎患者疼痛怎么辦