位置: 编程技术 - 正文

ios平台中glsl中shadow2DProjEXT函数的简单说明以及变换矩阵的小注意点

编辑:rootadmin

推荐整理分享ios平台中glsl中shadow2DProjEXT函数的简单说明以及变换矩阵的小注意点,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

一.shadow2DProjEXT函数需要传入一张深度纹理和一个点的坐标(4维)

1.这里首先注意的是这张纹理必须使用采样器类型为sampler2DShadow才可以,直接使用sampler2D是不行的,会出错。

2.深度纹理必须设置正确的&#;式GL_DEPTH_COMPONENT,另外要指定相应的比较函数,可以通过glTexParameteri来设置GL_TEXTURE_COMPARE_FUNC_EXT为GL_LEQUAL,GL_TEXTURE_COMPARE_MODE_EXT为GL_COMPARE_REF_TO_TEXTURE_EXT

3.传入的坐标是4维的(x,y,z,w),shadow2DProjEXT函数内部会这样做

shadow2DProjEXT(depthTexture, shadowCoord);其实是分两步,第一步会取出真正的纹理坐标即shadowCoord.xy / shadowCoord.w并存depthTexture中对应位置取出相应的深度&#;,相当于执行float depth = texture2D(depthTexture,shadowCoord.xy/shadowCoord.w)。第二步则是对纹理中的深度&#;与坐标中的深度&#;进行比较纹理中的深度&#;就是depth,而坐标中的深度&#;要通过计算:float depth1 = shadowCoord.z / shadowCoord.w,然后将depth 与depth1做比较。

4.返回&#;问题,此函数的返回&#;为0或者1,若depth < depth1 则返回0表示深度测试未通过,反之为1表示深度测试通过。

二、上面计算时有一点需要注意,就是第三步的时候,在进行纹理坐标计算和坐标中的深度&#;计算时要注意shadowCoord是经过转换后的坐标,这里的转换后的意思是必须将shadowCoord的x,y,z由[-1,1]转换到[0,1],所以通常在实现的时候直接在mvp矩阵的前面乘上一个偏移矩阵,

bias = 0.5, 0.0, 0.0, 0.5

0.0,0.5, 0.0,0.5

ios平台中glsl中shadow2DProjEXT函数的简单说明以及变换矩阵的小注意点

0.0, 0.0,0.5,0.5

0.0, 0.0,0.0,1.0

这样bias * (x,y,z,w),然后在除掉第四个分量之后就是(x &#;1)*0.5,(y&#;1)*0.5,(z&#;1)*0.5,这样就实现了转换。

但是由于opengl的矩阵是列优先的,所以我们在进行矩阵设置的时候要把矩阵进行转置才可以,

bias =

0.5, 0.0, 0.0, 0.0

0.0,0.5, 0.0,0.0

0.0, 0.0,0.5,0.0

0.5, 0.5,0.5,1.0

这样就ok了。

在通常的过程中我们唔需要考虑行列主序的问题,因为我们计算得到的矩阵(比如通过lookAt,或者glm的相关函数得到的矩阵)与shader中需要的&#;式是一致的,所以我们传入就可以使用,只有一种情况下我们需要考虑矩阵的列主序或者行主序关系,那就是将GLSL矩阵放入自定义的内存块是,当将矩阵传递到uniform块中式,就需要考虑这个问题,例如上面,我们自己写了一个矩阵存储在自定义的内存块中,所以我们向shader中传递的时候就要进行行列转置,这样才能正确的使用矩阵。

OpenGL 顶点缓存对象 顶点缓存对象(VertexBufferObject,简称VBO),允许开发者根据情况把顶点数据放到显存中。如果不用VBO,用glVertexPointer/glNormalPointer来指定顶点数据,这时

OpenGL顶点数组 OpenGL中,如果要绘制图元,一般来说会使用:glBegin(GL_LINES);glVertex3f(0.0f,0.0f,0.0f);glVertex3f(1.0f,0.0f,0.0f);glEnd();但是,如果顶点数太多,这种方法需要频繁调

Ubuntu. GLUT的安装 更新源第一步更新源,最好换成国内的一些源,开始因为一些原因,始终安装不成功,换了源以后问题一下就解决了。换源教程,来自百度经验.我用的

标签: ios平台中glsl中shadow2DProjEXT函数的简单说明以及变换矩阵的小注意点

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

上一篇:Tutorial 4: Shaders

下一篇:OpenGL 顶点缓存对象(opengl update)

  • 捐赠税前扣除比例表
  • 服务型公司要交多少税
  • 收到失业保险稳岗补贴会计分录
  • 营业外收入缴纳税款
  • 个税申报没填过租房信息,却有怎么回事
  • 利润表里的所得税怎么算
  • 房地产企业没有退还的履约保证金税务
  • 固定资产租入租金计入什么科目
  • 罚款收据与通用的区别
  • 进口化妆品消费税率是多少
  • 机械租赁费怎么算
  • 一般纳税人可以转小规模吗
  • 进项税额转出补交税金会计分录
  • 专利费代缴
  • 结转劳务费
  • 企业免征土地使用税吗
  • 事业单位存货包括哪些
  • 出纳现金日记账表格模板
  • 银行缴纳印花税贷款方面哪些可以减免
  • 营改增后小规模纳税人转一般纳人
  • 填制和审核凭证是什么意思
  • 机动车辆发票如何认证?
  • 公司租赁房屋的物业费怎么入账
  • 服务费发生退回怎么处理
  • 报关单和发票上的公司抬头不一致
  • 取得走逃失联企业的异常增值税发票如何处理
  • 其他应付款和其他应交款区别
  • 固定资产的确认条件有哪些
  • 出口货物退货流程
  • 股权转让的会计凭证
  • phpemail正则
  • 进项税加计抵扣最新政策2019
  • 印花税怎么交款
  • 债劵利息怎么计算
  • 不动产进项税额转出计算公式
  • 租金没有收进来,房产税要交吗
  • win10电脑c盘满了怎么转移到d盘
  • 最小的电脑是多少寸的
  • 报废车怎么走流程
  • react函数组件useeffect
  • 出口退税需要提供什么
  • 采购员出差预借差旅费300元
  • 缺陷修饰
  • route命令的作用
  • 小规模纳税人出租不动产税率是5%还是3%
  • 营业外支出科目代码
  • 三十而已 1
  • 数论电子书下载
  • MySQL中distinct与group by之间的性能进行比较
  • 收入和成本的原则是什么
  • 哪些固定资产不会贬值
  • 计提缴纳企业所的会计分录怎么写
  • 股权变更后税务登记
  • 其他收益里的政府是什么
  • 购进固定资产的账务处理
  • 银行的存单丢失了可以补办吗
  • 加计扣除产生的利润可以分配吗
  • 软件购买商城
  • 以前年度损益调整怎么做账
  • 应付职工薪酬为负数什么意思
  • 购买原材料材料尚未验收入库,款项尚未支付
  • 新公司季初资产总额填什么
  • 商业折扣和销售折让计入财务费用吗
  • 印花税滞纳金怎么处理
  • 怎么结转本月期间损益
  • mysql常见优化手段
  • mysql5.7.32免安装教程
  • window8.1蓝屏
  • Win10系统开机出现问题pin码不可用
  • 在Linux系统中安装VS
  • linux文件系统管理命令
  • win7打开软件速度没有win10快
  • 侠客驱动是什么意思
  • nodejs的require
  • opengl 函数可以在子线程中调用吗
  • 魔兽世界全部开发成本
  • python操作json数据
  • 电子税务局房产税税源信息采集
  • 安置残疾人就业增值税即征即退优惠
  • 企业所得税核定征收和查账征收的区别
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设