查看: 1737|回复: 7

渲染到纹理

[复制链接]

该用户从未签到

发表于 2009-11-7 15:38:56 | 显示全部楼层 |阅读模式
渲染到纹理的时候,在这个纹理上能不能只保存深度值,而不保存颜色信息?应该如何做到?

该用户从未签到

发表于 2009-11-7 22:52:06 | 显示全部楼层
attach的时候,设置使用DEPTH_BUFFER而非COLOR_BUFFER

该用户从未签到

 楼主| 发表于 2009-11-9 20:15:00 | 显示全部楼层
我将DEPTH_BUFFER绑定到了一个Image上。可是我将这个image添加到一Texture里面,经过渲染,还是能正常的把这个物体给绘制到纹理上。
我把prerender 这个例子修改了一下,在使用image的情况下,把原来的COLOR_BUFFER改成了DEPTH_BUFFER,可是没有发生任何改变

该用户从未签到

发表于 2010-9-17 15:33:35 | 显示全部楼层
2# array

如果不设置为DEPTH_BUFFER,而依然设置为COLOR_BUFFER,并在片元着色器中写
gl_FragColor = gl_FragCoord;
是否与设置成DEPTH_BUFFER效果一样呢?

我把一个模型按照上述方法渲染到纹理,并作为另一个模型的输入纹理,用以比较它们片元的深度,但效果不理想,不知道问题在哪儿。

该用户从未签到

发表于 2010-9-17 15:42:40 | 显示全部楼层
另外,我还用了一种深度比较方法
position = gl_ModelViewProjectionMatrix * gl_Vertex;
使用position.z作为深度比较的参考。效果也不理想,呵呵~

该用户从未签到

发表于 2010-9-17 16:40:59 | 显示全部楼层
position.z是可以作为深度比较的基准的,不知道您说的效果不理想是指什么。要注意OpenGL的深度缓冲区是float形式,因此很多时候您的检测和判断都不得不忍受浮点数的误差,造成一些情况(例如两个面间隔很近)的渲染结果不佳

该用户从未签到

发表于 2010-9-19 09:21:57 | 显示全部楼层
后来发现,问题出在纹理上。positon点坐标分量都是大于1的数,而存储纹理只能存入[0,1]之间的数,所以渲染到纹理的坐标值是不正确的。

该用户从未签到

发表于 2010-9-19 11:19:08 | 显示全部楼层
加入
  1. texture->setInternalFormat(GL_RGBA16F_ARB);
  2. texture->setSourceFormat(GL_RGBA);
  3. texture->setSourceType(GL_FLOAT);
复制代码
ok
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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