查看: 4524|回复: 14

请问关于传入Shader的Uniform变量的类型的问题

[复制链接]

该用户从未签到

发表于 2011-3-14 15:46:40 | 显示全部楼层 |阅读模式
目前我有一个规模比较大的二维数组(1600×1600),想作为Uniform类型的变量传入到shader中,但不知shader中如何接收一个任意大小的二维数组?之前看到相关资料说可以用mat4等类型向shader中传入Matrix对象,不知规模再大一些的二维数组如何传呢?
请各位老师指教,谢谢!

该用户从未签到

发表于 2011-3-14 17:38:44 | 显示全部楼层
Uniform只能传入指定的数据类型。用户自定义类型可以尝试使用纹理方式加载,shader中可以得到纹理值。

该用户从未签到

发表于 2011-3-14 19:07:09 | 显示全部楼层
嗯,你建个纹理,把数组存进去么

该用户从未签到

 楼主| 发表于 2011-3-14 22:42:57 | 显示全部楼层
回复 3# tianxiao888


    感谢二位的回答,不过我是想在shader中对于这个数组的值进行计算修改,纹理的话应该不行吧,不知有什么好办法么?

该用户从未签到

发表于 2011-3-15 09:27:37 | 显示全部楼层
目标渲染到纹理

该用户从未签到

 楼主| 发表于 2011-3-15 22:07:26 | 显示全部楼层
回复 5# qele


    感谢您的回答,还有一个小问题是:对于shader的输出,不是只能修改一个像素的颜色值么,如果连周边的一些像素也想一同修改的话,这样如何在shader中操作呢?这个问题一直想不太明白,请给位老师指教~谢谢

该用户从未签到

发表于 2011-3-16 08:27:12 | 显示全部楼层
当您想要传入大规模的数据时,使用纹理作为映射表是目前唯一的方案,也是大家开发时通用和兼容性最好的方法

该用户从未签到

 楼主| 发表于 2011-3-16 11:12:36 | 显示全部楼层
回复 7# array


    谢谢array,您能在具体介绍一下纹理映射表这个技术么,我好想记得OSG里面有一个相关的类,但忘了是叫什么了。。

该用户从未签到

发表于 2011-3-16 12:41:05 | 显示全部楼层
没有特别特殊的地方,无非是把数据作为一个个的纹素保存起来,然后在着色器中通过纹理坐标读取纹理中相应位置的数据

该用户从未签到

 楼主| 发表于 2011-3-16 14:20:59 | 显示全部楼层
回复 9# array


   谢谢array,我明白您的意思。但目前我所想在shader中实现的是,对于一个像素及其周边的几个像素的颜色值的修改(例如一个正方形的中心与4个顶点),我知道在片段着色器中是不允许访问相邻的片段的,但如果想修改若干个像素的颜色值的话,有什么好办法么?

该用户从未签到

发表于 2011-3-16 16:49:21 | 显示全部楼层
对于完全使用并行管道的着色器而言,恐怕没有办法。我想您现在的方向错了。还是老老实实从CPU端做吧

该用户从未签到

发表于 2011-3-16 18:13:12 | 显示全部楼层
如果是纹理的话,应该还是有办法的,比如这个例子:

http://www.lighthouse3d.com/opengl/ledshader/

就是不知道我理解你的问题对不对

该用户从未签到

发表于 2011-3-17 08:44:58 | 显示全部楼层
哦,这么说我倒是想起来了,高斯模糊就是这么做的(取周边8个像素的值),楼上的方法应该可以

该用户从未签到

发表于 2011-3-17 13:32:13 | 显示全部楼层
学习了~

该用户从未签到

 楼主| 发表于 2011-3-17 15:14:30 | 显示全部楼层
感谢各位的回答,学习了不少东西~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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