surface colour derived from vertex y axis

Hi - my first thread/post, and apologies to all if this should be in the OGSL section - I’m an openGL newbie.

I’m generating surfaces that plot the distribution of data, each data point has an x and y value and my surface plots the number of times a particular combination of a x and y have been received - see the attached screen grab. To help visualise the vertical frequency axis I’m also applying a colour map to the z axis. The surface is drawn using triangles. calculation of the vertices colour is calculated before the data is sent to the graphics card [working on using VBOs, at the mo I specify each triangle vertex by vertex]

My question is, can I use a shader [which I assume are compiled and loaded onto the GPU] to calculate the colour from the vertex y axis value? Can I preload a colour map into the GPU that the GPU can use to look up the y value and get the RGB value of the vertex?

The graph has to update regularly as it will be monitoring a live steam of data. Is there any speed advantage in getting the GPU to do the colour calculation?

The fragment shader would look like the following (though untested):


#version 330

uniform sampler1D heightGradient; // gradient texture with colour transition

uniform float heightMin; // height to be assigned with the lowest colour
uniform float heightMax; // height to be assigned with the highest colour

uniform vec4 vertexPosition; // position of pixel to be drawn (unprojected!)

void main()
{	
	float coord = (vertexPosition.Y - heightMin) / (heightMax - heightMin) - heightMin; // or any other calculation that suits your needs
	coord = clamp(coord, 0.0f, 1.0f); // can also be defined outside of GLSL to handle the behaviour outside the texture

	gl_FragColor = texture1D(heightGradient, coord); // final color assign
}

Yes, you can preload the colour transition map to the GPU. The rest works as mentioned above. I am quite unfamiliar with data live streams, so I cannot help you there.

I just saw your post here and already responded to you other post elsewhere on the forum. Please do not cross post.