maizi0918 发表于 2011-8-26 09:13:14

GLSL中多于八个光源如何实现

shader着色语言中,只给出了顶点着色器中实现如果想把一致性变量传输给顶点着色器,主程序中应该如何实现呀,多谢了。顶点着色器中定义如下struct gl_LightSourceParameters {
vec4 ambient;
vec4 diffuse;
vec4 specular;
vec4 position;
...};uniform gl_LightSourceParameters gl_LightSource;
这样光源的位置为:gl_LightSource.postion

array 发表于 2011-8-29 09:06:38

着色器中传递大量参数的最好方法是将纹理视为look-up table,否则uniform变量的数目限制会让您步履蹒跚

maizi0918 发表于 2011-9-6 16:28:11

请array再详细说明一下,多谢了,查了一下资料,没有弄明白您是什么意思,如何实现?

array 发表于 2011-9-7 08:24:53

事实上因为方法很多,所以我也无法提供一种让您一目了然的说明方式。我的意思是传入多个光照参数并且依次作用于每个vertex或者pixel,但是由于uniform变量的限制,您需要考虑用纹理作为查找表来传递参数。另外更通用的方法是deferred lighting,您可以自己google

the_mercury 发表于 2012-12-18 10:56:50

多于8个光源可以分为多个Pass并依次绘制就行了。。。。

the_mercury 发表于 2014-6-22 12:35:56

在新的OpenGL规范里面其实没有光照模型的概念,光照模型是需要你自己通过着色器建立起来。你完全可以通过自定义的uniform变量把你自定义的光照模型一致性变量传到着色器中。光源比较多的情况下,一致性变量会很多,你可以考虑使用Uniform Block 和UniformBufferObject传递参数。在OSG里面都有,你找一下有这个类,osg::UniformBufferObject就是干这个用的。
attach://5580.png
页: [1]
查看完整版本: GLSL中多于八个光源如何实现