随笔-38  评论-23  文章-0  trackbacks-0

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.0f1.0f0.0f);          /** 三角形的上顶点 (前侧面)*/
        glColor3f(
0.0f,1.0f,0.0f);              /** 绿色*/
        glVertex3f(
-1.0f,-1.0f1.0f);          /** 三角形的左下顶点 (前侧面)*/
        glColor3f(
0.0f,0.0f,1.0f);              /** 蓝色*/
        glVertex3f( 
1.0f,-1.0f1.0f);          /** 三角形的右下顶点 (前侧面)*/

        glColor3f(
1.0f,0.0f,0.0f);                /**红色*/
        glVertex3f( 
0.0f1.0f0.0f);            /**三角形的上顶点 (右侧面)*/
        glColor3f(
0.0f,0.0f,1.0f);              /**  蓝色 */
        glVertex3f( 
1.0f,-1.0f1.0f);          /** 三角形的左下顶点 (右侧面)*/
        glColor3f(
0.0f,1.0f,0.0f);              /** 绿色*/
        glVertex3f( 
1.0f,-1.0f-1.0f);         /** 三角形的右下顶点 (右侧面)*/

        glColor3f(
1.0f,0.0f,0.0f);              /** 红色*/
        glVertex3f( 
0.0f1.0f0.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.0f1.0f0.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.0f1.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 米游 阅读(514) 评论(0)  编辑 收藏 引用 所属分类: OpenGL/OSG

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理