2
votes

I'm trying to implement webgl shadow mapping from an example code that already implements it using spidergl. I'm trying to implement it directly on top of WebGL.

I believe I have almost similar code, but I am not getting the results. I have narrowed down the problem to a smaller part of the code. My shader code defines a_position (the vertex position attribute), as vec3; while the spidergl code defines it as vec4. I combed through the spidergl code to understand how their vertex position attributes, which are x-y-z triplets are being filled into a vec4. I expected to find the trick in the call to vertexAttribPointer. But the values of size and stride that they are passing is as expected : 3 and 12. I changed my code to do the same thing, but I am not getting the same results yet.

Can someone explain the basic mechanism by which the position triplets get mapped to vec4? I haven never seen code that also mentions w along with x,y,z coordinates of a cube's corners, but there are shaders that take a_position as vec4. Then what gets filled into the fourth float of vec4?

1

1 Answers

3
votes

This section of glVertexAttrib documentation may interest you:

These commands can be used to specify one, two, three, or all four components of the generic vertex attribute specified by index.

A 1 in the name of the command indicates that only one value is passed, and it will be used to modify the first component of the generic vertex attribute. The second and third components will be set to 0, and the fourth component will be set to 1.

Similarly, a 2 in the name of the command indicates that values are provided for the first two components, the third component will be set to 0, and the fourth component will be set to 1.

A 3 in the name of the command indicates that values are provided for the first three components and the fourth component will be set to 1, whereas a 4 in the name indicates that values are provided for all four components.

Basically if you set a vec4 attribute with a vec3, The first 3 elements of the vec4 match your vec3, and the 4th element is set to 1.

My guess is that your problem is somewhere else in your code.