OpenGL中的混合(Blending)

本文基于Nehe教程第8课,详细介绍了如何使用MFC框架实现OpenGL中的混合操作。文章通过修改InitGL函数,引入了混合操作所需的代码,并在键盘事件处理中实现了B按键对混合状态的控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这篇是在上一篇的基础上修改而来的,对应着Nehe教程的第8课,代码仍然采用MFC框架来实现。

其中InitGL需要做些修改,加入混合操作所需要的代码:

<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->BOOLCOpenGLDemoView::InitGL(GLvoid)
{
if(!LoadGLTextures())//JumpToTextureLoadingRoutine(NEW)
{
returnFALSE;//IfTextureDidn'tLoadReturnFALSE
}
glEnable(GL_TEXTURE_2D);
//EnableTextureMapping(NEW)

glLightfv(GL_LIGHT1,GL_AMBIENT,LightAmbient);
//设置环境光
glLightfv(GL_LIGHT1,GL_DIFFUSE,LightDiffuse);//设置漫射光
glLightfv(GL_LIGHT1,GL_POSITION,LightPosition);//设置光源位置
glEnable(GL_LIGHT1);//启用一号光源

glShadeModel(GL_SMOOTH);
//EnableSmoothShading
//COLORREFcolor=::GetSysColor(COLOR_3DFACE);
//glClearColor((float)GetRValue(color)/255.0f,
//(float)GetGValue(color)/255.0f,
//(float)GetBValue(color)/255.0f,
//1.0);
glClearColor(0.0f,0.0f,0.0f,0.5f);//BlackBackground


glClearDepth(
1.0f);//DepthBufferSetup
glEnable(GL_DEPTH_TEST);//EnablesDepthTesting
glDepthFunc(GL_LEQUAL);//TheTypeOfDepthTestingToDo
glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);//ReallyNicePerspectiveCalculations

glColor4f(
1.0f,1.0f,1.0f,0.5);//FullBrightness.50%Alpha
glBlendFunc(GL_SRC_ALPHA,GL_ONE);//SetTheBlendingFunctionForTranslucency


returnTRUE;//InitializationWentOK
}

最后在void COpenGLDemoView::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)中加入对B按键的事件处理代码:

<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->
case'B':
{
if(bPressed==TRUE)
{
//防止长时间按着'B'键而导致持续混合变化
bLighting=!bLighting;
if(bLighting)
{
glEnable(GL_BLEND);
//TurnBlendingOn
glDisable(GL_DEPTH_TEST);//TurnDepthTestingOff
}
else
{
glDisable(GL_BLEND);
//TurnBlendingOff
glEnable(GL_DEPTH_TEST);//TurnDepthTestingOn
}
}
bPressed
=FALSE;

break;
}

最终效果如图所示:

200780904.jpg


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值