OpenGL支持兩種顏色模式:RGBA和顏色索引模式,本文關(guān)注于前者。
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.
一個(gè)簡(jiǎn)單Demo
1,在CCY457OpenGLView.h中加入如下旋轉(zhuǎn)控制變量:
GLfloat m_xRot, m_yRot;//繞x,y軸旋轉(zhuǎn)的角度,隨時(shí)間不斷變化
并在構(gòu)造函數(shù)中初始化:
CCY457OpenGLView::CCY457OpenGLView()
{
m_xRot = 0.0f;
m_yRot = 0.0f;
}
2,在OnTimer函數(shù)中,修改繞x,y軸旋轉(zhuǎn)的角度值
void CCY457OpenGLView::OnTimer(UINT nIDEvent)
{
m_xRot = m_xRot + 0.5f;
m_yRot = m_yRot + 0.5f;
InvalidateRect(NULL, FALSE);
CView::OnTimer(nIDEvent);
}
3,加入兩個(gè)菜單項(xiàng),控制OpenGL的渲染模式
void CCY457OpenGLView::OnShadingmodelSmooth()
{
glShadeModel(GL_SMOOTH);
InvalidateRect(NULL,FALSE);
}
void CCY457OpenGLView::OnShadingmodelFlat()
{
glShadeModel(GL_FLAT);
InvalidateRect(NULL,FALSE);
}
4,在RenderScene中加入繪制代碼:
void CCY457OpenGLView::RenderScene ()
{//繪制函數(shù)
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();
}
原文鏈接:
http://www.cnblogs.com/phinecos/archive/2008/11/05/1327571.html