经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » iOS » 查看文章
OpenGL 混合功能
来源:cnblogs  作者:春天里的花骨朵  时间:2018/11/20 10:28:56  对本文有异议

一、概念:简言之,即在颜色缓存区和深度缓存区中,新旧颜色的覆盖和替换问题;已经存在于缓存区的为目标颜色,即将进入缓存区的为源颜色;

二、应用场景:在不透明的图形前绘制一个透明的图形;

三、主要代码实现

//核心代码

  1. void RenderScene()
  2. {
  3. //清除缓存区
  4. glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
  5. //设置四个固定矩形颜色
  6. GLfloat vRed[] = {1.0f, 0.0f, 0.0f, 0.5f};
  7. GLfloat vGreen[] = {0.0f, 1.0f, 0.0f, 1.0f};
  8. GLfloat vBlue[] = {0.0f, 0.0f, 1.0f, 1.0f};
  9. GLfloat vBlack[] = {0.0f, 0.0f, 0.0f, 1.0f};
  10. //绘制四个固定矩形
  11. //GLT_SHADER_IDENTITY:单元着色器
  12. shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed);
  13. redBatch.Draw();
  14. shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vGreen);
  15. greenBatch.Draw();
  16. shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vBlue);
  17. blueBatch.Draw();
  18. shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vBlack);
  19. blackBatch.Draw();
  20. //移动矩形设置混合功能
  21. //开启混合功能
  22. glEnable(GL_BLEND);
  23. //设置混合因子
  24. glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  25. //使用固定管线着色器
  26. shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed);
  27. //绘制
  28. squareBatch.Draw();
  29. //关闭混合功能
  30. glDisable(GL_BLEND);
  31. //后台渲染完成交给前台
  32. glutSwapBuffers();
  33. }

四、效果

 

 

 

GitHub

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号