位置: 编程技术 - 正文

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)

  • 怎么把销项税额进项税额给转掉
  • 购销合同印花税按70%
  • 不征税收入计入应纳税所得额吗
  • 资产处置损益属于当期损益吗
  • 增值税普通发票有什么用
  • 贸易公司委托加工买进和卖出东西不一样
  • 商业银行的下列哪些行为违反了法律规定?给存款大户
  • 物业前期开办物资
  • 价内税是指
  • 折扣折让 红字发票账务处理
  • 工会专户收到职工福利经费会计处理怎么做?
  • 拨款和支出的区别
  • 轿车计提折旧
  • 合同额在3000以下的是否缴纳印花税?
  • 增值税专用发票和普通发票的区别
  • 付敏科技有限公司官网
  • 洗衣店每个月水电费多少钱
  • 6%的增值税发票能抵扣13%的吗
  • 小规模免税增值税申报表怎么填
  • 外包物流适用范围
  • 小微企业应纳税所得额不超过100万
  • 企业筹建期间可以自己发农民工工资么
  • 分期收款所得税收入确认多少
  • 1697510490
  • 不征收增值税的项目有哪些
  • 如何让自己的网站被百度收录
  • 票据状态提示付款
  • com2us密码找回
  • 稿酬所得怎么纳税
  • 固定资产资产评估
  • msdn原版win7
  • php如何解决异常处理
  • 材料成本差异如何分摊
  • 微信订阅项目
  • vue前端组件库
  • php的运算符主要包括哪些?
  • 缴纳季度企业所得税比例
  • 已经开票但是未达到收入确认条件的怎么进行账务处理
  • Element-Plus el-col、el-row快速布局
  • javascript对象有哪些
  • javascript零基础入门书籍
  • php数组降序排列
  • 工资计提发放会计科目
  • php文件缓存类
  • 客户多付款不要了,多出这部分是哪种收入
  • 个体户开电子发票怎么申请
  • 计提消费税的会计分录讲解
  • 无偿调入的固定资产其贷方应计入
  • 公司送礼计入什么会计科目
  • 广告费的税额计入哪里
  • 借应付职工薪酬贷财政拨款收入
  • 出口产品报关单
  • 补缴以前年度所得税及滞纳金账务处理
  • 可供分配利润包括哪些
  • 单位组织提供员工服务
  • 技术服务收入如何纳税
  • 咨询公司销售费用有哪些
  • 财务票子怎么粘
  • sql server索引的使用
  • mysql的修改命令
  • Windows7 64位环境下Python-igraph环境配置的方法
  • openbsd6.8
  • ami 2.17.1254bios设置图解教程
  • win10 20h2 04累积更新
  • nomoreporn.exe - nomoreporn是什么进程 有什么用
  • 在linux系统中,用来存在系统所需
  • lua struct
  • 所有游戏通用的画质修改器
  • gridview添加数据
  • 批处理 写入文件
  • python中如何去除空格
  • unity3d粒子系统创建火花
  • 安卓回调接口怎么写
  • 第三方审计报告需要多久
  • 注会证可以挂靠吗?挂靠合法吗?
  • 苏宁易购的联系电话
  • 佛山电子税务
  • 山东2022年退休亏大了
  • 税务稽查立案标准金额
  • 山东发票认证勾选平台网址
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设