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中加入如下旋转控制变量:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->GLfloatm_xRot,m_yRot;//绕x,y轴旋转的角度,随时间不断变化
并在构造函数中初始化:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->CCY457OpenGLView::CCY457OpenGLView()
{
m_xRot=0.0f;
m_yRot=0.0f;
}
2,在OnTimer函数中,修改绕x,y轴旋转的角度值
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->voidCCY457OpenGLView::OnTimer(UINTnIDEvent)
{
m_xRot=m_xRot+0.5f;
m_yRot=m_yRot+0.5f;
InvalidateRect(NULL,FALSE);
CView::OnTimer(nIDEvent);
}
3,加入两个菜单项,控制OpenGL的渲染模式
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->voidCCY457OpenGLView::OnShadingmodelSmooth()
{
glShadeModel(GL_SMOOTH);
InvalidateRect(NULL,FALSE);
}
voidCCY457OpenGLView::OnShadingmodelFlat()
{
glShadeModel(GL_FLAT);
InvalidateRect(NULL,FALSE);
}
4,在RenderScene中加入绘制代码:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->voidCCY457OpenGLView::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);
//FrontFace
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);
//BackFace
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);
//LeftFace
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);
//RightFace
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);
//TopFace
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);
//BottonFace
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();
}
分享到:
相关推荐
基于MFC的OpenGL编程part5源码
基于MFC的OpenGL编程part6源码
基于MFC的OpenGL编程part3源码
基于MFC的OpenGL编程part7的源码 出处:http://phinecos.cnblogs.com/ 代码被我修改过,可以调试出来。原文中的一些细节地方重新注释了一下,方便理解。 很多地方被我修改过,但是大致的内容不会发生变化。 我自己...
基于MFC的OpenGL编程part8源码 洞庭散人的博客源码
《基于MFC的OpenGL编程》Part 7 Colors的源码
基于MFC的OpenGL编程part4源码
基于MFC的OpenGL编程Part10源码 作者:洞庭散人 出处:http://phinecos.cnblogs.com/
基于MFC的OpenGL编程part2
基于MFC的OpenGL编程 基于MFC的OpenGL编程 基于MFC的OpenGL编程 基于MFC的OpenGL编程 基于MFC的OpenGL编程
基于MFC的OpenGL编程Part9源码 作者:洞庭散人 出处:http://phinecos.cnblogs.com/
使用单文档视图框架,解决拖动时产生的抖动问题
C++ openGL库文件,有普通的openGL库资源,主要是基于MFC编程的库文件
本程序是基于基于MFC和OPENGL的编程,希望对大家的学习会有帮助。
对于OpenGL的应用,常常是基于GDI接口来实现的。在Windows下做开发,自然 就需要了解OpenGL在MFC下的开发,本工程是MFC下OpenGL开发的一个简单实例。
基于MFC的OpenGL编程.pdf
介绍在MFC中进行OpenGL编程的方法,包括设置、基本介绍,和实例介绍,chm格式的,方便浏览