OpenGL中的混合(Blending)
来源:互联网 发布:网络尖兵是什么 编辑:程序博客网 时间:2024/05/18 12:03
这篇是在上一篇的基础上修改而来的,对应着Nehe教程的第8课,代码仍然采用MFC框架来实现。
BOOLCOpenGLDemoView::InitGL(GLvoid)
{
if (!LoadGLTextures()) // Jump To Texture Loading Routine ( NEW )
{
return FALSE; // If Texture Didn't Load Return FALSE
}
glEnable(GL_TEXTURE_2D); // Enable Texture Mapping ( 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); // Enable Smooth Shading
//COLORREF color = ::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); // Black Background
glClearDepth(1.0f); // Depth Buffer Setup
glEnable(GL_DEPTH_TEST); // Enables Depth Testing
glDepthFunc(GL_LEQUAL); // The Type Of Depth Testing To Do
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculations
glColor4f(1.0f, 1.0f, 1.0f, 0.5); // Full Brightness. 50% Alpha
glBlendFunc(GL_SRC_ALPHA,GL_ONE); // Set The Blending Function For Translucency
return TRUE; // Initialization Went OK
}
{
if (!LoadGLTextures()) // Jump To Texture Loading Routine ( NEW )
{
return FALSE; // If Texture Didn't Load Return FALSE
}
glEnable(GL_TEXTURE_2D); // Enable Texture Mapping ( 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); // Enable Smooth Shading
//COLORREF color = ::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); // Black Background
glClearDepth(1.0f); // Depth Buffer Setup
glEnable(GL_DEPTH_TEST); // Enables Depth Testing
glDepthFunc(GL_LEQUAL); // The Type Of Depth Testing To Do
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculations
glColor4f(1.0f, 1.0f, 1.0f, 0.5); // Full Brightness. 50% Alpha
glBlendFunc(GL_SRC_ALPHA,GL_ONE); // Set The Blending Function For Translucency
return TRUE; // Initialization Went OK
}
最后在voidCOpenGLDemoView::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)中加入对B按键的事件处理代码:
case 'B':
{
if(bPressed==TRUE)
{//防止长时间按着'B'键而导致持续混合变化
bLighting = !bLighting;
if(bLighting)
{
glEnable(GL_BLEND); // Turn Blending On
glDisable(GL_DEPTH_TEST); // Turn Depth Testing Off
}
else
{
glDisable(GL_BLEND); // Turn Blending Off
glEnable(GL_DEPTH_TEST); // Turn Depth Testing On
}
}
bPressed = FALSE;
break;
}
最终效果如图所示:
- OpenGL中的混合(Blending)
- OpenGL学习之混合——Blending
- 混合 blending
- 在OpenGL中实现多纹理混合(Multi-texture Blending)
- OpenGL学习:Per-fragment operation(3)-混合(blending)
- OpenGL Blending
- OpenGL中的混合 (blend)
- OpenGL中的混合 (blend)
- OpenGL中的混合 (blend)
- OpenGL中的混合测试
- 【D3D Review】Blending 混合
- Class02 图像混合Blending
- opengl中的混合(gl_blend)
- Really Fast Software Blending 混合
- Unity Shader Alpha混合 Blending
- OpenGL学习脚印:混色(Blending)
- 图像运算(五)——混合(blending)
- opencv之图像混合(blending)
- 【翻译】Use a bitmap as a background image
- 用Soap消息调用Web Services
- 自定义ListCtrl中设置背景图片的问题
- OpenGL中的鼠标控制
- 颜色干扰的问题解决了
- OpenGL中的混合(Blending)
- OpenGL中的光照和键盘控制
- 【转】openGL中的选择机制
- 纹理贴图的干扰问题
- 一点小疑问
- 【转】如何在对话框程序中让对话框捕获WM_KEYDOWN消息
- 《VC++深入详解》笔记(一)
- ActiveMQ之composite destinations
- MFC中OpenGL旋转的问题