# Using ofLight with ofVbo results in strange line on surface

Hello,

I’ve been experimenting with lighthing on a surface mesh made with ofVbo (I need to use such object to modify vertices and colours on compute shaders for a project) and while experimenting I realised that there might be some problem with how lighting is calculated.
Take the following basic example, just a plane mesh that I make via the following for loop, setting up normals, indices and colours:

``````	originalColor = ofFloatColor::yellowGreen;

myIndices = new ofIndexType[myWidth * myHeight * 6];

int iteratorIndices = 0;

for (int y = 0; y < myHeight; y += 1) {
for (int x = 0; x < myWidth; x += 1) {

myVertices.push_back((float)x - myWidth / 2);
myVertices.push_back((float)y - myHeight / 2);
myVertices.push_back((float)0);
myVertices.push_back((float)1);

myNormals.push_back((float)0);
myNormals.push_back((float)0);
myNormals.push_back((float)1);
myNormals.push_back((float)1);

myVertColours.push_back(originalColor);

if (x < myWidth - 1 && y < myHeight - 1) {

myIndices[iteratorIndices] = x + y * myWidth;
myIndices[iteratorIndices + 1] = (x + 1) + y * myWidth;
myIndices[iteratorIndices + 2] = x + (y + 1) * myWidth;

myIndices[iteratorIndices + 3] = (x + 1) + y * myWidth;
myIndices[iteratorIndices + 4] = (x + 1) + (y + 1) * myWidth;
myIndices[iteratorIndices + 5] = x + (y + 1) * myWidth;

iteratorIndices += 6;
}
}
}

vertexBuffer.allocate(myVertices, GL_DYNAMIC_DRAW);
colorBuffer.allocate(myVertColours, GL_DYNAMIC_DRAW);
normalBuffer.allocate(myNormals, GL_DYNAMIC_DRAW);

myVBO.setVertexBuffer(vertexBuffer, 4, 4 * sizeof(float));
myVBO.setColorBuffer(colorBuffer, sizeof(ofFloatColor));
myVBO.setNormalBuffer(normalBuffer, 4);
myVBO.setIndexData(myIndices, myWidth * myHeight * 6, GL_STATIC_DRAW);

``````

I’m using buffer just to be able to bind them and modify them on compute shaders but in this example I am just drawing the ofVbo straight away without drawing it.
Notice how the normals are just set up with 4 dimensions (somehow doesn’t work with just 3) but what matters here is that z = 1 so the normal is facing upward perpendicularily to the surface.

The ofLight is just setup this way:

``````	pointLight.setSpecularColor(ofColor(255.f, 255.f, 255.f));
pointLight.setPosition(myWidth / 2, myHeight / 2, 0);
``````

Then the draw function is pretty easy:

``````	ofBackgroundGradient(ofColor(64), ofColor(0));

ofEnableLighting();
pointLight.enable();
cam.begin();
myVBO.drawElements(GL_TRIANGLES, (myWidth - 1) * (myHeight - 1) * 6, 0);
cam.end();
ofDisableLighting();
``````

Here’s what I see when running the program:

Any idea why those lines appear while they have no reason to?

Thanks

This is a sort of a corrected and light version of:

I just managed to narrow down and isolate the problem to ofVbo and ofLight.

Full code available here:
ofApp.zip (2.0 KB)