查看: 5254|回复: 8

着色器+深度纹理图

[复制链接]

该用户从未签到

发表于 2012-11-4 00:32:13 | 显示全部楼层 |阅读模式
前几天贴过一个着色器相关的帖子http://bbs.osgchina.org/forum.php?mod=viewthread&tid=9512,根据各位大师的指点,已经走到这一步(效果图): lake.jpg
此时:"if(dirNormal>=0&&tance&&yuXian>=spotDot)\n"作为主要判断条件
但是当添加了深度值作为判断条件的时候:
         "uniform sampler2D depthTex;\n"传入的一致变量的值是按照array大师的CookBook 里的深度值代码copy的       
               "float z = texture2D(depthTex, gl_TexCoord[0].st).x;\n"
        "        gl_FragDepth = gl_FragCoord.z;\n"
        条件:"if(gl_FragDepth=z&&tance&&yuXian>=spotDot)\n"
这样就会出现(效果): terrian.jpg
如果将条件中的gl_FragDepth=z改成gl_FragDepth>z或者gl_FragDepth<z就出现if条件全部不满足的情况,就是没有着色的效果,希望各位大师指点。

该用户从未签到

发表于 2012-11-4 09:55:00 | 显示全部楼层
对深度纹理的查找不能用texture1D()和texture2D(),在OpenGL着色语言第五章里面有这么两个函数
shadow1D()和shadow2D(),深度纹理的查找和比较是用它们两个的。

该用户从未签到

 楼主| 发表于 2012-11-5 09:17:40 | 显示全部楼层
the_mercury 发表于 2012-11-4 09:55
对深度纹理的查找不能用texture1D()和texture2D(),在OpenGL着色语言第五章里面有这么两个函数
shadow1D() ...

试了,但是没有效果,一样的,房子都是空壳

该用户从未签到

发表于 2012-11-5 10:13:05 | 显示全部楼层
gl_FragDepth是输出值不是输入值。。。

该用户从未签到

 楼主| 发表于 2012-11-5 15:00:29 | 显示全部楼层
array 发表于 2012-11-5 10:13
gl_FragDepth是输出值不是输入值。。。

着色器里面可以把处理的点进行比较么?说是不能递归,难道只能每个顶点vertex计算自己的,不能传给别的顶点比较么?

该用户从未签到

发表于 2012-11-9 09:58:36 | 显示全部楼层
GPU都是并行的处理过程啊。。。vertex之间不能比较,fragment之间也不能比较。这应该是常识的范畴了

该用户从未签到

发表于 2012-11-10 10:45:03 | 显示全部楼层
你写这个着色器的时候忽略了一个很严重的问题:
如果你认真看过OpenGL图形渲染管线,你应该很清楚这一点,在OpenGL的图形管线之中的片段着色器的位置是在光栅化之后,在片段操作之前的,而在OpenGL之中对片段的深度测试过程却是属性片段操作的一部分(片段操作包括裁剪操作、Alpha测试、Stencil测试、深度测试、Dither、逻辑操作等过程),所以这个比较的代码不能在着色器之中编写,它本身还属于固定管线的一部分呢...

该用户从未签到

 楼主| 发表于 2012-11-12 09:28:46 | 显示全部楼层
the_mercury 发表于 2012-11-10 10:45
你写这个着色器的时候忽略了一个很严重的问题:
如果你认真看过OpenGL图形渲染管线,你应该很清楚这一点, ...

你这么了解着色器,你能不能告诉我为什么我写的那个着色器(即使去掉深度测试那部分)在某个模型上可以着色,在其他大部分模型上不能着色呢?着色器不能着色,也没有出现错误的提示呀

该用户从未签到

发表于 2012-11-12 14:38:56 | 显示全部楼层
着色器里面要得到预计算的深度需要用gl_FragCoord.z,而不是作为输出的gl_FragDepth。您的代码里也不是比较而是赋值“if(gl_FragDepth=z)”。至于您所说的有些有效果,有些没效果,大概就是数据的不确定性造成的,您访问了完全不确定的数据,所以得到的结果也无法预知
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表