《基于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;
}
{
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);
}
{
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);
}
{
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();
}
{//绘制函数
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://phinecos.cnblogs.com/
本博客遵从Creative Commons Attribution 3.0 License,若用于非商业目的,您可以自由转载,但请保留原作者信息和文章链接URL。
分类:
C/C++/VC++
, 计算机图形学
posted on 2008-11-05 20:35 Phinecos(洞庭散人) 阅读(4133) 评论(2) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述