位置: 编程技术 - 正文

OpenGL阴影贴图详解(opengl消隐)

编辑:rootadmin

推荐整理分享OpenGL阴影贴图详解(opengl消隐),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:opengl绘图背景透明,opengl 加载模型 贴图,opengl3d贴图,opengl2.1光影,opengl3d贴图,opengl 加载模型 贴图,opengl3d贴图,opengl背景贴图,内容如对您有帮助,希望把文章链接给更多的朋友!

既然模拟出了光照,那么也少不了阴影,阴影的产生是因为距离光线较近的物体遮挡了距离较远的物体,导致被遮挡的物体接受的光照少于遮挡物的,因此阴影的产生与否与物体到光源的位置有关系,静态物体的阴影可以用光照贴图来模拟,而动态阴影要用阴影锥或者阴影贴图实现,阴影锥会引入许多额外的顶点为管线带来负担,目前比较流行的阴影模拟方法是用阴影贴图,它的好处在于只是用纹理存储物体的深度信息而并不会引入额外顶点.

要实现阴影贴图有以下几个步骤:

首先开辟一块纹理缓存以便之后保存世界的深度信息:

我这边开了两张深度纹理shadowMapTextureLeft与shadowMapTextureRight.

然后新建渲染目标对象fbo,fbo类&#;于帧缓冲区,只不过把渲染的片段保存于其他的缓存而不是屏幕上的帧缓冲区:

这边的glDrawBuffer(GL_NONE);与glReadBuffer(GL_NONE);是为了屏蔽颜色的输入输出,因为这个fbo用于写入深度信息.

缓冲区准备工作完成.

接着设置光源:

然后设置渲染阴影贴图的投影矩阵:

这边我用的是方向光源,所以设置的平行投影.

然后设置渲染阴影贴图的视图矩阵,将视点放在光源位置,将方向定位光向量:

好了,现在准备工作都完成了,开始渲染阴影贴图:

给fbo挂上深度纹理,接下来渲染的内容都将保存到深度纹理当中,把遮挡物的正面剔除,因为遮挡物反面也会产生正确的阴影.

OpenGL阴影贴图详解(opengl消隐)

然后还原渲染目标,清除一下帧缓冲区内容

接着进行一遍普通渲染,重置投影与视图矩阵:

传入深度纹理进行一次普通渲染:

普通渲染的时候使用阴影贴图比较着色器,进行阴影渲染.

有一点要说明一下,阴影贴图中的片段深度信息都是在纹理坐标系内的点,那么进行正常渲染的时候我们传入渲染阴影贴图时候用的视图矩阵与投影矩阵,然后进行以下变换:

模型空间->世界空间->阴影视图空间->阴影投影空间->规范化设备空间->阴影贴图纹理空间

那么接下来向着色器传递以下矩阵:

所以顶点着色器可以这么写:

然后在片段着色器当中将传入的shadowVertLeft和shadowVertRight都除以它们的w坐标&#;就能得到正常渲染的片元在阴影贴图坐标系内的坐标&#;了,之后把这个坐标&#;的深度(也就是z&#;)与阴影贴图内的深度&#;用shadow2D做比较,这边我偷了个懒,用shadow2DProj做,使用proj函数可以实现齐次除法,也就是顶点&#;除以w.

片段着色器这么写:

片段的z坐标要加上一个偏移量,原因如图所示:

最后返回的factor&#;即为阴影&#;,把它与环境颜色相乘就能够输出片段了.

最终效果如下:

还能够在渲染阴影贴图的那一步使用着色器对深度纹理进行过滤产生半影区,这边我使用了pcf法对阴影进行处理.

codeblocks配置GLUT 原文地址:

SDL2源代码分析7:显示(SDL_RenderPresent()) =====================================================SDL源代码分析系列文章列表:SDL2源代码分析1:初始化(SDL_Init())SDL2源代码分析2:窗口(SDL_Window)SDL2源代码

在Xcode中使用GLUT开发OpenGL应用程序 Xcode是MacOSX中自带的开发环境。GLUT提供了跨越平台的OpenGL实用工具。本文讲述如何在Xcode3.2中使用GLUT来开发OpenGL应用程序。在Xcode的启动面板中,选Create

标签: opengl消隐

本文链接地址:https://www.jiuchutong.com/biancheng/373124.html 转载请保留说明!

上一篇:学习Nehe Lesson2 && Lesson3(学习雷锋好榜样)

下一篇:codeblocks配置GLUT(codeblocks配置文件在哪)

  • 个人收到拆迁补偿款缴税吗
  • 所得税申报表的营业收入包括营业外收入吗
  • 个人账户发工资扣税吗
  • 会计科目已受控于应收应付系统
  • 未分配利润期末余额在借方还是贷方
  • 购进用于研发的国产设备进项税可以抵扣吗
  • 民办非营利组织幼儿园清算时固定资产如何处理
  • 企业赞助学校发言稿
  • 购买实验器材会计分录
  • 房产空置怎么判定
  • 有代扣个税的是什么人
  • 企业法人股东向个人借款能起诉查封公司财产吗
  • 个税系统中允许捐赠比例是多少?
  • 资产减值损失列示在利润表哪里
  • 进口有退税吗最新政策
  • 税务核定利润的标准
  • 土地使用权出让金
  • 委托加工物资在初级第几章
  • 金税盘服务费计入什么会计科目
  • 厂家质量问题商家有责任吗
  • mac怎么传文件到百度网盘上
  • 以前年度损益调整会计分录
  • 稿酬所得怎么纳税
  • 分享php源码批量运行
  • php中变量有哪些基本数据类型?
  • 无产权买卖
  • el-cascader数据渲染时不出现文字
  • 长期挂账的其他应付款转营业外收入情况说明
  • 行政事业单位会计科目一览表
  • 如何检查路由器防火墙设置
  • 在申报季度企业所得税时,残疾人工资可以加计扣除吗
  • 前端数据加密的三种方式
  • php调用其他php
  • 育空河24102
  • 第一章 使用layui的表格和表单
  • yolo v4 v5
  • 会计利润表计算公式
  • 库存商品的盘盈盘亏
  • 待核销基建支出与待摊投资的区别
  • 酒店低值易耗品怎么摊销
  • 原材料入库单价20000出库单价800000
  • 结转在建工程的会计分录
  • 计算企业所得税分录
  • 建筑企业预缴的增值税怎么抵扣
  • 房产税从何时计算缴纳
  • sqlserver设置简单模式
  • 受托代销商品款是什么类账户
  • 提供劳务收入包含什么
  • 劳务成本科目的分类
  • 受托方开具加工费发票
  • 建设银行e信通介绍
  • 应交税金包括哪些税费
  • 企业研发支出的核算内容
  • 为什么看科目四看不进去呀
  • 无形资产是当月计提折旧吗
  • 实收资本包括哪些项目
  • 同一个sql语句 连接两个数据库服务器
  • windows7开机黑屏安全模式也进不去
  • 电脑显示window
  • ubuntu 20.04 服务器
  • win7旗舰版开机
  • 苹果Mac系统怎么用光盘安装
  • mac新建窗口快捷键
  • windows8的ie浏览器在哪
  • 思科用户模式命令
  • windows 10 周年更新
  • Win7安装VPN软件后无法上网是什么原因如何解决
  • redhat linux8
  • jquery ajax异步提交表单数据的方法
  • javascriptjs
  • dos 批处理
  • debug命令及其基本操作
  • python rem
  • unity游戏开发的技术路线有哪些
  • 搭建nfs
  • js document.cookie
  • 开发区税务局咨询电话
  • 大连市国家税务局官网登录
  • 一般纳税人做账收费标准
  • 浙江省违章建筑年限认定
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设