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

#include "openglglut.h"


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

GLfloat yRot=0; /**//** 四面體繞Y軸旋轉角度*/

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


{

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


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

glutIdleFunc(glutIdle); /**//** 注冊空閑回調函數*/

glutReshapeFunc(glutResize); /**//** 注冊窗口調整函數*/

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

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


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


glutMainLoop(); /**//** 仿真循環*/
}

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


{

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

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


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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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


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

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

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

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

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

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


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

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

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

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

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

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

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

glPopMatrix(); /**//** 恢復當前矩陣為保持前*/


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

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


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

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

glutSwapBuffers();

}

void glutIdle(void) /**//** 回調函數*/


{

yRot+=0.5; /**//** 繞y軸旋轉角度遞增*/

xRot-=0.5; /**//** 繞x軸旋轉角度遞減*/

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

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


{
switch(key)

{

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

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