当前位置: 首页 > news >正文

《基于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();
}

转载于:https://www.cnblogs.com/GameDeveloper/articles/1974739.html

相关文章:

  • C#基础系列问题三委托知识总结2
  • 软件开发求助 源码+网页
  • 在MS系统中用netsh命令改IP地址。
  • 工作vs.事业
  • 常用缓存软件
  • 命令行安装安全证书
  • 100题_26 和为n连续正数序列
  • 实战Active Directory站点部署与管理,Active Directory系列之十
  • Office 2007免序列号安装的ISO制作方法
  • 继神曲之后的忐忑(解决多款浏览器兼容xml问题)
  • 工业故事:奇瑞的故事(转载)
  • php Socket 入门例子
  • IIS W3C日志记录字段和HTTP状态代码的说明
  • 需求分析的定义(转)
  • 发博文表决心
  • angular组件开发
  • canvas 五子棋游戏
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • Debian下无root权限使用Python访问Oracle
  • isset在php5.6-和php7.0+的一些差异
  • java正则表式的使用
  • laravel with 查询列表限制条数
  • Sublime Text 2/3 绑定Eclipse快捷键
  • tweak 支持第三方库
  • uni-app项目数字滚动
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 回流、重绘及其优化
  • 今年的LC3大会没了?
  • 蓝海存储开关机注意事项总结
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 问题之ssh中Host key verification failed的解决
  • 异常机制详解
  • Hibernate主键生成策略及选择
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • #在 README.md 中生成项目目录结构
  • (03)光刻——半导体电路的绘制
  • (4)logging(日志模块)
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (WSI分类)WSI分类文献小综述 2024
  • (二)正点原子I.MX6ULL u-boot移植
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (转)memcache、redis缓存
  • (转载)虚函数剖析
  • .apk 成为历史!
  • .gitignore
  • .net Signalr 使用笔记
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • @Controller和@RestController的区别?
  • @Import注解详解
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?
  • [20161101]rman备份与数据文件变化7.txt
  • [AHOI2009]中国象棋 DP,递推,组合数