博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】 《基于MFC的OpenGL编程》Part 8 Colors
阅读量:4970 次
发布时间:2019-06-12

本文共 2599 字,大约阅读时间需要 8 分钟。

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/lcxu2/archive/2010/11/23/2004052.html

你可能感兴趣的文章
cross socket和msgpack的数据序列和还原
查看>>
解决跨操作系统平台JSON中文乱码问题
查看>>
DELPHI搭建centos开发环境
查看>>
IdHTTPServer允许跨域访问
查看>>
更新.net core 3.0,dotnet ef命令无法使用的解决办法
查看>>
React躬行记(13)——React Router
查看>>
前端利器躬行记(1)——npm
查看>>
前端利器躬行记(2)——Babel
查看>>
前端利器躬行记(6)——Fiddler
查看>>
Forbidden You don't have permission to access / on this server.
查看>>
Windows server 2008 R2中安装MySQL !
查看>>
Intellij Idea新建web项目(转)
查看>>
用JAVA编写浏览器内核之实现javascript的document对象与内置方法
查看>>
linux 命令之top
查看>>
洛谷 [P3033] 牛的障碍
查看>>
centos iptables
查看>>
unity3d 移动与旋转 2
查看>>
寻找二叉查找树中比指定值小的所有节点中最大的那个节点
查看>>
如何设置输入框达到只读效果
查看>>
RT3070 USB WIFI 在连接socket编程过程中问题总结
查看>>