分享

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

 mtjs 2010-05-15

豆豆网   技术应用频道   2008年12月30日 

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

  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.0f, 1.0f,0.0f);
      glColor3f(1.0f,1.0f,1.0f);
      glVertex3f(-1.0f, 1.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.0f, 1.0f,-1.0f);
      glVertex3f( 1.0f, 1.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.0f, 0.0f);
      glVertex3f(-1.0f, 1.0f, 0.0f);
      glVertex3f(-1.0f, 1.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.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();
    glColor3f(0.0f,1.0f,1.0f);
    //Top Face
    glBegin(GL_POLYGON);
      glVertex3f(-1.0f, 1.0f, 0.0f);
      glVertex3f( 1.0f, 1.0f, 0.0f);
      glVertex3f( 1.0f, 1.0f, -1.0f);
      glVertex3f(-1.0f, 1.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();
}

来源:博客园    作者:Phinecos(洞庭散人) 


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多