Shuffy

不断的学习,不断的思考,才能不断的进步.Let's do better together!
posts - 102, comments - 43, trackbacks - 0, articles - 19

《基于MFC的OpenGL编程》Part 8 Colors

Posted on 2010-03-31 20:35 Shuffy 阅读(134) 评论(0)  编辑 收藏 引用 所属分类: MFC,OpenGL
     OpenGL支持两种颜色模式:RGBA和颜色索引模式,本文关注于前者。

Smooth Shading and Flat Shading  

When Smooth Shading is specified, the color values are interpolated between vertices. If Flat Shading is specified, one vertex is selected as being representative of all the vertices, thus the entire primitive is displayed using one single color. 

一个简单Demo

1,CCY457OpenGLView.h中加入如下旋转控制变量:

     GLfloat m_xRot, m_yRot;//绕x,y轴旋转的角度,随时间不断变化

 并在构造函数中初始化:

CCY457OpenGLView::CCY457OpenGLView()
{
    m_xRot 
= 0.0f;
    m_yRot 
= 0.0f;
}

2,在OnTimer函数中,修改绕x,y轴旋转的角度值

void CCY457OpenGLView::OnTimer(UINT nIDEvent) 
{
    m_xRot 
= m_xRot + 0.5f;
    m_yRot 
= m_yRot + 0.5f;
    InvalidateRect(NULL, FALSE);    
    CView::OnTimer(nIDEvent);
}

3,加入两个菜单项,控制OpenGL的渲染模式

void CCY457OpenGLView::OnShadingmodelSmooth() 
{
    glShadeModel(GL_SMOOTH);
    InvalidateRect(NULL,FALSE);
}

void CCY457OpenGLView::OnShadingmodelFlat() 
{
    glShadeModel(GL_FLAT);
    InvalidateRect(NULL,FALSE);
}

4,在RenderScene中加入绘制代码:

void CCY457OpenGLView::RenderScene ()
{
//绘制函数
        glTranslatef(0.0f,0.0f,-5.0f);
        glRotatef(m_xRot,
1.0f,0.0f,0.0f);
        glRotatef(m_yRot,
0.0f,1.0f,0.0f);
        
//Front Face
        glBegin(GL_POLYGON);
            glColor3f(
1.0f,0.0f,0.0f);
            glVertex3f(
-1.0f,-1.0f,0.0f);
            glColor3f(
1.0f,1.0f,0.0f);
            glVertex3f( 
1.0f,-1.0f,0.0f);
            glColor3f(
1.0f,0.0f,1.0f);
            glVertex3f( 
1.0f1.0f,0.0f);
            glColor3f(
1.0f,1.0f,1.0f);
            glVertex3f(
-1.0f1.0f,0.0f);
        glEnd();
        glColor3f(
1.0f,1.0f,0.0f);
        
//Back Face
        glBegin(GL_POLYGON);
            glVertex3f(
-1.0f,-1.0f,-1.0f);
            glVertex3f(
-1.0f1.0f,-1.0f);
            glVertex3f( 
1.0f1.0f,-1.0f);
            glVertex3f( 
1.0f,-1.0f,-1.0f);
        glEnd();
        glColor3f(
1.0f,0.0f,1.0f);
        
//Left Face
        glBegin(GL_POLYGON);
            glVertex3f(
-1.0f,-1.0f0.0f);
            glVertex3f(
-1.0f1.0f0.0f);
            glVertex3f(
-1.0f1.0f,-1.0f);
            glVertex3f(
-1.0f,-1.0f,-1.0f);
        glEnd();
        glColor3f(
0.0f,1.0f,0.0f);
        
//Right Face
        glBegin(GL_POLYGON);
            glVertex3f(
1.0f,-1.0f0.0f);
            glVertex3f(
1.0f,-1.0f,-1.0f);
            glVertex3f(
1.0f1.0f,-1.0f);
            glVertex3f(
1.0f1.0f0.0f);
        glEnd();
        glColor3f(
0.0f,1.0f,1.0f);
        
//Top Face
        glBegin(GL_POLYGON);
            glVertex3f(
-1.0f1.0f,  0.0f);
            glVertex3f( 
1.0f1.0f,  0.0f);
            glVertex3f( 
1.0f1.0f-1.0f);
            glVertex3f(
-1.0f1.0f-1.0f);
        glEnd();
        glColor3f(
0.0f,0.0f,1.0f);
        
//Botton Face
        glBegin(GL_POLYGON);
            glVertex3f(
-1.0f-1.0f,  0.0f);
            glVertex3f(
-1.0f-1.0f-1.0f);
            glVertex3f( 
1.0f-1.0f-1.0f);
            glVertex3f( 
1.0f-1.0f,  0.0f);
        glEnd();
}

 

作者:洞庭散人

出处:http://phinecos.cnblogs.com/    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
原文链接:http://www.cnblogs.com/phinecos/archive/2008/11/05/1327571.html

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