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

OpenGL支持两种颜色模式：RGBA和颜色索引模式，本文关注于前者。

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.

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的渲染模式

{
InvalidateRect(NULL,FALSE);
}

{
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();
}

posted on 2008-11-05 20:35  Phinecos(洞庭散人)  阅读(4053)  评论(2编辑  收藏  举报