Part of the Khronos Group
OpenGL.org

The Industry's Foundation for High Performance Graphics

from games to virtual reality, mobile phones to supercomputers

Results 1 to 3 of 3

Thread: surface colour derived from vertex y axis

  1. #1
    Newbie Newbie
    Join Date
    Apr 2014
    Posts
    2

    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?
    Attached Thumbnails Attached Thumbnails Click image for larger version. 

Name:	ogld2.jpg 
Views:	55 
Size:	77.8 KB 
ID:	1279   Click image for larger version. 

Name:	ogld4.jpg 
Views:	42 
Size:	23.0 KB 
ID:	1278  

  2. #2
    Intern Contributor Brokenmind's Avatar
    Join Date
    Feb 2014
    Location
    Aachen / Germany
    Posts
    71
    The fragment shader would look like the following (though untested):

    Code :
    #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.

  3. #3
    Junior Member Regular Contributor Agent D's Avatar
    Join Date
    Sep 2011
    Location
    Innsbruck, Austria
    Posts
    151
    I just saw your post here and already responded to you other post elsewhere on the forum. Please do not cross post.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •