nehe教程里頭,該課的內(nèi)容是利用多邊形來組成三維圖形.我只實現(xiàn)了一個利用三角形繪制四面體,而其中的正方體則是采用glut工具庫自帶的函數(shù)繪制的

#include "openglglut.h"


/**//**
** 使用四個三角形繪制成一個四面體,繞Y軸旋轉(zhuǎn)
** 使用glut工具庫繪制一個灰色正方體,繞XYZ軸旋轉(zhuǎn)
** nehe教程里頭是采用繪制正方體的6個面來繪制正方體的.
**/

GLfloat yRot=0; /**//** 四面體繞Y軸旋轉(zhuǎn)角度*/

GLfloat xRot=0; /**//** 正方體繞xyz軸旋轉(zhuǎn)角度*/
int main(int argc,char** argv)


{

createWindow("opengl lesson_5",&argc,argv); /**//** 初始化并創(chuàng)建窗口*/


glutDisplayFunc(glutDisplay); /**//** 注冊重繪函數(shù)*/

glutIdleFunc(glutIdle); /**//** 注冊空閑回調(diào)函數(shù)*/

glutReshapeFunc(glutResize); /**//** 注冊窗口調(diào)整函數(shù)*/

glutSpecialFunc(glutSpecial); /**//** 注冊特殊按鍵窗口*/

glutKeyboardFunc(glutKeyboard); /**//** 注冊鍵盤處理函數(shù)*/


InitOpenGL(); /**//** 初始化opengl*/


glutMainLoop(); /**//** 仿真循環(huán)*/
}

void glutDisplay(void) /**//** 重繪函數(shù)*/


{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);/**//** 清除顏色緩存和深度緩存*/

glLoadIdentity(); /**//** 初始化當(dāng)前矩陣為單位矩陣*/


glPushMatrix(); /**//** 保存當(dāng)前矩陣*/

glTranslatef(-1.5,0.0,-6.0); /**//** 往左移動和往屏幕內(nèi)部移動,繪制四面體*/

glRotatef(yRot,0.0,1.0,0.0); /**//** 四面體繞y軸旋轉(zhuǎn)yRot角度*/

glBegin(GL_TRIANGLES); /**//** 通過繪制四個三角形組成四面體*/

glColor3f(1.0f,0.0f,0.0f); /**//** 紅色*/

glVertex3f( 0.0f, 1.0f, 0.0f); /**//** 三角形的上頂點 (前側(cè)面)*/

glColor3f(0.0f,1.0f,0.0f); /**//** 綠色*/

glVertex3f(-1.0f,-1.0f, 1.0f); /**//** 三角形的左下頂點 (前側(cè)面)*/

glColor3f(0.0f,0.0f,1.0f); /**//** 藍色*/

glVertex3f( 1.0f,-1.0f, 1.0f); /**//** 三角形的右下頂點 (前側(cè)面)*/


glColor3f(1.0f,0.0f,0.0f); /**//**紅色*/

glVertex3f( 0.0f, 1.0f, 0.0f); /**//**三角形的上頂點 (右側(cè)面)*/

glColor3f(0.0f,0.0f,1.0f); /**//** 藍色 */

glVertex3f( 1.0f,-1.0f, 1.0f); /**//** 三角形的左下頂點 (右側(cè)面)*/

glColor3f(0.0f,1.0f,0.0f); /**//** 綠色*/

glVertex3f( 1.0f,-1.0f, -1.0f); /**//** 三角形的右下頂點 (右側(cè)面)*/


glColor3f(1.0f,0.0f,0.0f); /**//** 紅色*/

glVertex3f( 0.0f, 1.0f, 0.0f); /**//** 三角形的上頂點 (后側(cè)面)*/

glColor3f(0.0f,1.0f,0.0f); /**//** 綠色*/

glVertex3f( 1.0f,-1.0f, -1.0f); /**//** 三角形的左下頂點 (后側(cè)面)*/

glColor3f(0.0f,0.0f,1.0f); /**//** 藍色*/

glVertex3f(-1.0f,-1.0f, -1.0f); /**//** 三角形的右下頂點 (后側(cè)面)*/


glColor3f(1.0f,0.0f,0.0f); /**//** 紅色*/

glVertex3f( 0.0f, 1.0f, 0.0f); /**//** 三角形的上頂點 (左側(cè)面)*/

glColor3f(0.0f,0.0f,1.0f); /**//** 藍色*/

glVertex3f(-1.0f,-1.0f,-1.0f); /**//** 三角形的左下頂點 (左側(cè)面)*/

glColor3f(0.0f,1.0f,0.0f); /**//** 綠色*/

glVertex3f(-1.0f,-1.0f, 1.0f); /**//**三角形的右下頂點 (左側(cè)面)*/

glEnd(); /**//** 四面體繪制結(jié)束*/

glPopMatrix(); /**//** 恢復(fù)當(dāng)前矩陣為保持前*/


glTranslatef(1.5,0.0,-6.0); /**//** 往右移動和往屏幕內(nèi)部移動,繪制正方體*/

glRotatef(xRot,1.0,1.0,1.0); /**//** 正方體繞XYZ軸旋轉(zhuǎn)*/


glColor3f(0.5,0.5,0.5); /**//** 鑒于glut中提供了正方體的繪制*/

glutSolidCube(1.732); /**//** 故使用glut中方法繪制正方體*/

glutSwapBuffers();

}

void glutIdle(void) /**//** 回調(diào)函數(shù)*/


{

yRot+=0.5; /**//** 繞y軸旋轉(zhuǎn)角度遞增*/

xRot-=0.5; /**//** 繞x軸旋轉(zhuǎn)角度遞減*/

glutPostRedisplay(); /**//** 使得函數(shù)完成后進行窗口重繪*/
}

void glutKeyboard(unsigned char key,int x,int y)


{
switch(key)

{

case 27: /**//** Esc按鍵按下后退出程序 */
exit(0);
break;
default:
break;
}
}
最終顯示結(jié)果是:

末尾總結(jié):
opengl當(dāng)中,復(fù)雜的圖形總是通過最基本的圖元組成,當(dāng)然繪制起來也不見得會非常的簡單.通常很多復(fù)雜的模型等大多數(shù)是通過建模軟件生成的.
這節(jié)課當(dāng)中,并沒有多大的內(nèi)容,基本用到都是之前l(fā)esson當(dāng)中學(xué)習(xí)過的.
posted on 2009-07-17 18:24
米游 閱讀(547)
評論(0) 編輯 收藏 引用 所屬分類:
OpenGL/OSG