操纵gl_LightSource [gl_MaxLights]

时间:2010-12-27 21:53:18

标签: webgl

OpenGL®着色语言规范版本1.20 http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.20.8.pdf显示以下内容:

struct gl_LightSourceParameters {
vec4  ambient;             // Acli
vec4  diffuse;             // Dcli
vec4  specular;            // Scli
vec4  position;            // Ppli
vec4  halfVector;          // Derived: Hi
vec3  spotDirection;       // Sdli
float spotExponent;        // Srli
float spotCutoff;          // Crli
                           // (range: [0.0,90.0], 180.0)
float spotCosCutoff;       // Derived: cos(Crli)
                           // (range: [1.0,0.0],-1.0)
float constantAttenuation; // K0
float linearAttenuation;   // K1
float quadraticAttenuation;// K2
};

    uniform gl_LightSourceParameters  gl_LightSource[gl_MaxLights];

此外,http://www.lighthouse3d.com/opengl/glsl/index.php?ogldir1显示以下代码段:

lightDir = normalize(vec3(gl_LightSource[0].position));

https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/doc/spec/WebGL-spec.html#5.10显示了许多统一的*函数,但似乎没有像gl_LightSource [0]那样处理一个统一变量数组。

如何使用JavaScript在 WebGL 中设置gl_LightSource [0]字段?例如,gl_LightSource [0] .position

提前感谢您的帮助。

注意:http://www.khronos.org/message_boards/viewtopic.php?f=43&t=3373上的交叉帖子

1 个答案:

答案 0 :(得分:3)

WebGL基于OpenGL ES 2.0--即为手机等受限硬件设计的OpenGL版本 - 并且不支持开箱即用的照明;你必须自己编码。我写了some tutorials(大部分基于NeHe OpenGL),它解释了如何做到这一点;鉴于你的问题,他们可能对你来说有点基础,但是第7课和第12课可能会给你一些有用的指示。